On Monday, 1 October 2012 at 18:36:23 UTC, Jonathan M Davis wrote:
CTFE was specifically designed with the idea that you would not
need to mark functions as CTFEable. You can call _any_ functio
at compile time. Some will fail, because they're doing things
that CTFE won't allow, but that's quickly caught, because it
happens at compile time. It completely avoids needing to mark
functions as CTFEable all over the place (which would generally
mean that functions wouldn't be CTFEable, because people would
frequently not mark them as CTFEable). constexpr is in direct
conflict with that design goal.
That's not what I suggested. I meant that all functions would
still be implicitly CTFEable by default, but an attribute like
force_ctfe would make it so that the function is guaranteed to
execute at compile-time when its arguments are compile-time
constants.
And if you want a function to be executed at compile time, you
assign its result to an enum or static variable. Done. It's easy
and straightforward. I really don't understand why this is an
issue at all.
The issue to me is complicating the syntax of your code. The
problem is *having* to assign the result first to an enum, when I
shouldn't have to. I would like to be able to just say
fun("times") and be confident that that's going to be evaluated
at compile-time. I feel like I've done my part of the deal here,
I provided the compile-time argument, and now I'd expect the
compiler to do his part and evaluate the function at compile-time
(if it has that force_ctfe attribute).