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.