diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index 1138a740108dce1352ea5e97c4fc9144e6bfa3ad..f19944764c8c2e424e55d9112ad3a224097153ec 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -390,7 +390,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
               {
                 return d1->eval(eval_context); // NOLINT(clang-analyzer-core.NullDereference)
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 132119df417875e1e202c06dc79d5b64c056079b..4469f8e58dc880d074eaa4825449c1aeb1bc340c 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -2659,7 +2659,7 @@ ParsingDriver::add_model_equal(expr_t arg1, expr_t arg2, map<string, string> eq_
       constant.erase(constant.find_last_not_of(" \n\t") + 1);
       constant.erase(0, constant.find_first_not_of(" \n\t"));
 
-      int symb_id {[&] {
+      int symb_id {[&, &var_name = var_name] {
         try
           {
             return mod_file->symbol_table.getID(var_name);
@@ -2673,7 +2673,7 @@ ParsingDriver::add_model_equal(expr_t arg1, expr_t arg2, map<string, string> eq_
       if (mod_file->symbol_table.getType(symb_id) != SymbolType::endogenous)
         error("Left-hand side of expression in 'mcp' tag is not an endogenous variable");
 
-      expr_t matched_constant {[&] {
+      expr_t matched_constant {[&, &constant = constant] {
         char* str_end;
         double d = strtod(constant.c_str(), &str_end);
         if (str_end == constant.c_str())
diff --git a/src/Statement.cc b/src/Statement.cc
index e28d7f404ad9c9cbc89e950424096af34c163bf4..cd1f0230efd0a6dc2cc7e00a5cca3b48d8bb9993 100644
--- a/src/Statement.cc
+++ b/src/Statement.cc
@@ -191,7 +191,7 @@ OptionsList::writeOutputCommon(ostream& output, const string& option_group) cons
   // NOLINTBEGIN(clang-analyzer-core.CallAndMessage)
   for (const auto& [name, val] : options)
     std::visit(
-        [&]<class T>(const T& v) {
+        [&, &name = name, &val = val]<class T>(const T& v) {
           if constexpr (is_same_v<T, SymbolListVal>)
             v.writeOutput(option_group + "." + name, output);
           else
diff --git a/src/SubModel.cc b/src/SubModel.cc
index 411fb29b2a3108f3ca398ae9d21f8d6ac7ddae7c..be4b00f3e9d086ed67075b20586122daa575e891 100644
--- a/src/SubModel.cc
+++ b/src/SubModel.cc
@@ -1284,9 +1284,10 @@ 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); });
+            if (auto it = find_if(components.begin(), components.end(),
+                                  [&, &var = var](const auto& v) {
+                                    return get<0>(v) == dynamic_model.AddVariable(var);
+                                  });
                 it != components.end())
               get<4>(*it) = coeff;
             else