foreach on a tuple in CTF

Jari-Matti Mäkelä jmjmak at utu.fi.invalid
Tue Apr 24 16:43:24 PDT 2007


Jari-Matti Mäkelä wrote:
> Max Samukha wrote:
>> Why the function cannot be evaluated at compile time? Is it a bug? 
>>
>> import std.stdio;
>>
>> char[] foo(A...)()
>> {
>>     char[] s = "";
>>
>>     foreach (i, v; A)
>>     {
>>         static if (i == 1)
>>             s = i.stringof;
>>     }
>>
>>     return s;
>> }
>>
>> void main(char[][] args)
>> {
>>     alias foo!("test", 100) f;
>>
>>     writefln(f());		// works				
>>     pragma(msg, f());	// error: cannot evaluate at compile time
>> }
> 
> Probably this is a bug too. I haven't really used CTFE much yet, but
> here's a smaller version of the above that triggers the same error msg
> with dmd 1.013
> 
>   char[] foo(A...)()
>   {
>     foreach (i, v; A) {}
>     return "";
>   }
> 
>   pragma(msg, foo!("a")());   // error
> 
> It works if you remove the index part from the foreach or change "a" to
> e.g. 42.

Actually dmd having so many bugs in tuples and type inference makes me
wonder if Walter really knows the best way to implement these. I mean
many language docs just state that they use the Hindley-Milner algorithm
and everything just seems to work. I'm sure these are not easy to
implement, but I just had to ask this.


More information about the Digitalmars-d-learn mailing list