Allow illegal code in enum initialization?
Ali Çehreli
acehreli at yahoo.com
Wed Oct 23 09:27:46 PDT 2013
On 10/23/2013 02:55 AM, simendsjo wrote:
> Illegal code is accepted in static if, but not in enum declarations.
> This leads to having three lines when one is enough. Is this just an
> oversight, or by design?
>
> template T(alias A) {
> enum T = true;
> }
>
> void main() {
> struct S { }
> static if(__traits(compiles, S.a) && T!(S.a)) // ok
> enum e1 = true;
> else
> enum e1 = false;
> enum e2 = __traits(compiles, S.a) && T!(S.a); // No property S.a
> }
I don't know whether it is even specified but it feels like a feature to me.
Just like the shortcut behavior of runtime if helps with avoiding
illegal memory accesses, this helps with avoiding illegal code altogether:
// null access avoided
if ((p !is null) && (p.member == 42))
// illegal code avoided
static if (__traits(compiles, S.a) && (S.a == 42))
Ali
More information about the Digitalmars-d-learn
mailing list