On Monday, 3 November 2014 at 14:07:55 UTC, Uranuz wrote:
I have an example of code like this:

template Node(String)
{
        struct Node {}
        struct Name {}
        struct Attr {}
        
}

void main()
{
        alias MyNode = Node!(string).Node;
        alias MyName = Node!(string).Name;
        alias MyAttr = Node!(string).Attr;
        
}

This code fails during compilation with message:

Compilation output:

/d228/f410.d(12): Error: no property 'Node' for type 'Node!string' /d228/f410.d(12): Error: no property 'Node' for type 'Node!string' /d228/f410.d(13): Error: no property 'Name' for type 'Node!string' /d228/f410.d(13): Error: no property 'Name' for type 'Node!string' /d228/f410.d(14): Error: no property 'Attr' for type 'Node!string' /d228/f410.d(14): Error: no property 'Attr' for type 'Node!string'

So question is: is this intended behaviour and I'm missing something about eponymous templates? Or is it a bug in compiler?

Looks like compiler looks for Node, Name and Attr in Node struct, because of eponymous thing.
This code works though:

template N(String)
{
        struct Node {}
        struct Name {}
        struct Attr {}
        
}

void main()
{
        alias MyNode = N!(string).Node;
        alias MyName = N!(string).Name;
        alias MyAttr = N!(string).Attr;
        
}

Reply via email to