xxxxxxxxxx
import std.stdio;
enum menum { A, B, C }
void main()
{
foo(menum.A);
}
void foo(menum e)
{
writeln(instantiateWith!Temp(e));
}
auto instantiateWith(alias Fn, T)(T x)
if (is(T == enum))
{
switch (x)
{
import std.traits : EnumMembers;
static foreach (e; EnumMembers!T)
case e:
return Fn!e;
default:
assert(false);
}
}
struct TempStruct { uint i; };
template Temp(menum e)
{
TempStruct Temp;
shared static this()
{
static if (e == menum.A)
Temp.i = 3;
}
//enum Temp = e.stringof;
}