Some template code that worked in 2.065 is not working in 2.066
    Uranuz via Digitalmars-d 
    digitalmars-d at puremagic.com
       
    Fri Aug 22 01:47:22 PDT 2014
    
    
  
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.
    
    
More information about the Digitalmars-d
mailing list