Avoiding __traits(getAttributes, ...) on alias
Stefan Frijters via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri May 9 05:42:56 PDT 2014
On Friday, 9 May 2014 at 12:19:12 UTC, John Colvin wrote:
> On Friday, 9 May 2014 at 11:53:59 UTC, Stefan Frijters wrote:
>> 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
>
> You could always do a static if with __traits(compiles,
> __traits(getAttributes, mixin(e))
Thank you for the fast reply; this solves my problem. I actually
tried this before, but in my actual code instead of the example,
where I'm deep into backticks and quotes and escaped quotes so I
probably made a mistake there...
More information about the Digitalmars-d-learn
mailing list