From f0ed20083b9f18a27a81f8d01b44a826bc08521b Mon Sep 17 00:00:00 2001 From: Giovanni Bajo Date: Fri, 12 Aug 2005 11:34:12 +0200 Subject: [PATCH] re PR c++/8271 (Templates and pointers to const member functions) PR c++/8271 * g++.dg/template/unify10.C: New. From-SVN: r103022 --- gcc/testsuite/ChangeLog | 5 +++ gcc/testsuite/g++.dg/template/unify10.C | 48 +++++++++++++++++++++++++ 2 files changed, 53 insertions(+) create mode 100644 gcc/testsuite/g++.dg/template/unify10.C diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b8bce9b0939..54906bf60ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-12 Giovanni Bajo + + PR c++/8271 + * g++.dg/template/unify10.C: New. + 2005-08-11 James A. Morrison * 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 00000000000..b46c693e01f --- /dev/null +++ b/gcc/testsuite/g++.dg/template/unify10.C @@ -0,0 +1,48 @@ +// { dg-do compile } +// Origin: Wolfgang Bangerth +// and Rene Fonseca +// 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 +void mFunction(void (CLASS::* method)()) {} + +template +void cFunction(void (CLASS::* method)() const) {} + +template +void vFunction(void (CLASS::* method)() volatile) {} + +template +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; +}