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