From 4b4daec3b46f78b3286cb5a95bb8991526d50a8c Mon Sep 17 00:00:00 2001 From: "Igor V. Kovalenko" Date: Sun, 5 Mar 2023 14:59:42 +0300 Subject: [PATCH] Consider variable templates while determining size of parameter pack --- .../core/dom/parser/cpp/semantics/CPPTemplates.java | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 ba0378e9f23..f7801bafed8 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 @@ -1278,6 +1278,16 @@ public class CPPTemplates { if (r < 0) return r; } + } else if (binding instanceof ICPPDeferredVariableInstance dvi) { + if (dvi.getTemplateDefinition() instanceof ICPPTemplateTemplateParameter) { + r = combinePackSize(r, determinePackSize((ICPPUnknownBinding) dvi.getTemplateDefinition(), tpMap)); + } + ICPPTemplateArgument[] args = dvi.getTemplateArguments(); + for (ICPPTemplateArgument arg : args) { + r = combinePackSize(r, determinePackSize(arg, tpMap)); + if (r < 0) + return r; + } } IBinding ownerBinding = binding.getOwner(); if (ownerBinding instanceof IType)