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 ルールを作成したくないため) )?
はい、実際にはこの種のエイリアシングが必要です。