Mapeando Valores enum para Strings em C ++

Existe uma maneira de, em tempo de execução, mapear o valor de um enum para o nome? (Estou construindo com o GCC.)

Eu sei que o GDB pode fazer isso e estou disposto a usar algo que não é portável e se moca com dados de depuração.

Editar: Eu estou procurando uma solução que não requer modificar a declaração de enum original nem manualmente copiar todos os valores em uma função de mapeamento. Eu já sei como fazer as duas coisas.

Efetivamente; Eu quero uma função que faça o que o GDB faz quando formata valores de enum de tempo de execução.