Avoiding __traits(getAttributes, ...) on alias

Stefan Frijters via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri May 9 04:53:58 PDT 2014


I've been playing with UDAs a bit and I wanted to find all 
variables with a particular attribute in various modules. I 
thought I had it cracked, until I added a module that contains an 
alias declaration, which makes it choke when trying to execute 
__traits(getAttributes, ...). A small example is shown below. Is 
there any conditional I can insert between the two foreach lines 
to make it detect such an alias declaration, and move on to the 
next derived member? Or should getAttributes handle this by just 
returning no attributes?

import std.traits;

@("testattr") int foo;
alias char[256] MyChar;
@("testattr") int bar;

void main() {
   foreach(e ; __traits(derivedMembers, mixin(__MODULE__)))  {
     foreach( t; __traits(getAttributes, mixin(e)) ){
       pragma(msg, t);
     }
   }
   // testattr
   // test.d(9): Error: first argument is not a symbol
   // test.d(9): Error: invalid foreach aggregate false
   // testattr
}

Any hints would be appreciated!

Kind regards,

Stefan Frijters


More information about the Digitalmars-d-learn mailing list