aboutsummaryrefslogtreecommitdiff
path: root/gcc/testsuite/g++.dg/parse/casting-operator2.C
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-01-15 01:46:11 +0000
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-01-15 01:46:11 +0000
commit262b3b4d41e225a71ba95b1eedaa7f31ed730ac3 (patch)
tree22af60ab4a7c6bd599d9d06f3b084f77f5d3d82a /gcc/testsuite/g++.dg/parse/casting-operator2.C
parent8136d061ac5edff42ba716649da3cf499bf904b8 (diff)
PR c++/8856
* g++.dg/parse/casting-operator2.C: New test. * g++.old-deja/g++.pt/explicit83.C: Remove. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@75898 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/testsuite/g++.dg/parse/casting-operator2.C')
-rw-r--r--gcc/testsuite/g++.dg/parse/casting-operator2.C27
1 files changed, 27 insertions, 0 deletions
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" }
+}