diff options
author | Giovanni Bajo <giovannibajo@libero.it> | 2005-08-12 11:34:12 +0200 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2005-08-12 09:34:12 +0000 |
commit | f0ed20083b9f18a27a81f8d01b44a826bc08521b (patch) | |
tree | add5be3afd6f05687eb60d10f7a334a514729dfe /gcc | |
parent | 38d18b1a1e25bb24fb6b7b78bb4811ea88eef790 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/unify10.C | 48 |
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; +} |