On Sunday, August 29, 2010 11:51:51 Torarin wrote: > Even in this case, or in some special case? > > Torarin > > 2010/8/29 Andrei Alexandrescu <seewebsiteforem...@erdani.org>: > > On 08/29/2010 12:00 PM, Torarin wrote: > >> Hi, > >> in std.algorithm move(), this is the operation used to set the source of > >> a struct move to .init: > >> > >> static T empty; > >> memcpy(&source, &empty, T.sizeof); > >> > >> Is there any particular reason why the more compact &T.init is not used? > > > > T.init is not guaranteed to be an lvalue. > > > > Andrei
T.init cannot be set. It's a fixed value. When you use it, you're typically going to be copying it to an lvalue or creating a temporary. Temporaries aren't lvalues. So, T.init can be assigned to an lvalue, but it isn't itself an lvalue. - Jonathan M Davis