re PR c++/8271 (Templates and pointers to const member functions)
authorGiovanni Bajo <giovannibajo@libero.it>
Fri, 12 Aug 2005 09:34:12 +0000 (11:34 +0200)
committerNathan Sidwell <nathan@gcc.gnu.org>
Fri, 12 Aug 2005 09:34:12 +0000 (09:34 +0000)
PR c++/8271
* g++.dg/template/unify10.C: New.

From-SVN: r103022

gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/template/unify10.C [new file with mode: 0644]

index b8bce9b..54906bf 100644 (file)
@@ -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 (file)
index 0000000..b46c693
--- /dev/null
@@ -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;
+}