[Issue 23687] New: IFTI fails forwarding an alias to struct field
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 12 02:53:13 UTC 2023
https://issues.dlang.org/show_bug.cgi?id=23687
Issue ID: 23687
Summary: IFTI fails forwarding an alias to struct field
Product: D
Version: D2
Hardware: Other
OS: Mac OS X
Status: NEW
Severity: major
Priority: P1
Component: dmd
Assignee: nobody at puremagic.com
Reporter: ben.james.jones at gmail.com
```
import std.stdio;
import std.range;
struct LinkedListAdaptor(alias nextField, T){
T current;
@safe:
nothrow:
this(T head){
current = head;
}
bool empty() const {
return current == null;
}
T front() {
return current;
}
void popFront() {
current = __traits(child, current, nextField);
}
}
auto linkedListAdaptor(alias nextField, T)(T head) if(is(T == U*, U)){
return LinkedListAdaptor!(nextField, T)(head);
//fails with:
//onlineapp.d(27): Error: symbol or expression expected as first argument
of __traits `child` instead of `Node*`
// return LinkedListAdaptor!(__traits(child, T, nextField), T)(head);
}
struct Node{
int data;
Node* next;
}
void main(){
Node* head = new Node(10, new Node(20, null));
auto rng1 = LinkedListAdaptor!(Node.next, Node*)(head); //OK
auto rng = linkedListAdaptor!(Node.next)(head);
foreach(const x; rng){
writeln(x.data);
}
}
```
fails on the `auto rng = linkedListAdaptor!(Node.next)(head);` line with
`Error: need `this` for `linkedListAdaptor` of type `pure nothrow @nogc @safe
LinkedListAdaptor!(next, Node*)(Node* head)``
--
More information about the Digitalmars-d-bugs
mailing list