diff options
author | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-06-15 00:24:47 +0000 |
---|---|---|
committer | Giovanni Bajo <giovannibajo@gcc.gnu.org> | 2004-06-15 00:24:47 +0000 |
commit | 4e0f4df508db6bccfdca88a2bcf26e03317d4c71 (patch) | |
tree | b2b1023b8774b9200182a37a1542321c5abc0145 /gcc | |
parent | 6fb25ec080f0151af5d61ece4f4f2ca3af2d051c (diff) | |
download | gcc-4e0f4df508db6bccfdca88a2bcf26e03317d4c71.zip gcc-4e0f4df508db6bccfdca88a2bcf26e03317d4c71.tar.gz gcc-4e0f4df508db6bccfdca88a2bcf26e03317d4c71.tar.bz2 |
re PR c++/15947 (Puzzling error message for wrong destructor declaration in template class)
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
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 9 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/dtor4.C | 10 |
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d99aef0..7148f22 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 2f57d9d..af732d9 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 9c8a040..7ec7738 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 index 0000000..729ee2f --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/dtor4.C @@ -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>(){} |