xxxxxxxxxx
import std.stdio, std.meta, std.traits, std.conv;
enum _MyEnum : int { a,b,c}
struct _Enum(T)
{
T value;
alias value this;
static foreach(e, v; EnumMembers!T) mixin("static typeof(this) "~to!string(v)~" = cast(typeof(this))(T."~to!string(v)~");");
static auto toString()
{
string s;
static foreach(e, v; EnumMembers!T) mixin(" s ~= `"~to!string(v)~":"~to!string(e)~",`;");
return s;
}
}
alias _Enum!_MyEnum MyEnum;
void foo(MyEnum e)
{
writeln(to!int(e));
}
void main()
{
foo(MyEnum.a);
foo(MyEnum.b);
foo(MyEnum.c);
MyEnum e = MyEnum.b;
writeln(MyEnum.toString);
}