Variadic template bug ?

BCS ao at pathlink.com
Thu Oct 25 19:25:43 PDT 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?!!?





More information about the Digitalmars-d mailing list