I’m not sure I know all the technical details; however, TMap values are not really pointers, but references, that’s why if you want to get a value, you use *, but then you can de-reference a value and use it as normal copy, not as a pointer.
I tried it on my custom Enum called EAction, and these both work fine:
TMap<EAction, FString> MyTMap;
TMap<TEnumAsByte<EAction>, FString> MyTMap;
It’s just when you want to get the value, you get the reference first:
FString* MyString1 = MyTMap.Find(ACT_Search);
and then you can de-reference the value:
FString MyString2 = *MyString1;
or simply de-reference it right away:
FString MyString3 = *MyTMap.Find(ACT_Search);