Thread overview | |||||
---|---|---|---|---|---|
|
May 08, 2014 __traits with alias | ||||
---|---|---|---|---|
| ||||
void registerAll(alias module_)() { foreach (m; __traits(derivedMembers, module_)) { regInner!(__traits(getMember, module_, m)); // compiles alias a = __traits(getMember, module_, m); // fails //Error: basic type expected, not __traits //Error: semicolon expected to close alias declaration } } void regInner(alias T)() { // ... } Is this a bug or I've missed something? |
May 08, 2014 Re: __traits with alias | ||||
---|---|---|---|---|
| ||||
Posted in reply to sigod | > 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. |
May 09, 2014 Re: __traits with alias | ||||
---|---|---|---|---|
| ||||
Posted in reply to Philippe Sigaud | On Thursday, 8 May 2014 at 07:33:34 UTC, Philippe Sigaud via Digitalmars-d-learn wrote: > A workaround is to wrap it into another template, to 'hide' __traits. > > Like this: > > alias Alias(alias a) = a; // A bit circular, I know. Oh, thank you. > I think there is bug report / enhancement for this. I find it a bit > annoying, since aliasing a __traits expression is quite common. This one https://issues.dlang.org/show_bug.cgi?id=7804, I believe. |
Copyright © 1999-2021 by the D Language Foundation