From c1066f1e4af06be703df3309b7776cfa90b4c1f6 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Thu, 19 Apr 2012 19:01:13 -0700 Subject: [PATCH] Bug 377223 - Name resolution problem caused by a const qualifier in template parameter --- .../eclipse/cdt/core/parser/tests/ast2/AST2TemplateTests.java | 2 +- .../internal/core/dom/parser/cpp/semantics/CPPTemplates.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 af0d8f9f419..53a03726d83 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 @@ -5812,7 +5812,7 @@ public class AST2TemplateTests extends AST2BaseTest { //}; // //B a(&A::m); - public void _testConstInTypeParameter_377223() throws Exception { + public void testConstInTypeParameter_377223() throws Exception { parseAndCheckBindings(); } } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java index 8b514346c83..98763fc3a8b 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/semantics/CPPTemplates.java @@ -46,6 +46,7 @@ import org.eclipse.cdt.core.dom.ast.IEnumerator; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IFunctionType; import org.eclipse.cdt.core.dom.ast.IProblemBinding; +import org.eclipse.cdt.core.dom.ast.IQualifierType; import org.eclipse.cdt.core.dom.ast.IScope; import org.eclipse.cdt.core.dom.ast.ISemanticProblem; import org.eclipse.cdt.core.dom.ast.IType; @@ -1190,6 +1191,9 @@ public class CPPTemplates { ICPPPointerToMemberType ptm = (ICPPPointerToMemberType) typeContainer; IType memberOfClass = ptm.getMemberOfClass(); IType newMemberOfClass = instantiateType(memberOfClass, tpMap, packOffset, within); + if (newMemberOfClass instanceof IQualifierType) { + newMemberOfClass = ((IQualifierType) newMemberOfClass).getType(); + } if (!(newMemberOfClass instanceof ICPPClassType || newMemberOfClass instanceof UniqueType || newMemberOfClass instanceof ICPPUnknownBinding)) { return new ProblemType(ISemanticProblem.BINDING_INVALID_TYPE);