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.

Reply via email to