Imports incorrectly part of "allMembers" trait output?
bauss via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Jan 2 22:23:01 PST 2017
On Monday, 2 January 2017 at 18:56:40 UTC, Mike Bierlee wrote:
> When compiling the following code with DMD 2.072.2:
>
> class LeClass {
> import std.stdio;
> }
>
> void main() {
> foreach (memberName; __traits(allMembers, LeClass)) {
> pragma(msg, memberName);
> }
> }
>
> The following output is shown in the console:
>
> std
> toString
> toHash
> opCmp
> opEquals
> Monitor
> factory
>
> Note how "std" is part of the output of allMembers. Is this a
> bug or is this intended behavior? I don't think imports are
> necessarily members of a class. It also happens for static
> imports.
It seems to be a bug that it takes std as there's no std as a
part of object, not even as an import.
However there is: __traits(derivedMembers, T) which should only
give you members of your actual class and not anything inherited
from base classes and/or object.
More information about the Digitalmars-d-learn
mailing list