| 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
Permalink
Reply