On Friday, 20 January 2017 at 09:12:04 UTC, Dukc wrote:
This is fairly complex thing, but I managed to get it working:
template EnumToFlags(E) if(is(E == enum))
{
import std.traits, std.typecons, std.string;
private static auto implementation()
{
string result;
foreach(i, enumMem; EnumMembers!E)
{
result ~= format("enum %s = 1 << %s;\n", enumMem,
i);
}
return result;
}
mixin(implementation);
};
enum X
{
a,b,c
}
void main()
{
alias q = EnumToFlags!X;
with(q)
{
auto m = a;
}
}
It may well be that with(x) only looks for x members, it
probably does not try to look for templates. If so, opDispatch
does not do the trick here. But the above does.
Thanks.
That is basically what I was thinking and it does work.