From: Jason Merrill Date: Wed, 19 Nov 2008 19:36:38 +0000 (-0500) Subject: re PR c++/37563 (Trouble calling qualified member function) X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2de6c675d3b3c7a32dee10fee434e120f8cbd05f;p=platform%2Fupstream%2Fgcc.git re PR c++/37563 (Trouble calling qualified member function) PR c++/37563 * parser.c (cp_parser_pseudo_destructor_name): A pseudo-destructor name is not a declaration. From-SVN: r142015 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 8ce3cfe..12a826d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2008-11-19 Jason Merrill + PR c++/37563 + * parser.c (cp_parser_pseudo_destructor_name): A pseudo-destructor + name is not a declaration. + PR c++/37256 * pt.c (instantiate_decl): Don't require a definition of a template that is explicitly instantiated 'extern'. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 5c1f849..2bf0e66 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -5264,7 +5264,7 @@ cp_parser_pseudo_destructor_name (cp_parser* parser, /*typename_keyword_p=*/false, /*check_dependency_p=*/true, /*type_p=*/false, - /*is_declaration=*/true) + /*is_declaration=*/false) != NULL_TREE); /* Now, if we saw a nested-name-specifier, we might be doing the second production. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 53a99de..f1f6c28 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2008-11-19 Jason Merrill + PR c++/37563 + * g++.dg/template/pseudodtor5.C: New test. + PR c++/37256 * g++.dg/cpp0x/extern_template-3.C: New test. diff --git a/gcc/testsuite/g++.dg/template/pseudodtor5.C b/gcc/testsuite/g++.dg/template/pseudodtor5.C new file mode 100644 index 0000000..751e662 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pseudodtor5.C @@ -0,0 +1,23 @@ +// PR c++/37563 + +struct A {}; + +template struct Traits +{ + typedef void X; +}; + +template<> struct Traits<0> +{ + typedef A X; +}; + +template struct B +{ + typedef typename Traits::X Y; + + void foo(Y y) + { + y.Y::A::~A(); + } +};