[Issue 23617] New: traits(child) compile error need this for something that doesn't need this
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Tue Jan 10 20:15:01 UTC 2023
    
    
  
https://issues.dlang.org/show_bug.cgi?id=23617
          Issue ID: 23617
           Summary: traits(child) compile error need this for something
                    that doesn't need this
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: minor
          Priority: P3
         Component: dmd
          Assignee: nobody at puremagic.com
          Reporter: destructionator at gmail.com
This code WORKS:
```
struct S {
        void foo() {}
}
struct Wrapper {
  size_t currentIndex;
  S[] arrayOfS;
  auto opDispatch(string name, T ...)(T t) {
    assert(currentIndex < arrayOfS.length);
    alias member = __traits(getMember, S, name);
    return __traits(child, arrayOfS[this.currentIndex], member)(t);
  }
}
void main() {
        Wrapper w;
        w.opDispatch!"foo"();
}
```
But change the alias to inline:
```
struct S {
        void foo() {}
}
struct Wrapper {
  size_t currentIndex;
  S[] arrayOfS;
  auto opDispatch(string name, T ...)(T t) {
    assert(currentIndex < arrayOfS.length);
    // no more separate alias
    return __traits(child, arrayOfS[this.currentIndex], __traits(getMember, S,
name))(t);
  }
}
void main() {
        Wrapper w;
        w.opDispatch!"foo"();
}
```
And get:
wtflol.d(10): Error: symbol expected as second argument of __traits `child`
instead of `this.foo`
wtflol.d(16): Error: template instance `wtflol.Wrapper.opDispatch!"foo"` error
instantiating
OR, change the `this.currentIndex` to just `currentIndex` in either example and
get:
wtflol.d(10): Error: need `this` for `currentIndex` of type `ulong`
So both arguments are attaching things incorrectly.
--
    
    
More information about the Digitalmars-d-bugs
mailing list