[Issue 3378] [tdpl] ++x should be an lvalue
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Mar 4 06:09:53 PST 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3378
--- Comment #9 from Steven Schveighoffer <schveiguy at yahoo.com> 2010-03-04 06:09:51 PST ---
(In reply to comment #8)
>
> I can't rewrite bump because it's part of a large example illustrating ref.
I don't wish to have a largeish debate about this, but this is not a good
reason. My rewritten version illustrates ref just as well. The only
difference between mine and yours is that yours illustrates that ++x is an
lvalue.
> The
> book is in copyediting now and I must limit changes as much as possible. All
> other things equal, lvalue is better because there's less rewrite needed.
Less rewrite of the book, more rewrite of the compiler. It's a shame we have
to make a decision based on this. That being said, you stated before there
would be more changes needed in the book. Can we get an idea of how much of a
rewrite we are talking about?
> One extra point to keep in mind: making ++x an lvalue makes compatible
> implementations for UDTs' ++ cheaper.
Making ++x an lvalue would still be possible with UDTs, you can return whatever
you wish from a custom operator. Even if ++x is an lvalue for builtins it
still will be possible to make ++x an rvalue for UDTs. Returning an lvalue
from a UDT is most likely not because it should be used as an lvalue, but more
likely because returning an lvalue performs better. This consideration has
little or no bearing on ++x for builtins. In other words, the fact that UDTs
return an lvalue is a side effect that maybe shouldn't really be exploited in
generic code.
Superficially, all operators that return classes return lvalues, i.e. for a
class A that returns an A on addition and supports assignment from an int will
support something like:
a + a = 5;
which doesn't make any sense for value types, but should we make addition of
two integers return an lvalue for the sake of generic programming so such
statements always compile? I think we should stop debating about the generic
term ++x being an lvalue and focus on whether ++x should be an lvalue for
builtin types, simply because the compiler does not control the lvalueness of
++x for UDTs. When you look at it that way, it's simply a judgement call.
I'm not saying I'm against changing the behavior, it just seems like an
insignificant change to me.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list