From 078541c956325538b01d8d4561c4bc625751d375 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Mon, 27 Oct 2014 18:04:06 -0700 Subject: [PATCH] Bug 448785 - Name resolution problem with nested alias template --- .../parser/tests/ast2/AST2TemplateTests.java | 25 +++++++++++++++++++ .../parser/cpp/CPPASTTemplateIDAmbiguity.java | 6 +++-- 2 files changed, 29 insertions(+), 2 deletions(-) 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 1b9dbcd3b9b..47209ec482a 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 @@ -7054,6 +7054,31 @@ public class AST2TemplateTests extends AST2TestBase { assertSameType(tRef.getTemplateParameterMap().getArgument(0).getTypeValue(), Sint); } + // template + // struct A { + // typedef void (T::*func)(); + // }; + // + // template + // struct B { + // template ::func U> + // class C {}; + // + // template ::func U> + // using Waldo = C; + // }; + // + // struct D { + // void m(); + // }; + // + // void test() { + // B::Waldo<&D::m>(); + // } + public void testTemplatedAliasWithPointerToMember_448785() throws Exception { + parseAndCheckBindings(); + } + // namespace NS { // template // struct S { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateIDAmbiguity.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateIDAmbiguity.java index a6352b9b34c..973c419f862 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateIDAmbiguity.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/dom/parser/cpp/CPPASTTemplateIDAmbiguity.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2011 Wind River Systems, Inc. and others. + * Copyright (c) 2011, 2014 Wind River Systems, Inc. and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,6 +7,7 @@ * * Contributors: * Markus Schorn - initial API and implementation + * Sergey Prigogin (Google) *******************************************************************************/ package org.eclipse.cdt.internal.core.dom.parser.cpp; @@ -22,6 +23,7 @@ import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.IFunction; import org.eclipse.cdt.core.dom.ast.IProblemBinding; import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTExpression; +import org.eclipse.cdt.core.dom.ast.cpp.ICPPAliasTemplateInstance; import org.eclipse.cdt.core.dom.ast.cpp.ICPPConstructor; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunction; import org.eclipse.cdt.core.dom.ast.cpp.ICPPFunctionTemplate; @@ -117,7 +119,7 @@ public class CPPASTTemplateIDAmbiguity extends ASTAmbiguousNode return -1; count++; } else if (b instanceof ICPPSpecialization || b instanceof ICPPTemplateDefinition - || b instanceof ICPPConstructor + || b instanceof ICPPAliasTemplateInstance || b instanceof ICPPConstructor || (b instanceof IFunction && b instanceof ICPPUnknownBinding)) { count++; } else {