What options, if any, do I have to use an enum in C++ that supports reordering/inserting/removing of enum values?

To be honest, no, I don’t see where you’re coming from. I mean, I get your concern about removing values but that’s always a concern when removing anything. The important part is that it can be detected and handled easily.

The other engines are all C++ and internal engines at larger game studios. I’ve been in the industry for more than 15 years and, as far as I can remember, this and Unity are the only engines I’ve worked with that didn’t save their enums as strings.

Maybe I haven’t been direct enough, but I keep explaining what I need and you keep coming back to FNames and tags but you still haven’t explained or given an example of how I can achieve my goals given those tools. I am not against using either but, as far as I can tell, the cannot do what I need them to do.

To reiterate, I need to be able to write the entire system in C++, meaning that all the possible “types”, for lack of a better term (i.e. the enum values), need to be known at compile time and need to be type safe. If you have a suggestion on how to do that with common types of FName and FGameplayTag that uses some Unreal magic, I’d love to hear it. Otherwise, enums are the only thing I can think of that does the job.

FWIW, I’ve just finished writing my enum wrapper to do this for me. I’ll post an approximation of the code once I’ve finished with it and sanitized it of confidential bits.