__traits with alias

Philippe Sigaud via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu May 8 00:33:26 PDT 2014


>          alias a = __traits(getMember, module_, m); // fails
>          //Error: basic type expected, not __traits
>          //Error: semicolon expected to close alias declaration

> Is this a bug or I've missed something?

It's a syntax limitation for alias. That bites us from time to time.
A workaround is to wrap it into another template, to 'hide' __traits.

Like this:

alias Alias(alias a) = a; // A bit circular, I know.

void registerAll(alias module_)()
{
     foreach (m; __traits(derivedMembers, module_)) {
         regInner!(__traits(getMember, module_, m));

         alias a = Alias!(__traits(getMember, module_, m)); // compiles
     }
}

void regInner(alias T)()
{
     // ...
}

void main(){}


I think there is bug report / enhancement for this. I find it a bit
annoying, since aliasing a __traits expression is quite common.


More information about the Digitalmars-d-learn mailing list