> In my mind there is some confusion about all this. Other people may give you > better answers.
A solution in such situations is to take a look at the asm, that has confirmed my ideas: string first_function(string k) { immutable string[string] map1 = ["bar" : "spam"]; return map1[k]; } string second_function(string k) { const string[string] map2 = ["bar" : "spam"]; return map2[k]; } string third_function(string k) { enum string[string] map3 = ["bar" : "spam"]; return map3[k]; } string fourth_function(string k) { static enum string[string] map4 = ["bar" : "spam"]; return map4[k]; } immutable string[string] map5; static this() { map5 = ["bar" : "spam"]; } string fifth_function(string k) { return map5[k]; } void main() {} Compiled with: DMD 2.050, -O -release -inline _D5test314first_functionFAyaZAya comdat L0: push EAX mov EAX,offset FLAT:_D11TypeInfo_Aa6__initZ mov ECX,offset FLAT:_D16TypeInfo_HAyayAa6__initZ push dword ptr 0Ch[ESP] push dword ptr 0Ch[ESP] push 8 push EAX push dword ptr FLAT:_DATA[01Ch] push dword ptr FLAT:_DATA[018h] push dword ptr FLAT:_DATA[0Ch] push dword ptr FLAT:_DATA[08h] push 1 push ECX call near ptr __d_assocarrayliteralT add ESP,018h push EAX call near ptr __aaGetRvalue mov EDX,4[EAX] mov EAX,[EAX] add ESP,014h pop ECX ret 8 _D5test315second_functionFAyaZAya comdat L0: push EAX mov EAX,offset FLAT:_D11TypeInfo_Aa6__initZ mov ECX,offset FLAT:_D17TypeInfo_HAyaxAya6__initZ push dword ptr 0Ch[ESP] push dword ptr 0Ch[ESP] push 8 push EAX push dword ptr FLAT:_DATA[01Ch] push dword ptr FLAT:_DATA[018h] push dword ptr FLAT:_DATA[0Ch] push dword ptr FLAT:_DATA[08h] push 1 push ECX call near ptr __d_assocarrayliteralT add ESP,018h push EAX call near ptr __aaGetRvalue mov EDX,4[EAX] mov EAX,[EAX] add ESP,014h pop ECX ret 8 _D5test314third_functionFAyaZAya comdat L0: push EAX mov EAX,offset FLAT:_D11TypeInfo_Aa6__initZ mov ECX,offset FLAT:_D16TypeInfo_HAyaAya6__initZ push dword ptr 0Ch[ESP] push dword ptr 0Ch[ESP] push 8 push EAX push dword ptr FLAT:_DATA[01Ch] push dword ptr FLAT:_DATA[018h] push dword ptr FLAT:_DATA[0Ch] push dword ptr FLAT:_DATA[08h] push 1 push ECX call near ptr __d_assocarrayliteralT add ESP,018h push EAX call near ptr __aaGetRvalue mov EDX,4[EAX] mov EAX,[EAX] add ESP,014h pop ECX ret 8 _D5test315fourth_functionFAyaZAya comdat L0: push EAX mov EAX,offset FLAT:_D11TypeInfo_Aa6__initZ mov ECX,offset FLAT:_D16TypeInfo_HAyaAya6__initZ push dword ptr 0Ch[ESP] push dword ptr 0Ch[ESP] push 8 push EAX push dword ptr FLAT:_DATA[01Ch] push dword ptr FLAT:_DATA[018h] push dword ptr FLAT:_DATA[0Ch] push dword ptr FLAT:_DATA[08h] push 1 push ECX call near ptr __d_assocarrayliteralT add ESP,018h push EAX call near ptr __aaGetRvalue mov EDX,4[EAX] mov EAX,[EAX] add ESP,014h pop ECX ret 8 _D5test314fifth_functionFAyaZAya comdat L0: push EAX mov EAX,offset FLAT:_D11TypeInfo_Aa6__initZ push dword ptr 0Ch[ESP] push dword ptr 0Ch[ESP] push 8 push EAX push dword ptr _D5test34map5yHAyaAa call near ptr __aaGetRvalue mov EDX,4[EAX] mov EAX,[EAX] add ESP,014h pop ECX ret 8 I may add something about this in bugzilla (the problem with enum AAs is already present there). Bye, bearophile