From 7bd449d6c3f50fe5c1e99f3ed8052d13f01fa044 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Wed, 4 May 2022 16:25:58 +0200
Subject: [PATCH] C++20 modernization: use new std::erase_if function

---
 src/ModelTree.cc     | 8 ++------
 src/ParsingDriver.cc | 8 ++------
 2 files changed, 4 insertions(+), 12 deletions(-)

diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index bd96cf0e..1998fbfa 100644
--- a/src/ModelTree.cc
+++ b/src/ModelTree.cc
@@ -971,12 +971,8 @@ ModelTree::computeTemporaryTerms(bool is_matlab, bool no_tmp_terms)
      not optional) */
   if (no_tmp_terms)
     for (auto &it : temp_terms_map)
-      // The following loop can be simplified with std::erase_if() in C++20
-      for (auto it2 = it.second.begin(); it2 != it.second.end();)
-        if (!dynamic_cast<AbstractExternalFunctionNode *>(*it2))
-          it2 = it.second.erase(it2);
-        else
-          ++it2;
+      erase_if(it.second,
+               [](expr_t e) { return !dynamic_cast<AbstractExternalFunctionNode *>(e); });
 
   // Fill the structures
   temporary_terms_derivatives.clear();
diff --git a/src/ParsingDriver.cc b/src/ParsingDriver.cc
index 0c0be897..f43dedc3 100644
--- a/src/ParsingDriver.cc
+++ b/src/ParsingDriver.cc
@@ -369,12 +369,8 @@ ParsingDriver::declare_or_change_type(SymbolType new_type, const string &name)
 
       // remove error messages
       undeclared_model_vars.erase(name);
-      for (auto it = undeclared_model_variable_errors.begin();
-           it != undeclared_model_variable_errors.end();)
-        if (it->first == name)
-          it = undeclared_model_variable_errors.erase(it);
-        else
-          ++it;
+      erase_if(undeclared_model_variable_errors,
+               [&name](auto &v) { return v.first == name; });
     }
   catch (SymbolTable::UnknownSymbolNameException &e)
     {
-- 
GitLab