On Monday, 1 October 2012 at 06:25:19 UTC, Tommi wrote:
On Monday, 1 October 2012 at 06:18:48 UTC, Jonathan M Davis
wrote:
A function which uses __ctfe should probably do essentially
the same thing at
both runtime and compile time, but it _has_ __ctfe, because
the runtime
implementation won't work at compile time, and it's up to the
programmer to
make sure that the function does what it's supposed to at both
compile time
and runtime. The compiler can't possibly enforce that.
Thus we're in a situation where pure means pure only by
convention, not because it's enforced by the compiler. It's
like const in c++ then, it's const only by convention, only
because people promise that they're not going to mutate it. I
don't like rules that are enforced only by everybody relying on
good manners.
The only real problem here is that you wrote a function called
pow2 that effectively returns 6 unconditionally. I doubt your
math professor would be particularly impressed. If you had used
__ctfe properly, it would return the same value both at
compile-time and runtime. At present, __ctfe is a necessary evil
as CTFE can be severely crippled without it.