std.algorithm move() struct emptying

Stanislav Blinov blinov at loniir.ru
Tue Aug 31 06:24:15 PDT 2010


  31.08.2010 16:49, Michel Fortin пишет:
> On 2010-08-31 06:16:17 -0400, bearophile <bearophileHUGS at lycos.com> said:
>
>> If in generic code T.init is not guaranteed to be an lvalue, as your 
>> example shows, isn't it better to disallow (turning it into a syntax 
>> error) &T.init in all cases?
>
> Personally, I'd say the code should check if T.init is an lvalue using 
> __traits(compiles, &T.init) or is(typeof(&T.init)) and avoid creating 
> a static variable or temporary when it is. This optimization of course 
> depends &T.init not being a syntax error.
>
Well, currently there's even nastier thing than syntax error.

struct S
{
int a;
@property static S init() { return S(10); }
}

Or even

struct S
{
@property static void init() {}
}

Personally I agree with bearophile, but maybe the code such as above 
should be forbidden as well, and for other builtin properties too?


More information about the Digitalmars-d mailing list