April 19, 2018
Hi,

getSymbolsByUDA doesn't work when inheritance is involved [1]:

```
import std.traits;

void main()
{
    pragma(msg, getSymbolsByUDA!(A,S).length);
    pragma(msg, getSymbolsByUDA!(B,S).length);
}

class A {
    @S("A") int a;
}

class B : A {
    @S("B") int b;
}

struct S {
    string name;
}
```

The error message seems a bit weird, and after some tinkering, I've been able to reproduce it when creating an AliasSeq with members of both the parent and the child class [2]:

```
import std.meta;

void main()
{
	pragma(msg, AliasSeq!(__traits(getMember, B, "a"), __traits(getMember, B, "b")));
}

class A {
    int a;
}

class B : A {
    int b;
}
```

It seems that using __traits(getMember,...) is introducing some kind of hidden context to the actual class that defines the member... It looks like a bug to me, but there might be a reason to do it this way.

Still, whatever the reason, it definitely breaks getSymbolsByUDA when inheritance is involved. According to the documentation [3] only nested members are excluded (and in any they are just excluded, but still compile), so is this a bug?

[1]: https://run.dlang.io/is/502CUB
[2]: https://run.dlang.io/is/9wOIsa
[3]: https://dlang.org/library/std/traits/get_symbols_byuda.html