From 5f9964098c21560cda659f4d81c01b57a648ad4f Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Sat, 20 Jan 2018 21:05:59 -0500 Subject: [PATCH] Bug 530086 - Consider pack expansions when matching non-type arguments to parameters during instantiation Alias templates can be instantiated with dependent arguments. Change-Id: I123ee574ed2eecb09b551360a0bbc966893d9e34 --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 9 +++++++++ .../core/dom/parser/cpp/semantics/CPPTemplates.java | 3 +++ 2 files changed, 12 insertions(+) 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 98223b1759e..fa80afde3a1 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 @@ -10551,4 +10551,13 @@ public class AST2TemplateTests extends AST2CPPTestBase { public void testTemplateIdAmbiguity_529696() throws Exception { parseAndCheckBindings(); } + + // template + // using index_sequence = int; + // + // template + // void foo(index_sequence); + public void testTemplateAliasWithVariadicNonTypeArgs_530086() 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 58c6af7f199..b4915bb19c2 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 @@ -2834,6 +2834,9 @@ public class CPPTemplates { final IType paramType, ICPPTemplateArgument arg) throws DOMException { // 14.1s8 function to pointer and array to pointer conversions. IType a= arg.getTypeOfNonTypeValue(); + if (a instanceof ICPPParameterPackType) { + a = ((ICPPParameterPackType) a).getType(); + } IType p; if (paramType instanceof IFunctionType) { p = new CPPPointerType(paramType);