Я использую код, в котором я передавал 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
Я отправил это сообщение в Google и обнаружил, что это происходит только при включенной строгой оптимизации псевдонимов. У меня есть следующие вопросы:
- Если я оставлю код с этим предупреждением, будет ли он генерировать потенциально неправильный код?
- Есть ли способ обойти эту проблему?
- Если этого не происходит, возможно ли отключить строгий псевдоним из исходного файла (потому что я не хочу отключать его для всех исходных файлов, и я не хочу делать отдельное правило Makefile для этот исходный файл)?
И да, мне действительно нужно подобное наложение.