extern(C) int bar(); @bar() void foo(){} //pragma(msg, __traits(getAttributes, foo));void main() { auto x = __traits(getAttributes, foo)[0]; } is compilable and runnable when linker knows where bar() is.
So this is actually supposed to work? The documentation says:
User Defined Attributes (UDA) are compile time expressions that can be attached to a declaration.
I guess the documentation is wrong or at least unclear in that case.