On 3/20/19 4:11 AM, boolangery wrote:
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"];
}

Ugh, yes, that's required.

Probably can be abstracted in a template.

-Steve

Reply via email to