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