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.


Reply via email to