digitalmars.D - Variadic template bug ?
The following code : import std.stdio; void Test(literal...)() { foreach(i, foo ; literal) { static if(foo[0] == '$') writefln(foo); } } void main() { Test!("top", "$tip", "tap")(); //Should output "$tip" } won't compile : jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(15): template instance jakuz.Test!("top","$tip","$tap") error instantiating It works by replacing "foo" by "literal[i]" in the static if statement... import std.stdio; void Test(literal...)() { int r; foreach(i, foo ; literal) { static if(literal[i][0] == '$') writefln(foo); } } void main() { Test!("top", "$tip", "tap")(); } Now outputs: $tip But shouldn't foo and literal[i] be exactly the same ?
Oct 25 2007
Reply to Funog,The following code : import std.stdio; void Test(literal...)() { foreach(i, foo ; literal) { static if(foo[0] == '$') writefln(foo); } } void main() { Test!("top", "$tip", "tap")(); //Should output "$tip" } won't compile : jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(8): Error: expression cast(int)(foo[0u]) == 36 is not constant or does not evaluate to a bool jakuz.d(15): template instance jakuz.Test!("top","$tip","$tap") error instantiating It works by replacing "foo" by "literal[i]" in the static if statement... import std.stdio; void Test(literal...)() { int r; foreach(i, foo ; literal) { static if(literal[i][0] == '$') writefln(foo); } } void main() { Test!("top", "$tip", "tap")(); } Now outputs: $tip But shouldn't foo and literal[i] be exactly the same ?yes, this is an old bug, I don't recall if it is in the bugzilla yet. If it's not, go ahead and add it. Walter: Can we get this fixed already?!!?
Oct 25 2007