https://issues.dlang.org/show_bug.cgi?id=17974
Basile B. <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |[email protected] --- Comment #2 from Basile B. <[email protected]> --- (In reply to Artem Borisovskiy from comment #1) > What I meant to say is that it can't even access the symbol to test if it > has the attribute. Anyway, here's some more funny (not so at work) stuff: > > // main.d > import std.traits; > enum Attr; > > static struct FUBAR > { > @Attr int a; > void dummy() > { > static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr)) > pragma(msg, getUDAs!(symbol, Attr).stringof); > } > } > > void main() > { > static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr)) > pragma(msg, getUDAs!(symbol, Attr).stringof); > } > > Now I'm lost: > > src/main.d(10): Error: value of 'this' is not known at compile time > () > (Attr) > > But if I make `dummy' static, it works: > (Attr) > (Attr) > > The loop works even on module level (as it should). So it doesn't work only > in non-static methods of FUBAR. --- import std.traits; enum Attr; struct FUBAR { @Attr int a; void dummy() { foreach (i, symbol; getSymbolsByUDA!(FUBAR, Attr)) pragma(msg, getUDAs!(getSymbolsByUDA!(FUBAR, Attr)[i], Attr)); } void dummy2() { static foreach (i; 0..getSymbolsByUDA!(FUBAR, Attr).length) pragma(msg, getUDAs!(getSymbolsByUDA!(FUBAR, Attr)[i], Attr)); } } void main() { static foreach (symbol; getSymbolsByUDA!(FUBAR, Attr)) pragma(msg, getUDAs!(symbol, Attr).stringof); } --- Good luck. --
