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