>>53
どうもありがとう。
7.1.6.1-4の例を見るとどうやらそれが正しいみたいですね。
g++ 4.8.4とVC++2015で試してみたけど(最大限の最適化でfooだけコンパイルしてアセンブリ出力を確認)
その通りの解釈でコード生成してる。

しっかし嫌な仕様だよなあ。
barが外部ライブラリとかでソースが分からない場合const修飾してるからって
ポイント先が書き換わらないと思っちゃいけないわけだ。コンパイラだけじゃなくて
呼び出す側を書くプログラマも。
const_castでconst外しした書き換えなんて規格的には全てundefinedにして
しょうがない場合だけuse at your own riskで使ってもいいよってすれば良かったのに。