From 4fafaeaf10cf01679377dcea41780204ee3ca9af Mon Sep 17 00:00:00 2001 From: Nathan Ridge Date: Mon, 25 Jan 2016 00:00:42 -0500 Subject: [PATCH] Bug 486425 - Decltype in pack expansion Change-Id: I67dfbc295fab4674b95a9d61cf77d2329e1a0525 --- .../parser/tests/ast2/AST2TemplateTests.java | 44 +++++++++++++++++++ .../parser/cpp/semantics/CPPTemplates.java | 4 ++ 2 files changed, 48 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 62aada47826..08244119ffa 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 @@ -8278,6 +8278,50 @@ public class AST2TemplateTests extends AST2TestBase { public void testMemberAccessViaReferenceInPackExpansion_466845() throws Exception { parseAndCheckBindings(); } + + // template + // struct C {}; + // + // template + // struct B { + // typedef void type; + // }; + // + // template + // typename B())...>::type + // waldo(T f, C); + // + // struct A {}; + // + // void test() { + // A a; + // waldo(a, C<>()); // problem on waldo + // } + public void testDecltypeInPackExpansion_486425a() throws Exception { + parseAndCheckBindings(); + } + + // template + // struct C {}; + // + // template + // struct B { + // typedef void type; + // }; + // + // template + // typename B())...>::type + // waldo(T f, C); + // + // struct A {}; + // + // void test() { + // A a; + // waldo(a, C<>()); // problem on waldo + // } + public void testDecltypeInPackExpansion_486425b() 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 033bea616e2..a4f1f5c1bb5 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 @@ -1120,6 +1120,10 @@ public class CPPTemplates { if (type instanceof ICPPTemplateParameter) { return determinePackSize((ICPPTemplateParameter) type, tpMap); } + + if (type instanceof TypeOfDependentExpression){ + return ((TypeOfDependentExpression) type).getEvaluation().determinePackSize(tpMap); + } if (type instanceof ICPPUnknownBinding) { return determinePackSize((ICPPUnknownBinding) type, tpMap);