It seems pure ain't so pure after all

Tommi tommitissari at hotmail.com
Mon Oct 1 13:10:48 PDT 2012


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).



More information about the Digitalmars-d mailing list