From 24ba7ff6880c98cab8a77144dc1c8f08c8d8db9c Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Tue, 19 Feb 2013 03:27:53 -0500 Subject: Bug 401142 - Error involving variadic non-type template parameters Change-Id: I7735649c59354431a91980142055e4b86a82e6f6 Reviewed-on: https://git.eclipse.org/r/10467 Reviewed-by: Sergey Prigogin IP-Clean: Sergey Prigogin Tested-by: Sergey Prigogin --- .../cdt/core/parser/tests/ast2/AST2TemplateTests.java | 19 +++++++++++++++++++ .../core/dom/parser/cpp/semantics/CPPTemplates.java | 2 ++ 2 files changed, 21 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 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; -- cgit v1.2.3