On Thursday, 7 November 2013 at 13:25:40 UTC, Nordlöw wrote:
What is the state and plans on type-safety of enums in D?
I expected
import std.stdio: writeln;
void main(string args[]) {
enum E {x, y, z}
E e;
writeln(e);
e = cast(E)3;
writeln(e);
}
to fail to compile because of D's otherwise strong static
type/range checking or at least give an RangeException when run.
To my surprise, it instead prints
cast(E)3
Is this really the preferred default behaviour for the majority
of use cases?
Use std.conv : to:
e = to!E(3);
results in:
std.conv.ConvException@/opt/compilers/dmd2/include/std/conv.d(1854):
Value (3) does not match any member value of enum 'E'