Why do struct literals count as lvalues?
Ali Çehreli
acehreli at yahoo.com
Thu Aug 18 14:06:09 PDT 2011
On Thu, 18 Aug 2011 22:33:47 +0200, Trass3r wrote:
> Am 18.08.2011, 22:19 Uhr, schrieb Jonathan M Davis
> <jmdavisProg at gmx.com>:
>> Yeah. I don't understand why a struct literal would be an lvalue. It's
>> a temporary. What possible value does it have? It's not a variable. It
>> doesn't
>> refer to a variable. Why would you be able to assign to anything which
>> is not
>> a variable (or indirectly refers to one - e.g. with ref)?
>
> I don't understand it either.
> It only makes sense with const ref.
(I suspect that I am confusing issues here; still... :) )
C++11 added rvalue references. They are useful at least for move
semantics. (Andrei had worked hard to find an non-intrusive solution but
had to settle with an intrusive one: http://drdobbs.com/184403855 )
I remember reading about this in the TDPL. 7.1.3.5 is on topic. Here is
an excerpt from page 251:
"All anonymous rvalues are moved, not copied. A call to this(this) is
never inserted when the source is an anonymous rvalue ..."
Good. And when we want to move a named variable, there is
std.algorithm.move:
kun(move(w));
Ali
More information about the Digitalmars-d
mailing list