Dealing with raw types as attributes

Neia Neutuladh neia at ikeran.org
Thu Nov 1 20:08:42 UTC 2018


On Thu, 01 Nov 2018 11:35:27 -0700, Ali Çehreli wrote:
> On 11/01/2018 09:14 AM, Neia Neutuladh wrote:
>> The spec says that a user-defined attribute must be an expression, but
>> DMD accepts a wide range of things as UDAs:
>> 
>>    struct Foo { string name = "unknown"; }
>>    @Foo int bar;
>> 
>> `bar` has the *type* Foo as an attribute. It's not an *instance* of
>> Foo. So if I try to look at the UDAs:
> 
> That would work with hasUDA(). I have an example here:
> 
>    http://ddili.org/ders/d.en/uda.html

That lets me test for presence, nothing more. While that's useful, I 
usually have a UDA struct whose fields I need to access.

std.traits.getUDAs doesn't hide the difference between @Foo and @Foo(), so 
that's also not an option. I could use a customized version of that that 
replaces @Type with @Type.init, and that's a reasonable choice when I know 
other people aren't going to deal with that annotation type.


More information about the Digitalmars-d-learn mailing list