>>30 の例を少し変えてみた。

int i = 0;
int* pi1 = &i;

void* pv = pi1;

// ここから 30 の後半と同じような処理
int* pi2 = pv;
// pi1 と pi2 の値が同じになることは 5.2.9-10
// pi1 の値は正常な int* の値であるので、pi2 も同様
++pi2;
// pi2 の値は問題なくインクリメントされる
pv = pi2;

// ここで 30 終了

あとは、pv の使い方に依存するだろうけど、
pv を int* にキャストして使うのは問題ないよね。

何か見落としある?