aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@libero.it>2005-08-12 11:34:12 +0200
committerNathan Sidwell <nathan@gcc.gnu.org>2005-08-12 09:34:12 +0000
commitf0ed20083b9f18a27a81f8d01b44a826bc08521b (patch)
treeadd5be3afd6f05687eb60d10f7a334a514729dfe /gcc
parent38d18b1a1e25bb24fb6b7b78bb4811ea88eef790 (diff)
downloadgcc-f0ed20083b9f18a27a81f8d01b44a826bc08521b.zip
gcc-f0ed20083b9f18a27a81f8d01b44a826bc08521b.tar.gz
gcc-f0ed20083b9f18a27a81f8d01b44a826bc08521b.tar.bz2
re PR c++/8271 (Templates and pointers to const member functions)
PR c++/8271 * g++.dg/template/unify10.C: New. From-SVN: r103022
Diffstat (limited to 'gcc')
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/template/unify10.C48
2 files changed, 53 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b8bce9b..54906bf 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2005-08-12 Giovanni Bajo <giovannibajo@libero.it>
+
+ PR c++/8271
+ * g++.dg/template/unify10.C: New.
+
2005-08-11 James A. Morrison <phython@gcc.gnu.org>
* g++.dg/parse/pr22514.C: Move to...
diff --git a/gcc/testsuite/g++.dg/template/unify10.C b/gcc/testsuite/g++.dg/template/unify10.C
new file mode 100644
index 0000000..b46c693
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/unify10.C
@@ -0,0 +1,48 @@
+// { 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)()) {}
+
+template<class CLASS>
+void cFunction(void (CLASS::* method)() const) {}
+
+template<class CLASS>
+void vFunction(void (CLASS::* method)() volatile) {}
+
+template<class CLASS>
+void cvFunction(void (CLASS::* method)() const volatile) {}
+
+int main() {
+ mFunction(&MyClass::mMethod);
+ mFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ mFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ mFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+
+ cFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ cFunction(&MyClass::cMethod);
+ cFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ cFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+
+ vFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ vFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ vFunction(&MyClass::vMethod);
+ vFunction(&MyClass::cvMethod); // { dg-error "no matching function" }
+
+ cvFunction(&MyClass::mMethod); // { dg-error "no matching function" }
+ cvFunction(&MyClass::cMethod); // { dg-error "no matching function" }
+ cvFunction(&MyClass::vMethod); // { dg-error "no matching function" }
+ cvFunction(&MyClass::cvMethod);
+
+ return 0;
+}