On Tuesday, 19 March 2019 at 23:41:58 UTC, Steven Schveighoffer
wrote:
On 3/19/19 7:22 PM, Bastiaan Veelo wrote:
Beware that a CT AA stores its elements in a different order
than a RT AA, which you would notice in a foreach, for example.
Yes, this is the issue -- the runtime AA depends on druntime,
which is not available to the compiler. The compiler has its
own AA implementation that it uses for CTFE.
The internals will not be the same, which is why you can't
construct one at compile-time and use it at runtime (the enum
just recreates it at runtime when used).
-Steve
Got it ! Thank you, so I need to write:
enum string[string] CtfeFoo = ["foo" : "bar"];
static immutable string[string] Foo;
static this()
{
Foo = CtfeFoo;
}
string ctfeableFunction()
{
if (__ctfe)
return CtfeFoo["foo"];
else
return Foo["foo"];
}
void main()
{
enum a = ctfeableFunction();
auto b = ctfeableFunction();
}