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 

Reply via email to