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 fb1ffb6482d..2d34c5bf385 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 @@ -7688,5 +7688,16 @@ public class AST2CPPTests extends AST2BaseTest { final String code = getAboveComment(); parseAndCheckBindings(code, ParserLanguage.CPP); } + + // struct A { + // template void m() { + // C c; + // } + // template struct C {}; + // }; + public void testLookupInClassScopeForTemplateIDs_294904() throws Exception { + final String code = getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.CPP); + } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java index ade6d840846..fb802d5b36c 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/LookupData.java @@ -322,6 +322,11 @@ public class LookupData { boolean inInitializer= false; IASTNode parent = name.getParent(); + while (parent instanceof IASTName) { + name= (IASTName) parent; + parent= name.getParent(); + } + while (parent != null && !(parent instanceof IASTFunctionDefinition)) { if (parent instanceof IASTInitializer) { inInitializer= true; @@ -342,8 +347,6 @@ public class LookupData { return false; ASTNodeProperty prop = name.getPropertyInParent(); - if (prop == ICPPASTQualifiedName.SEGMENT_NAME) - prop = name.getParent().getPropertyInParent(); if (prop == IASTIdExpression.ID_NAME || prop == IASTFieldReference.FIELD_NAME || prop == ICASTFieldDesignator.FIELD_NAME ||