diff options
| author | giovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-15 01:46:11 +0000 |
|---|---|---|
| committer | giovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-01-15 01:46:11 +0000 |
| commit | 4c2329962fd39e056892e797dfa6efcbcd1d64a4 (patch) | |
| tree | 22af60ab4a7c6bd599d9d06f3b084f77f5d3d82a | |
| parent | 182d094ecc7cd42d9b6f5a22b392b8c0be65dde4 (diff) | |
| download | ppe42-gcc-4c2329962fd39e056892e797dfa6efcbcd1d64a4.tar.gz ppe42-gcc-4c2329962fd39e056892e797dfa6efcbcd1d64a4.zip | |
PR c++/8856
* g++.dg/parse/casting-operator2.C: New test.
* g++.old-deja/g++.pt/explicit83.C: Remove.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75898 138bc75d-0d04-0410-961f-82ee72b054a4
| -rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
| -rw-r--r-- | gcc/testsuite/g++.dg/parse/casting-operator2.C | 27 | ||||
| -rw-r--r-- | gcc/testsuite/g++.old-deja/g++.pt/explicit83.C | 35 |
3 files changed, 33 insertions, 35 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 2ac3cc83f98..ef55a94a957 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2004-01-15 Giovanni Bajo <giovannibajo@gcc.gnu.org> + + PR c++/8856 + * g++.dg/parse/casting-operator2.C: New test. + * g++.old-deja/g++.pt/explicit83.C: Remove. + 2004-01-14 Joseph S. Myers <jsm@polyomino.org.uk> * gcc.dg/label-compound-stmt-1.c: New test. diff --git a/gcc/testsuite/g++.dg/parse/casting-operator2.C b/gcc/testsuite/g++.dg/parse/casting-operator2.C new file mode 100644 index 00000000000..31f14b36106 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/casting-operator2.C @@ -0,0 +1,27 @@ +// { dg-do compile }
+// Contributed by Martin Loewis <loewis at informatik dot hu-berlin dot de>
+// PR c++/8856: Make sure template conversion operators are not parsed as
+// template names.
+
+struct K {};
+template <bool> struct K2 {};
+
+template <class T> struct A {
+ template <class U> operator U() { return U(); }
+};
+
+int main() {
+ A<double> a;
+
+ (void)a.operator int();
+ (void)a.operator double();
+ (void)a.operator K2<true>();
+ (void)a.A<double>::operator int();
+ (void)a.A<double>::operator double();
+ (void)a.A<double>::operator K2<true>();
+
+ (void)a.operator double<int>(); // { dg-error "not a template" }
+ (void)a.operator K<int>(); // { dg-error "not a template" }
+ (void)a.A<double>::operator double<int>(); // { dg-error "not a template" }
+ (void)a.A<double>::operator K<int>(); // { dg-error "not a template" }
+}
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/explicit83.C b/gcc/testsuite/g++.old-deja/g++.pt/explicit83.C deleted file mode 100644 index 9aa44f597ef..00000000000 --- a/gcc/testsuite/g++.old-deja/g++.pt/explicit83.C +++ /dev/null @@ -1,35 +0,0 @@ -// { dg-do assemble } -// Copyright (C) 2000 Free Software Foundation, Inc. -// Contributed by Nathan Sidwell 7 Sep 2000 <nathan@codesourcery.com> - -// Bug 512. Conversion operator functions in template_id's were always -// being looked up in global scope. - -class C -{ -public: - - template <typename T> - void f () {} - - template<typename T> - operator int () - { return 0; - } -}; - -template void C::f <int>(); - -template C::operator int<float> (); - -template C::operator int<double> (); - -typedef int (C::* ptrmem_t) (); - -template<ptrmem_t U, ptrmem_t V> -void foo () -{ -} - -template void -foo<&C::operator int<float>, &C::operator int<double> > (); |

