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 81fee25b8cd..57a89c6ff7b 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 @@ -7292,5 +7292,24 @@ public class AST2TemplateTests extends AST2TestBase { public void testNPE_401140() throws Exception { BindingAssertionHelper helper = new BindingAssertionHelper(getAboveComment(), true); helper.assertProblem("bind(s, 0, foo)", "bind"); + } + + // template + // struct ice_or; + // template + // struct ice_or { + // static const bool value = First; + // }; + // template + // struct S {}; + // template <> + // struct S { + // typedef int type; + // }; + // int main() { + // S::value>::type t; + // } + public void testVariadicNonTypeTemplateParameter_401142() 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 c1ad1d00893..4650cc7183f 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 @@ -2464,6 +2464,8 @@ public class CPPTemplates { } else { if (arg.isTypeValue()) return false; + if (par.isParameterPack() != arg.isPackExpansion()) + return false; int parpos= Value.isTemplateParameter(arg.getNonTypeValue()); if (parpos != par.getParameterID()) return false;