[Issue 23104] New: case where use of mixin() is rejected but use of the mixin content as code does
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu May 12 08:50:21 UTC 2022
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 at puremagic.com
Reporter: b2.temp at 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__));
}
```
--
More information about the Digitalmars-d-bugs
mailing list