[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