summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorgiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-15 01:46:11 +0000
committergiovannibajo <giovannibajo@138bc75d-0d04-0410-961f-82ee72b054a4>2004-01-15 01:46:11 +0000
commit4c2329962fd39e056892e797dfa6efcbcd1d64a4 (patch)
tree22af60ab4a7c6bd599d9d06f3b084f77f5d3d82a
parent182d094ecc7cd42d9b6f5a22b392b8c0be65dde4 (diff)
downloadppe42-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/ChangeLog6
-rw-r--r--gcc/testsuite/g++.dg/parse/casting-operator2.C27
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/explicit83.C35
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> > ();
OpenPOWER on IntegriCloud