With not working with BitFlags

Jot via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Jan 20 10:13:04 PST 2017


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.




More information about the Digitalmars-d-learn mailing list