From beeaa78d68374c9ca5883e2a17a45bcc283d6c62 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Fri, 7 Jul 2023 14:58:23 +0200
Subject: [PATCH] Do not use C++20 lambda capture of structured bindings

Not supported by Clang < 16.
---
 src/ModelTree.cc | 2 +-
 src/Statement.cc | 2 +-
 src/SubModel.cc  | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index b1c23631..9636a68e 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -373,7 +373,7 @@ ModelTree::evaluateAndReduceJacobian(const eval_context_t &eval_context) const
           int eq = indices[0];
           int var { getTypeSpecificIDByDerivID(deriv_id) };
           int lag = getLagByDerivID(deriv_id);
-          double val { [&]
+          double val { [&, d1 = d1]
           {
             try
               {
diff --git a/src/Statement.cc b/src/Statement.cc
index b4c357f4..290db113 100644
--- a/src/Statement.cc
+++ b/src/Statement.cc
@@ -185,7 +185,7 @@ void
 OptionsList::writeOutputCommon(ostream &output, const string &option_group) const
 {
   for (const auto &[name, val] : options)
-    std::visit([&]<class T>(const T &v)
+    std::visit([&, &name = name, &val = val]<class T>(const T &v)
     {
       if constexpr(is_same_v<T, SymbolListVal>)
         v.writeOutput(option_group + "." + name, output);
diff --git a/src/SubModel.cc b/src/SubModel.cc
index 38d3733b..64534beb 100644
--- a/src/SubModel.cc
+++ b/src/SubModel.cc
@@ -1227,7 +1227,7 @@ PacModelTable::transformPass(const lag_equivalence_table_t &unary_ops_nodes,
           // Associate the coefficients of the linear combination with the right components
           for (auto [var, coeff] : terms)
             if (auto it = find_if(components.begin(), components.end(),
-                                  [&](const auto &v) { return get<0>(v) == dynamic_model.AddVariable(var); });
+                                  [&, &var = var](const auto &v) { return get<0>(v) == dynamic_model.AddVariable(var); });
                 it != components.end())
               get<4>(*it) = coeff;
             else
-- 
GitLab