From 2cf1353146731c0d2776acefee9df7bd1bd8e1b4 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 10 Feb 2010 12:45:41 +0000 Subject: [PATCH] Bug 294730: Instantiating templates with non-type template parameter packs. --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 11 +++++++++++ .../core/dom/parser/cpp/semantics/CPPTemplates.java | 3 +++ 2 files changed, 14 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 494d514fca7..e38758bd93f 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 @@ -4441,6 +4441,17 @@ public class AST2TemplateTests extends AST2BaseTest { assertFalse(tp.isParameterPack()); } + // template struct CTx {}; + // void test() { + // CTx<> a; + // CTx<1> b; + // CTx<1,2> c; + // } + public void testNonTypeTemplateParameterPack_280909() throws Exception { + final String code= getAboveComment(); + parseAndCheckBindings(code, ParserLanguage.CPP); + } + // template // struct count { static const int value = sizeof...(Types); // }; 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 1b6cbc8cf30..96e4c3e7433 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 @@ -1889,6 +1889,9 @@ public class CPPTemplates { IType argType= arg.getTypeOfNonTypeValue(); try { IType pType = ((ICPPTemplateNonTypeParameter) param).getType(); + if (pType instanceof ICPPParameterPackType) { + pType= ((ICPPParameterPackType) pType).getType(); + } if (map != null && pType != null) { pType= instantiateType(pType, map, -1, null); }