31.08.2010 16:49, Michel Fortin пишет:
On 2010-08-31 06:16:17 -0400, bearophile <bearophileh...@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?

Reply via email to