Предупреждение «разыменование типа-наказанного нарушит правила строгого наложения»

Я использую код, где я приведу enum * к int *. Что-то вроде этого:

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

При компиляции кода (g ++ 4.1.2) я получаю следующее предупреждение:

dereferencing type-punned pointer will break strict-aliasing rules

Я погуглил это сообщение и обнаружил, что это происходит только при строгой оптимизации псевдонимов. У меня есть следующие вопросы:

Если я оставлю код с этим предупреждением, будет ли он генерировать потенциально неправильный код?Есть ли способ обойти эту проблему?Если нет, возможно ли отключить строгое алиасинг из исходного файла (потому что я не хочу отключать его для всех исходных файлов и не хочу создавать отдельное правило Makefile для этого исходного файла )?

И да, мне действительно нужен такой псевдоним.

Ответы на вопрос(5)

Ваш ответ на вопрос