Я использую код, в котором я приводил 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 для этот исходный файл)?
И да, мне действительно нужен такой псевдоним.