>>682
*p = 3; が未定義動作だからじゃないか?
副作用居完了点をまたがずに参照と代入を行ってるから