Hello. I have this code:

import std.traits;

enum myuda;

class A { @myuda int x; }

class B : A
    @myuda int some;
void foo() { foreach (s; getSymbolsByUDA!(typeof(this), myuda)) {} }

void main() { (new B).foo(); }

And have this error:

% rdmd uda_symbols.d
/usr/include/dmd/phobos/std/traits.d-mixin-7250(7250): Error: template instance AliasSeq!(some, x) AliasSeq!(some, x) is nested in both B and A /usr/include/dmd/phobos/std/traits.d(7259): Error: template instance std.traits.getSymbolsByUDA!(B, myuda).toSymbols!("some", "x") error instantiating uda_symbols.d(10): instantiated from here: getSymbolsByUDA!(B, myuda)

If I understand correctly it's happens because code in std.traits can't choose between A.x and B.x, but I don't understand why. It's a bug or it's has a more complex base?

Reply via email to