> 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.