May 12, 2022 [Issue 23104] New: case where use of mixin() is rejected but use of the mixin content as code does | ||||
|---|---|---|---|---|
| ||||
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__)); } ``` -- | ||||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply