[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