【C/C++】Strict Aliasing Rule
C++03 だとユーザ定義型も含めてまともに strict aliasing rule を満たした形で可搬に書くのやっぱり無理ちゃいますの? という結論.
2011-08-17 00:06:33C++0x (N3291) だと union のメンバになれる型の制約がほぼ外れるから,問題が解消されて,ユーザ定義型も含めて可搬に strict aliasing rule を充足するように書くことが可能になるはずだけれど.
2011-08-17 00:08:30@Cryolite union の制限が緩くなったことで可搬性を広げられるようなことがあるとは思ってない(ちゃんとアラインされた char バッファを使い回せば同等だと思っている)のですが、具体的に何を「書く」ことについての話なんでしょうか?
2011-08-17 00:22:24@k_satoda うーん,それもそうですよね.もう1度, align された char バッファの使いまわしが安全であることを規格の上から出せるかという視点から再度確認してきます.
2011-08-17 00:33:25strict-aliasing rulesは自分もハマったけど、頻発する割にはソリューションがケースバイケースで面倒くさいですね。>http://t.co/OSOXzes
2011-08-17 00:52:18個人的に「-fno-strict-aliasing」は行儀の悪いコードを放置するような気がしてしまします(気がするだけ)。どうなんでしょうね?Cスタイルキャストもあれだし。
2011-08-17 00:53:53unionのメンバーの場合は100%エイリアスされていることはわかってるんだから、コンパイラはunionメンバのアクセスのリオーダーはしない気がするんだけど。というかしたらコンパイラのバグの気がする。
2011-08-17 01:02:57@Cryolite 今ある規格・ドラフトだけだと "reuse" によるオブジェクトの配置に穴があるようにも読めてしまいますが、未解決の issue #1116, #1072 が元々の意図を把握するうえで参考になると思います。 http://t.co/yUv9Wbg
2011-08-17 01:11:45さっきなんかごちゃごちゃつぶやいていたのはアラインメントの制約を満たした char バッファを使いまわした場合が抜けてるので変な結論になってて, Boost のヘッダ由来の GCC の警告は(自分が把握している限り) false positive だという結論で納得しつつある.
2011-08-17 01:12:27@k_satoda だいたい納得してはいるんですが, "access ○○ through △△" が指している意味内容をどうしても逆の意味に誤解しそうになるのがががが.
2011-08-17 01:40:03