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.
