]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR c++/85815 - reference to member of enclosing template.
authorJason Merrill <jason@redhat.com>
Tue, 12 Jun 2018 19:53:10 +0000 (15:53 -0400)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 12 Jun 2018 19:53:10 +0000 (15:53 -0400)
* parser.c (cp_parser_postfix_dot_deref_expression): Check
currently_open_class.

From-SVN: r261524

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/g++.dg/cpp0x/lambda/lambda-dependent1.C [new file with mode: 0644]

index 12758978136ee2341f587f3875f97e5fff92981e..2d06819d4555c0981df1cd34af638c94a097aa81 100644 (file)
@@ -1,5 +1,9 @@
 2018-06-12  Jason Merrill  <jason@redhat.com>
 
+       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.
index 7ba1f5317131511887376d7dd17cc3a1a771b221..6d9b712e2436b5f1819d6eb553878d955187cea6 100644 (file)
@@ -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 (file)
index 0000000..6fd2bb3
--- /dev/null
@@ -0,0 +1,19 @@
+// PR c++/85815
+// { dg-do compile { target c++11 } }
+
+template<class T>
+class A {
+    static A* INSTANCE;
+    void foobar();
+    void moo() {}
+};
+
+template<class T>
+A<T>* A<T>::INSTANCE = nullptr;
+
+template<class T>
+void A<T>::foobar() {
+    auto x = []() {
+        INSTANCE->moo();
+    };
+}