diff --git a/src/ModelTree.cc b/src/ModelTree.cc
index bd96cf0e00fa4f25c64fd6c16e8503a6e492b9b0..1998fbfa3533e88431d8e0ef899d6357d7694d8e 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 0c0be897be1158285dd422101fed18127d9731b6..f43dedc3549a863752c87f881d065f0926f8ae4a 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)
     {