foreach on a tuple in CTF

Max Samukha samukha at voliacable.com
Thu Apr 26 01:20:58 PDT 2007


On Wed, 25 Apr 2007 02:43:24 +0300, Jari-Matti Makela
<jmjmak at utu.fi.invalid> wrote:

>Jari-Matti Makela 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.

I know absolutely nothing about how tuples and type inference can be
implemented, so would you please ask this in D NG (Walter does not
seem to give much attention to D.learn)? It would be interesting to
know Walter's or other experts' answers.

I won't post those bugs because many of them seem to be related.
Hopefully, they will be fixed in the next release.


More information about the Digitalmars-d-learn mailing list