From 471836beff71c3c1c5fc3627e5cf7fadb3424b56 Mon Sep 17 00:00:00 2001 From: Alex Date: Thu, 4 Jun 2026 09:08:18 +0200 Subject: [PATCH 1/3] fix: re-enable const lvalue reference dependency usage attempts to solve the issue described in https://github.com/boost-ext/sml/issues/711 --- include/boost/sml.hpp | 48 +++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 20 deletions(-) diff --git a/include/boost/sml.hpp b/include/boost/sml.hpp index bb8900de..29a46592 100644 --- a/include/boost/sml.hpp +++ b/include/boost/sml.hpp @@ -611,6 +611,23 @@ struct is_unique, T, Ts...> : conditional_t, inherit...>>::value, false_type, is_unique, Ts...>> {}; template using is_unique_t = is_unique, Ts...>; +template +struct dep_is_kept : true_type {}; +template +struct dep_is_kept : integral_constant, TSet>::value> {}; +template +struct collapse_const_refs; +template +struct collapse_const_refs> { + using set = inherit...>; + using type = join_t::value, type_list, type_list<>>...>; +}; +// const U&, U& -> U& +// const U& -> const U& +template +using collapse_const_refs_t = typename collapse_const_refs::type; +static_assert(aux::is_same>, type_list>::value, "`const U &` should collapse to `const U &` if only const refs are present"); +static_assert(aux::is_same>, type_list>::value, "`const U &` should collapse to `U &` if at least one non-const ref is present"); template