gccでAみたいに書くとstrict aliasing rules警告されるんで、
Bみたいに書いたんだけど、これって正しい、というか、
-fno-strict-aliasingを指定した場合と同じ意味になるって保証されてる?

struct Vec { int x, y, z; };
int  data[3][3] = {{0,1,2},{3,4,5},{6,7,8}};
int main() {
  Vec* v0 = (Vec*)data; // A 警告される
  Vec* v1 = (Vec*)(void*)data; // B 警告されない
  return 0;
}