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