On Tuesday, 10 September 2019 at 10:32:29 UTC, Andre Pany wrote:
Hi,following coding is throwing compiler error: need this for name of type string The error disappears if I delete method0. My gut feeling is, this is a compiler bug? --- class C { static this() { getT!(typeof(this))(); } @Foo void method0(){} @Foo("abc") void method1(){} } struct Foo { string name; } void getT(T)() { import std.traits: hasUDA, getUDAs; static foreach(fieldName; __traits(allMembers, T)) {static if (hasUDA!(__traits(getMember, T, fieldName), Foo)){pragma(msg, getUDAs!(__traits(getMember, T, fieldName), Foo)[0].name);} } } void main(){} --- Kind regards André
Don't think so. In case of @Foo, you don't instantiate an object. Therefore, name cannot exist. So... in this case, the UDA is a type, not an object you can query for a name. It's more the like the example with SimpleAttr on the help page [1], I think.
[1] https://dlang.org/library/std/traits/get_ud_as.html
