From 35a66ea7636bcf66e8c64c304ad0733e6b565172 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 21 Dec 2011 18:03:31 +0100 Subject: [PATCH] Bug 332883: Auto type for range based for loop. --- .../core/parser/tests/ast2/AST2CPPTests.java | 27 +++++++++++++++++++ .../dom/parser/cpp/semantics/CPPVisitor.java | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java index a0e7f90ae94..ed79ab1c023 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2CPPTests.java @@ -9367,6 +9367,33 @@ public class AST2CPPTests extends AST2BaseTest { parseAndCheckBindings(); } + // namespace std { + // template struct pair { + // T1 first; + // T2 second; + // }; + // + // template T begin(const pair& p) { + // return p.first; + // } + // template U end(const pair& p) { + // return p.second; + // } + // } + // struct S { + // int x; + // }; + // + // int main() { + // S arr[5]; + // std::pair p{arr, arr + 5}; + // for (const auto& r : p) + // r.x; + // } + public void testAutoTypeInRangeBasedFor_332883c() throws Exception { + parseAndCheckBindings(); + } + // struct S { // void f(); // }; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java index d5e531c20ed..bb05ecc1157 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPVisitor.java @@ -1927,7 +1927,7 @@ public class CPPVisitor extends ASTQueries { beginExpr= expr.copy(); } else if (type instanceof ICPPClassType) { ICPPClassType ct= (ICPPClassType) type; - if (ct.getCompositeScope().find(BEGIN_STR).length > 0) { + if (CPPSemantics.findBindings(ct.getCompositeScope(), BEGIN_STR, true).length > 0) { final CPPASTName name = new CPPASTName(BEGIN); name.setOffset(((ASTNode) forInit).getOffset()); beginExpr= new CPPASTFunctionCallExpression(