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