summaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/template/unify10.C
diff options
context:
space:
mode:
authorupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
committerupstream source tree <ports@midipix.org>2015-03-15 20:14:05 -0400
commit554fd8c5195424bdbcabf5de30fdc183aba391bd (patch)
tree976dc5ab7fddf506dadce60ae936f43f58787092 /gcc/testsuite/g++.dg/template/unify10.C
downloadcbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.bz2
cbb-gcc-4.6.4-554fd8c5195424bdbcabf5de30fdc183aba391bd.tar.xz
obtained gcc-4.6.4.tar.bz2 from upstream website;upstream
verified gcc-4.6.4.tar.bz2.sig; imported gcc-4.6.4 source tree from verified upstream tarball. downloading a git-generated archive based on the 'upstream' tag should provide you with a source tree that is binary identical to the one extracted from the above tarball. if you have obtained the source via the command 'git clone', however, do note that line-endings of files in your working directory might differ from line-endings of the respective files in the upstream repository.
Diffstat (limited to 'gcc/testsuite/g++.dg/template/unify10.C')
-rw-r--r--gcc/testsuite/g++.dg/template/unify10.C60
1 files changed, 60 insertions, 0 deletions
diff --git a/gcc/testsuite/g++.dg/template/unify10.C b/gcc/testsuite/g++.dg/template/unify10.C
new file mode 100644
index 000000000..8dc434b75
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/unify10.C
@@ -0,0 +1,60 @@
+// { dg-do compile }
+// Origin: Wolfgang Bangerth <bangerth at ticam dot utexas dot edu>
+// and Rene Fonseca <fonseca at mip dot sdu dot dk>
+// PR c++/8271: Check cv-qualifiers while unifying pointer to member
+// functions.
+
+struct MyClass {
+ void mMethod() throw() {}
+ void cMethod() const throw() {}
+ void vMethod() volatile throw() {}
+ void cvMethod() const volatile throw() {}
+};
+
+template<class CLASS>
+void mFunction(void (CLASS::* method)()) {} // { dg-message "note" }
+
+template<class CLASS>
+void cFunction(void (CLASS::* method)() const) {} // { dg-message "note" }
+
+template<class CLASS>
+void vFunction(void (CLASS::* method)() volatile) {} // { dg-message "note" }
+
+template<class CLASS>
+void cvFunction(void (CLASS::* method)() const volatile) {} // { dg-message "note" }
+
+int main() {
+ mFunction(&MyClass::mMethod);
+ mFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 28 }
+ mFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 30 }
+ mFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 32 }
+
+ cFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 35 }
+ cFunction(&MyClass::cMethod);
+ cFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 38 }
+ cFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 40 }
+
+ vFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 43 }
+ vFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 45 }
+ vFunction(&MyClass::vMethod);
+ vFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 48 }
+
+ cvFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 51 }
+ cvFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 53 }
+ cvFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ // { dg-message "candidate" "candidate note" { target *-*-* } 55 }
+ cvFunction(&MyClass::cvMethod);
+
+ return 0;
+}