diff --git a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java index b9bf2c3601c..084870852ba 100644 --- a/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java +++ b/core/org.eclipse.cdt.core.tests/parser/org/eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java @@ -3212,4 +3212,27 @@ public class AST2TemplateTests extends AST2BaseTest { ICPPVariable b= ba.assertNonProblem("b =", 1, ICPPVariable.class); ICPPFunction func= ba.assertNonProblem("func(cb)", 4, ICPPFunction.class); } + + // class Incomplete; + // + // char probe(Incomplete* p); + // char (&probe(...))[2]; + // + // namespace ns1 { + // + // template + // class A { + // public: + // static bool m(int a) {} + // }; + // } + // + // void test() { + // int x; + // ns1::A<(sizeof(probe(x)) == 1)>::m(x); + // } + public void testNonTypeTemplateParameter_252108() throws Exception { + BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), true); + ba.assertNonProblem("x))", 1, ICPPVariable.class); + } } 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 eb0d2ff996f..13b747d36de 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 @@ -840,6 +840,13 @@ public class CPPVisitor { IASTName[] ns = ((ICPPASTQualifiedName)name).getNames(); return getContainingScope(ns[ns.length - 1]); } + } else if (parent instanceof ICPPASTTemplateId && + node.getPropertyInParent() == ICPPASTTemplateId.TEMPLATE_ID_ARGUMENT) { + node= parent; // template-id + while (node instanceof IASTName) { + node= node.getParent(); + } + continue; } } else if (node instanceof ICPPASTTemplateParameter) { return CPPTemplates.getContainingScope(node);