diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index b58ce12..a469f89 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -1265,21 +1265,30 @@ template class F> using mp_pairwise_fold = mp_pairwi namespace detail { +template using mp_slice_c = mp_drop_c< mp_take_c, I >; +template using mp_slice = mp_drop< mp_take, I >; + template struct mp_sliding_fold_impl; -template struct mp_sliding_fold_impl> +template struct mp_sliding_fold_impl { - using type = mp_transform_q::value - (sizeof...(Ints) - Ints - 1)>, Ints>...>; + static const std::size_t M = mp_size::value - N::value + 1; + + template using F = mp_slice_c; + + using J = mp_transform>; + + using type = mp_apply>; }; -template struct mp_sliding_fold_impl +template struct mp_sliding_fold_impl { using type = mp_clear; }; } // namespace detail -template using mp_sliding_fold_q = typename detail::mp_sliding_fold_impl::value >= N::value>, L, Q, make_index_sequence>::type; +template using mp_sliding_fold_q = typename detail::mp_sliding_fold_impl::value >= N::value)>, L, N, Q>::type; template class F> using mp_sliding_fold = mp_sliding_fold_q>; // mp_intersperse