// Fail conversion due to ambiguity and virtuality.
intF::*pdif=pdi1;// expected-error {{ambiguous conversion from pointer to member of base class 'struct A' to pointer to member of derived class 'struct F'}} expected-error {{incompatible type}}
intG::*pdig=pdi1;// expected-error {{conversion from pointer to member of class 'struct A' to pointer to member of class 'struct G' via virtual base 'struct D' is not allowed}} expected-error {{incompatible type}}
(void)(hm->*pi);// expected-error {{left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'struct HasMembers'}}
(void)(phm.*pi);// expected-error {{left hand operand to .* must be a class compatible with the right hand operand, but is 'struct HasMembers *'}}
(void)(i.*pi);// expected-error {{left hand operand to .* must be a class compatible with the right hand operand, but is 'int'}}
int*ptr;
(void)(ptr->*pi);// expected-error {{left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'int *'}}
intA::*pai=0;
Dd,*pd=&d;
(void)(d.*pai);
(void)(pd->*pai);
Ff,*ptrf=&f;
(void)(f.*pai);// expected-error {{left hand operand to .* must be a class compatible with the right hand operand, but is 'struct F'}}
(void)(ptrf->*pai);// expected-error {{left hand operand to ->* must be a pointer to class compatible with the right hand operand, but is 'struct F *'}}