getSymbolsByUDA toSymbols error instantiating

Ali Çehreli via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Feb 27 15:31:37 PST 2017


On 02/27/2017 06:26 AM, Oleg B wrote:
> Hello. I have this code:
>
> ```d
> 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?

This looks like a bug to me. Please file it at https://issues.dlang.org/

Ali



More information about the Digitalmars-d-learn mailing list