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.