>>702
(-1 + i)[res] ⇔ *(-1 + i + res) ⇔ *(res + -1 + i) ⇔ res[-1 + i] ⇔ res[i - 1]

これ書いていて思い出した。CもC++も規格では
配列の先頭要素〜最後の要素を1つ越えたところの範囲外を指すポインタの存在すると
プログラムの挙動が未定義になる。694が規約違反と言っているのはこのことだ。
http://www.kouno.jp/home/c_faq/c6.html#17