On 03.02.2016 16:34, Andrea Fontana wrote:
void main()
{
         enum first = very_very_long_function(10);
         writeln("First is ", first);

         auto second = very_very_long_function(12);
         writeln("Second is ", second);

         auto third = first;
         third += 1;
         writeln("Third is ", third);
}

Why second init doesn't work with CTFE? It could be something like
third, but with one less copy. What am I missing?

The compiler doesn't try to apply CTFE everywhere, because it could take forever. So CTFE is only done when the programmer requests it by using a function in a static context.

The compiler is still free to precompute the value at compile time, if it thinks that's a good idea, but that's just an optimization. And while it's evaluation of a function at compile time, it's not CTFE in the sense of __ctfe.

Reply via email to