In my project I have sort of complicated logic to implement data structure that is somehow similar to std.typecons.Tuple. I can't reproduce it, because I can't locate the source of bug. My code is like this but have more nested template "calls".

import std.stdio, std.typetuple;

struct MyLib(Args...)
{
        alias Symbols = _parseArgs!Args;
        
        template GetNames()
        {
                alias GetNames = Symbols;
        }
}


template _parseArgs(Args...)
{
        alias _parseArgs = TypeTuple!Args;
}

void main()
{
        auto myLib = MyLib!("a", "b", "c")();
        
foreach( item; myLib.GetNames!() ) //Error: expression has no value
                writeln(item);

        //foreach( item; typeof(myLib).GetNames!() ) //This is working
        //      writeln(item);
}

Swapping lines that marked as error with commented lines makes it working. In this example error happens using 2.065 and 2.066, but in *my project*, where code is similar to this it compiles in 2.065 but fails in 2.066.

So what should be working in this example by language spec?
1. myLib.GetNames!()
2. typeof(myLib).GetNames!()
3. Both of the above

And it's interesting to see any reasons why this happens.

Reply via email to