re PR c++/15947 (Puzzling error message for wrong destructor declaration in template...
authorGiovanni Bajo <giovannibajo@gcc.gnu.org>
Tue, 15 Jun 2004 00:24:47 +0000 (00:24 +0000)
committerGiovanni Bajo <giovannibajo@gcc.gnu.org>
Tue, 15 Jun 2004 00:24:47 +0000 (00:24 +0000)
PR c++/15947
* parser.c (cp_parser_template_name): Ctors/dtors never need a
template keyword to disambiguate.

PR c++/15947
* g++.dg/parse/dtor4.C: New test.

From-SVN: r83154

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/parse/dtor4.C [new file with mode: 0644]

index d99aef0a8fdfb7a88220a87e3e8a058516ef4aa7..7148f222edcf0414bf45aecb5fe94e62662e0f62 100644 (file)
@@ -1,3 +1,9 @@
+2004-06-14  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       PR c++/15947
+       * parser.c (cp_parser_template_name): Ctors/dtors never need a
+       template keyword to disambiguate.
+
 2004-06-14  Mark Mitchell  <mark@codesourcery.com>
 
        PR c++/15096
index 2f57d9d7a36ab0af2347f12d90af9bd2b5581f7e..af732d99267a9064368d5ca609fbebecd2900ba4 100644 (file)
@@ -8286,14 +8286,17 @@ cp_parser_template_name (cp_parser* parser,
       if (is_declaration
          && !template_keyword_p
          && parser->scope && TYPE_P (parser->scope)
-         && dependent_type_p (parser->scope))
+         && dependent_type_p (parser->scope)
+         /* Do not do this for dtors (or ctors), since they never
+            need the template keyword before their name.  */
+         && !constructor_name_p (identifier, parser->scope))
        {
          ptrdiff_t start;
          cp_token* token;
          /* Explain what went wrong.  */
          error ("non-template `%D' used as template", identifier);
-         error ("(use `%T::template %D' to indicate that it is a template)",
-                parser->scope, identifier);
+         inform ("use `%T::template %D' to indicate that it is a template",
+                 parser->scope, identifier);
          /* If parsing tentatively, find the location of the "<"
             token.  */
          if (cp_parser_parsing_tentatively (parser)
index 9c8a040da2d905f051a219b5df038a0865e159af..7ec7738ddee4861fcc6d73f06b864dccaace80b7 100644 (file)
@@ -1,3 +1,8 @@
+2004-06-14  Giovanni Bajo  <giovannibajo@gcc.gnu.org>
+
+       PR c++/15947
+       * g++.dg/parse/dtor4.C: New test.
+
 2004-06-14  Jeff Law  <law@redhat.com>
 
        * gcc.c-torture/compile/20040614-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/parse/dtor4.C b/gcc/testsuite/g++.dg/parse/dtor4.C
new file mode 100644 (file)
index 0000000..729ee2f
--- /dev/null
@@ -0,0 +1,10 @@
+// { dg-do compile }
+// Contributed by Paul Koning <pkoning at equallogic dot com>
+// PR c++/15947: Accept destructor as template in qualified-id
+
+template <int N> struct X {
+  ~X();
+};
+
+template <int N>
+X<N>::~X<N>(){}