From cb7f0f346272814987d4b76b6cf65bb474c87bf0 Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Thu, 16 Jul 2015 04:08:08 -0400 Subject: [PATCH] Bug 472615 - Instantiate alias template found as binding for template-id in expression Change-Id: I51aced984cfe87d4b2f2d4ebe359d65ce2845b6c Signed-off-by: Nathan Ridge --- .../core/parser/tests/ast2/AST2TemplateTests.java | 14 ++++++++++++++ .../dom/parser/cpp/semantics/CPPTemplates.java | 2 +- 2 files changed, 15 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 42f44691804..440004c08be 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 @@ -7226,6 +7226,20 @@ public class AST2TemplateTests extends AST2TestBase { public void testAliasTemplate_416280_2() throws Exception { parseAndCheckBindings(); } + + // template + // struct Struct {}; + // + // template using Alias = Struct; + // + // void waldo(Struct); + // + // int main() { + // waldo(Alias()); + // } + public void testTemplateIdNamingAliasTemplateInExpression_472615() throws Exception { + parseAndCheckBindings(); + } // template // struct A { 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 7db462451aa..00098cb8ddf 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 @@ -667,7 +667,7 @@ public class CPPTemplates { // Functions are instantiated as part of the resolution process. IBinding result= CPPVisitor.createBinding(id); IASTName templateName = id.getTemplateName(); - if (result instanceof ICPPClassTemplate) { + if (result instanceof ICPPClassTemplate || result instanceof ICPPAliasTemplate) { templateName.setBinding(result); id.setBinding(null); } else {