__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