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 1697054a84a..a4d6c3b6ea9 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 @@ -3457,6 +3457,29 @@ public class AST2TemplateTests extends AST2TestBase { BindingAssertionHelper ba= new BindingAssertionHelper(getAboveComment(), CPP); ICPPTemplateTypeParameter t= ba.assertNonProblem("T)", 1, ICPPTemplateTypeParameter.class); } + + // template + // constexpr T id(T a) { + // return a; + // } + // + // template + // struct ratio { + // static const int num = N; + // }; + // + // template + // struct ratioRoundUp : ratio {}; + // + // typedef ratioRoundUp> rounded; + // + // template struct Waldo; + // template <> struct Waldo<42> { typedef int type; }; + // + // Waldo::type foo(); // ERROR + public void testDependentIdExprNamingStaticMember_508254() throws Exception { + parseAndCheckBindings(); + } // template // struct integral_constant { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java index 2f43c67ed14..9827261bbe2 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/EvalID.java @@ -439,6 +439,10 @@ public class EvalID extends CPPDependentEvaluation { return new EvalBinding(binding, null, getTemplateDefinition()); } if (binding instanceof ICPPMember) { + if (((ICPPMember) binding).isStatic()) { + // Don't use EvalMemberAccess to represent accesses of static members. + return new EvalBinding(binding, null, getTemplateDefinition()); + } if (ownerEval != null) { return new EvalMemberAccess(nameOwner, ownerEval.getValueCategory(point), binding, ownerEval, false, point); } else {