1 // { dg-do compile } 2 // Origin: Wolfgang Bangerth <bangerth at ticam dot utexas dot edu> 3 // and Rene Fonseca <fonseca at mip dot sdu dot dk> 4 // PR c++/8271: Check cv-qualifiers while unifying pointer to member 5 // functions. 6 7 struct MyClass { mMethodMyClass8 void mMethod() throw() {} cMethodMyClass9 void cMethod() const throw() {} vMethodMyClass10 void vMethod() volatile throw() {} cvMethodMyClass11 void cvMethod() const volatile throw() {} 12 }; 13 14 template<class CLASS> mFunction(void (CLASS::* method)())15void mFunction(void (CLASS::* method)()) {} // { dg-message "note" } 16 17 template<class CLASS> cFunction(void (CLASS::* method)()const)18void cFunction(void (CLASS::* method)() const) {} // { dg-message "note" } 19 20 template<class CLASS> vFunction(void (CLASS::* method)()volatile)21void vFunction(void (CLASS::* method)() volatile) {} // { dg-message "note" } 22 23 template<class CLASS> cvFunction(void (CLASS::* method)()const volatile)24void cvFunction(void (CLASS::* method)() const volatile) {} // { dg-message "note" } 25 main()26int main() { 27 mFunction(&MyClass::mMethod); 28 mFunction(&MyClass::cMethod); // { dg-error "no matching function" } 29 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 30 mFunction(&MyClass::vMethod); // { dg-error "no matching function" } 31 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 32 mFunction(&MyClass::cvMethod); // { dg-error "no matching function" } 33 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 34 35 cFunction(&MyClass::mMethod); // { dg-error "no matching function" } 36 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 37 cFunction(&MyClass::cMethod); 38 cFunction(&MyClass::vMethod); // { dg-error "no matching function" } 39 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 40 cFunction(&MyClass::cvMethod); // { dg-error "no matching function" } 41 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 42 43 vFunction(&MyClass::mMethod); // { dg-error "no matching function" } 44 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 45 vFunction(&MyClass::cMethod); // { dg-error "no matching function" } 46 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 47 vFunction(&MyClass::vMethod); 48 vFunction(&MyClass::cvMethod); // { dg-error "no matching function" } 49 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 50 51 cvFunction(&MyClass::mMethod); // { dg-error "no matching function" } 52 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 53 cvFunction(&MyClass::cMethod); // { dg-error "no matching function" } 54 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 55 cvFunction(&MyClass::vMethod); // { dg-error "no matching function" } 56 // { dg-message "(candidate|incompatible cv-qualifiers)" "candidate note" { target *-*-* } .-1 } 57 cvFunction(&MyClass::cvMethod); 58 59 return 0; 60 } 61