On Thursday, 9 May 2013 at 18:23:12 UTC, Steven Schveighoffer
wrote:
On Thu, 09 May 2013 13:45:16 -0400, Peter Alexander
Allowing plain-old ref to bind to rvalues would be a massive
mistake in my opinion. See case (2) in the original post.
The case for it is operator overloads. Note that all operator
overloads are defined WITHIN types, and all operator overloads
take 'this' by reference. Without the hack currently in the
compiler that 'this' is allowed to bind by ref to rvalues, D
would be near useless.
C++ has this "hack" as well. Is it really a hack, or just part of
the language design?
Consider that today, this doesn't work for custom structs,
unless you allocate the result on the heap.
((a + b) + (c + d))
I don't follow. You say "today", but this works for me in latest
dmd. Do you mean hypothetically without the "hack", or am I
misunderstanding?
The original case 2 looks bad, but not very common. With
by-ref turning into by-value, you are in effect changing the
API and functionality. It would just mean that you wouldn't
make that change, or change the type name at the same time (so
it wouldn't just compile on existing code).
I'm not sure about how common it is, but I really don't like the
idea of calls like swap(1, 2) being legal. Seems like a step
backward from C++.