digitalmars.D.bugs - [Issue 14740] New: __traits(allMembers) returns erroneous 'this'
- via Digitalmars-d-bugs (46/49) Jun 27 2015 https://issues.dlang.org/show_bug.cgi?id=14740
https://issues.dlang.org/show_bug.cgi?id=14740 Issue ID: 14740 Summary: __traits(allMembers) returns erroneous 'this' member for types declared in functions. Product: D Version: D2 Hardware: x86_64 OS: Mac OS X Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: Mihail.K fimu.tk __traits(allMembers) returns an additional non-existent member named 'this' for types declared inside of functions. ----- struct Foo { this(int x, int y) { } } void main() { struct Bar { this(int x, int y) { } } pragma(msg, __traits(allMembers, Foo)); // => __ctor pragma(msg, __traits(allMembers, Bar)); // => __ctor, this foreach(name; __traits(allMembers, Bar)) { import std.stdio : writeln; typeof(__traits(getMember, Bar, name)).stringof.writeln; } } ----- $ dmd -run demo.dtuple("__ctor") tuple("__ctor", "this") demo.d(24): Error: no property 'this' for type 'Bar'Note the extra member produced by __traits(allMembers, Bar), eventually leading to a compilation error when referred to by __traits(getMember). This is likely an oversight or error and should be removed as it serves no purpose, and can cause problems when iterating over members of a type. --
Jun 27 2015