aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-06-08 03:24:37 +0000
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>2004-06-08 03:24:37 +0000
commit1e1ff283d0ebc8ae80b8ba4dc920bcf3da14fc58 (patch)
tree2573821d599685b6842e806bdb293c22d5a01b04
parent86d36ccdab2b1084a6148a97ceaa1f1acca31a21 (diff)
PR c++/7841
* parser.c (cp_parser_direct_declarator): Reject constructor named as qualified template-id. PR c++/7841 * g++.old-deja/g++.pt/ctor2.C: Add error mark. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@82741 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.old-deja/g++.pt/ctor2.C2
4 files changed, 22 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 8fff9b00470..365bcd1fba5 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-08 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/7841
+ * parser.c (cp_parser_direct_declarator): Reject constructor named
+ as qualified template-id.
+
2004-06-07 Mark Mitchell <mark@codesourcery.com>
PR c++/15815
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index d094d306ee8..a90dabd0c8c 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -10766,6 +10766,16 @@ cp_parser_direct_declarator (cp_parser* parser,
&& same_type_p (TREE_TYPE (unqualified_name),
class_type)))
*ctor_dtor_or_conv_p = -1;
+ if (TREE_CODE (declarator) == SCOPE_REF
+ && TREE_CODE (unqualified_name) == TYPE_DECL
+ && CLASSTYPE_USE_TEMPLATE (TREE_TYPE (unqualified_name)))
+ {
+ error ("invalid use of constructor as a template");
+ inform ("use `%T::%D' instead of `%T::%T' to name the "
+ "constructor in a qualified name", class_type,
+ DECL_NAME (TYPE_TI_TEMPLATE (class_type)),
+ class_type, class_type);
+ }
}
handle_declarator:;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 055cd69bf8e..069783a6ca1 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2004-06-08 Giovanni Bajo <giovannibajo@gcc.gnu.org>
+
+ PR c++/7841
+ * g++.old-deja/g++.pt/ctor2.C: Add error mark.
+
2004-06-07 Eric Botcazou <ebotcazou@libertysurf.fr>
* gcc.dg/union-1.c: New test.
diff --git a/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C b/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
index e7dbfb77324..46039ace817 100644
--- a/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
+++ b/gcc/testsuite/g++.old-deja/g++.pt/ctor2.C
@@ -8,6 +8,6 @@ struct A {
};
template <class T>
-A<T>::A<T>()
+A<T>::A<T>() // { dg-error "invalid use of constructor|qualified name" }
{
}