111
|
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 {
|
|
8 void mMethod() throw() {}
|
|
9 void cMethod() const throw() {}
|
|
10 void vMethod() volatile throw() {}
|
|
11 void cvMethod() const volatile throw() {}
|
|
12 };
|
|
13
|
|
14 template<class CLASS>
|
|
15 void mFunction(void (CLASS::* method)()) {} // { dg-message "note" }
|
|
16
|
|
17 template<class CLASS>
|
|
18 void cFunction(void (CLASS::* method)() const) {} // { dg-message "note" }
|
|
19
|
|
20 template<class CLASS>
|
|
21 void vFunction(void (CLASS::* method)() volatile) {} // { dg-message "note" }
|
|
22
|
|
23 template<class CLASS>
|
|
24 void cvFunction(void (CLASS::* method)() const volatile) {} // { dg-message "note" }
|
|
25
|
|
26 int 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 }
|