::*って違和感あるんだけど、↓で正しい?

class A { int x; int y; float z; } a;
class B { int x; int y; float z; } b;

int A::* p1 = &a.x; //OK
int B::* p2 = &b.x; //OK
int A::* p3 = &b.y; //NG
int B::* p4 = &a.y; //NG
float A::* p5 = &a.x; //NG
float A::* p6 = &a.z; //OK

なんで、A::int* ではなく int A::* なんだろう。変な感じ。