Le 04/08/2012 23:09, Jonathan M Davis a écrit :
At present (though it didn't used to work this way until about 4 months ago -
the change is in 2.060), a number of std.traits templates - including
isSomeString - evaluate to false for enums. So,

enum E : string { a = "hello" }
static assert(isSomeString!(E.a));

will fail. This is in spite of the fact that

auto func(string a) {...}

will accept E.a without complaint. So, if you change

auto func(string a) {...}

to

auto func(T)(T a) if(isSomeString!T) {...}

[...]

- Jonathan M Davis

E;A is a string. By definition. So isSomeString must be true.

However,

T foo(T)(T t) if (isSomeString!T) {
    return t ~ t[0];
}

must trigger an error when T is an enum type. if t has type E, which implicitly cast to string, t ~ t[0] must have type string and not E.

So the given sample code should trigger a compile time error about inconsistent return type.

The same goes for other enums operations.

Reply via email to