Rob, your original code:

// d-linked list with templated payload
struct d_list( T )
{
    struct node
    {
       T payload;
       node* pred;
       node* succ;
    }
    node* head;
    node* tail;
}

compiles just fine for me (Linux 32bits, DMD 2.060).

Even with some exercising, the template doesn't fail:

void main()
{
    auto list = d_list!(int)();
}


On Thu, Nov 8, 2012 at 6:49 PM, Rob T <rob@ucora.com> wrote:
On Thursday, 8 November 2012 at 15:19:56 UTC, Dmitry Olshansky wrote:

Naturally C++ doesn't have nested struct definitions.


I don't have a nested struct, the struct definition defines the type only, and the nodes are allocated as pointers from a new operation when the list is composed. The node struct has a member var that may or may not be a struct type, it does not matter, and C++ will allow a member data type to be a struct just fine.


I also want to template the recursive structure itself to specify the
value type, ie struct R(T){ T value; d_list!R Rlist; }, but I left that
out to keep the example more simple.


I've been stuck on this problem all day, so any help is appreciated!

See if it helps.

I tried moving the node struct outside the d_list struct, but no luck, and I think it should not matter anyway since I can get it to work in that way without a template.

The solution so far is to do it the C++ way, using pointers, which sucks.

I think in this case the D template should work just fine, and the problem is either a bug or a design flaw with how templates are evaluated.

I'll wait a bit longer for more comments before filing a bug report.

--rt