diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 06c8e48..aeeec85 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -291,9 +291,9 @@ template using mp_product_q = typename detail::mp_product_i namespace detail { -template struct mp_drop_impl; +template struct mp_drop_impl; -template class L, class... T, template class L2, class... U> struct mp_drop_impl, L2> +template class L, class... T, template class L2, class... U> struct mp_drop_impl, L2, mp_true> { template static mp_identity> f( U*..., mp_identity*... ); @@ -304,9 +304,9 @@ template class L, class... T, template class L2, cl } // namespace detail -template using mp_drop_c = typename detail::mp_drop_impl, N>>::type; +template using mp_drop_c = typename detail::mp_drop_impl, N>, mp_bool::value>>::type; -template using mp_drop = typename detail::mp_drop_impl, N>>::type; +template using mp_drop = mp_drop_c; // mp_from_sequence namespace detail diff --git a/test/mp_drop.cpp b/test/mp_drop.cpp index 186aa94..40167fb 100644 --- a/test/mp_drop.cpp +++ b/test/mp_drop.cpp @@ -27,6 +27,7 @@ int main() using boost::mp11::mp_drop; using boost::mp11::mp_drop_c; using boost::mp11::mp_size_t; + using boost::mp11::mp_valid; { using L1 = mp_list<>; @@ -81,5 +82,14 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same>, L1>)); } + { + BOOST_TEST_TRAIT_TRUE((mp_valid, mp_size_t<0>>)); + BOOST_TEST_TRAIT_TRUE((mp_valid, mp_size_t<1>>)); + BOOST_TEST_TRAIT_TRUE((mp_valid, mp_size_t<2>>)); + BOOST_TEST_TRAIT_TRUE((mp_valid, mp_size_t<3>>)); + BOOST_TEST_TRAIT_FALSE((mp_valid, mp_size_t<4>>)); + BOOST_TEST_TRAIT_FALSE((mp_valid, mp_size_t<5>>)); + } + return boost::report_errors(); }