digitalmars.D.bugs - [Issue 23104] New: case where use of mixin() is rejected but use of
- d-bugmail puremagic.com (63/63) May 12 2022 https://issues.dlang.org/show_bug.cgi?id=23104
https://issues.dlang.org/show_bug.cgi?id=23104 Issue ID: 23104 Summary: case where use of mixin() is rejected but use of the mixin content as code does Product: D Version: D2 Hardware: All OS: All Status: NEW Keywords: rejects-valid Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: b2.temp gmx.com this does not work: ``` module self; import self; enum getMember = `__traits(getMember, sym, m)`; template printMembers(alias sym) { static foreach (m; __traits(allMembers, sym)) { pragma(msg, __traits(identifier, mixin(getMember))); static if (is(mixin(getMember)==module) || // HERE is(mixin(getMember)==class) || // HERE is(mixin(getMember)==struct)) // HERE { alias _ = printMembers!(mixin(getMember), m); // ERROR HERE } } } void main() { alias _ = printMembers!(mixin(__MODULE__)); } ``` but this does ``` module self; import self; enum getMember = `__traits(getMember, sym, m)`; template printMembers(alias sym) { static foreach (m; __traits(allMembers, sym)) { pragma(msg, __traits(identifier, mixin(getMember))); static if (is(__traits(getMember, sym, m)==module) || // HERE is(__traits(getMember, sym, m)==class) || // HERE is(__traits(getMember, sym, m)==struct)) // HERE { alias _ = printMembers!(mixin(getMember), m); // NO CHANGE HERE BUT WORKS } } } void main() { alias _ = printMembers!(mixin(__MODULE__)); } ``` --
May 12 2022