Checking if CTFE is used?
berni
someone at somemail.de
Tue Dec 18 14:23:38 UTC 2018
On Tuesday, 18 December 2018 at 13:53:01 UTC, Stefan Koch wrote:
> Why would you need to know?
Well, first out of curiosity. But there are also other reasons:
I've got a large immutable array. Without CTFE I'd use some php
script and add it as a large literal. With CTFE I don't need that
php script nor do I need to put that large literal in the source
code. But I need to know, that indeed the array is calculated by
the compiler, else the solution with the php script would result
in faster code.
> if(__ctfe) assert(0, "Yep, CTFE used");
That seems to work, but unfortunately, my script seems not to be
evaluated at compile time... Here is a small example, similar to
my code, where CTFE is not used:
> import std.stdio;
>
> class A
> {
> static immutable int[4] clue;
>
> static this()
> {
> if(__ctfe) assert(0, "Yep, CTFE used");
> foreach (i;0..4) clue[i] = i;
> }
> }
> void main()
> {
> auto tmp = new A();
> writeln(tmp.clue[2]);
> }
Can you help me, finding the problem here?
More information about the Digitalmars-d-learn
mailing list