Hi,

This is the error message I got:

/dlang/dmd/linux/bin64/../../src/druntime/import/object.d(2922): Error: `_d_assocarrayliteralTX` cannot be interpreted at compile time, because it has no available source code return _d_assocarrayliteralTX(typeid(Value[Key]), *cast(void[]*)&keys, *cast(void[]*)&values);

The source:
```d
    import std;

enum EnumMemberNames(T) = is(T==enum) ? [__traits(allMembers, T)] : [];

    class AMDB
    {
        enum SysType {
Entity, String, Int, Bool, Float, Double, DateTime, Date, Time
        }

        static immutable
                sysTypeNames = EnumMemberNames!SysType,
                sysTypes = [EnumMembers!SysType],
sysTypeNameMap2 = assocArray(sysTypeNames, true.repeat) //works //fails sysTypeNameMap3 = assocArray(sysTypeNames, [EnumMembers!SysType]) //fails!!!!!!
        ;

        //works and ugly
mixin(`static immutable sysTypeNameMap4 = [`~sysTypeNames.map!((string a)=>(`"`~a~`":SysType.`~a)).join(',')~`];`);
        
        //also works
        static auto sysTypeNameMap()
        {
                static immutable(SysType)[immutable(string)] this_is_bad;
if(this_is_bad.empty) this_is_bad = assocArray(sysTypeNames, sysTypes);
                return this_is_bad;
        }
    }

    void main()
    {
        AMDB.sysTypeNameMap.writeln;
        AMDB.sysTypeNameMap4.writeln;
    }
```

I only managed to make it when the value range is simple as `true.repeat` or when I generate the whole static immutable declaration by a mixin().

Is there a better way?

Reply via email to