Aviso de "cancelamento de referência de ponteiro puncionado por tipo quebrará regras de alias estritas"

Eu uso um código onde eu converter um enum * para int *. Algo assim:

enum foo { ... }
...
foo foobar;
int *pi = reinterpret_cast<int*>(&foobar);

Ao compilar o código (g ++ 4.1.2), recebo a seguinte mensagem de aviso:

dereferencing type-punned pointer will break strict-aliasing rules

Pesquisei esta mensagem no Google e descobri que ela ocorre apenas quando a otimização estrita de alias está ativada. Tenho as seguintes perguntas:

Se eu deixar o código com esse aviso, ele gerará um código potencialmente errado?Existe alguma maneira de solucionar esse problema?Se não houver, é possível desativar o aliasing rigoroso de dentro do arquivo de origem (porque não quero desativá-lo para todos os arquivos de origem e não quero criar uma regra Makefile separada para esse arquivo de origem )?

E sim, eu realmente preciso desse tipo de alias.

questionAnswers(5)

yourAnswerToTheQuestion