diff --git a/src/SubModel.cc b/src/SubModel.cc index 0438a7c05ca370d869a14e14de07d8f28c783f94..ccc72512e70a4cbd4dfa2e275951d2bb5ef8f19b 100644 --- a/src/SubModel.cc +++ b/src/SubModel.cc @@ -1240,11 +1240,13 @@ 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) - /* The “var=var” capture with initializer in the lambda expression - is used to workaround the C++17 restriction that forbids the - capture of structured bindings. This restriction is enforced by - clang, but not by GCC (see https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85889). - This restriction is lifted in C++20 (but clang 13 does not yet comply). */ + /* C++20 allows the capture of structured bindings (contrary to + C++17), and GCC 10 implements it (actually it even supports it + in C++17 compatibility mode, see + https://gcc.gnu.org/bugzilla/show_bug.cgi?id=85889). However, + clang 14 does not, though some work seems on the way + (https://reviews.llvm.org/D122768/new/). Hence we use the + “var=var” capture with initializer as a workaround. */ 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())