>>140 の後半
それは、>>122 でいう
> 要するにはじめの vp の値が、正常な int* の値から変換されたものであれば
という前提に反している。
だから、正当かどうかはわからん。

僕の主張はこの部分のみです。

> void* vp = malloc(sizeof(int)*2); // int[2] を動的確保
> int* ip = static_cast<int*>(storage); // 確保した配列の先頭を指すポインタを作成
> vp = static_cast<int*>(vp) + 1; // void* から作成した int* に + 1 という演算を加えて void* に戻す。
> assert(vp == (ip + 1)); // 常に成り立つ


>>140 の前半
様々なキャストの中で一番危ない、reinterpret_cast の例を出されても・・・
ということだったのですが、忘れてください。