From: Jason Merrill Date: Tue, 12 Jun 2018 19:53:10 +0000 (-0400) Subject: PR c++/85815 - reference to member of enclosing template. X-Git-Tag: releases/gcc-7.4.0~401 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71f5847e7414838bee04f650b0eb9b34d7bc5957;p=thirdparty%2Fgcc.git PR c++/85815 - reference to member of enclosing template. * parser.c (cp_parser_postfix_dot_deref_expression): Check currently_open_class. From-SVN: r261524 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 12758978136e..2d06819d4555 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2018-06-12 Jason Merrill + PR c++/85815 - reference to member of enclosing template. + * parser.c (cp_parser_postfix_dot_deref_expression): Check + currently_open_class. + PR c++/86060 - ICE on range for with -std=c++98. * parser.c (cp_parser_init_statement): Don't clobber *decl after pedwarn. diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 7ba1f5317131..6d9b712e2436 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -7364,9 +7364,7 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser, if (postfix_expression != current_class_ref && scope != error_mark_node && !(processing_template_decl - && current_class_type - && (same_type_ignoring_top_level_qualifiers_p - (scope, current_class_type)))) + && currently_open_class (scope))) { scope = complete_type (scope); if (!COMPLETE_TYPE_P (scope) diff --git a/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C new file mode 100644 index 000000000000..6fd2bb379bfa --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C @@ -0,0 +1,19 @@ +// PR c++/85815 +// { dg-do compile { target c++11 } } + +template +class A { + static A* INSTANCE; + void foobar(); + void moo() {} +}; + +template +A* A::INSTANCE = nullptr; + +template +void A::foobar() { + auto x = []() { + INSTANCE->moo(); + }; +}