On Fri, Aug 15, 2014 at 06:37:51PM +0000, artemav via Digitalmars-d wrote: > I'm getting an error when trying to compile (DMD64 D Compiler v2.066) this: > > struct node(T) { > T data; > node!T next; > }; > > void main() { > node!int n; > } > > output: > test.d(3): Error: struct test.node!int.node cannot have field next with same > struct type > test.d(9): Error: template instance test.node!int error instantiating > ... > > It is so simple code that the error "... cannot have field next with > same struct type" looks funny and sad at the same time. Is it a bug or > are there some constraints why it cannot be compiled?
This has nothing to do with the struct being parametrized or not. Structs are value types, so defining a struct in terms of itself would make it infinitely large. That's why it's invalid. I'm guessing what you *really* want is to keep a pointer to another struct of the same type, in which case what you're looking for is: struct node(T) { T data; node* next; // Note: it's not necessary to specify // !T here, if you want, you can write // it as: node!T* next; } T -- Having a smoking section in a restaurant is like having a peeing section in a swimming pool. -- Edward Burr