diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index efffd8b..8769e3e 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -701,9 +701,29 @@ template class L, class T1, class T2, class T3, class T4, cla using type = L; }; -template class L, class T1, class T2, class T3, class T4, class T5, class T6, class... T> struct mp_reverse_impl> +template class L, class T1, class T2, class T3, class T4, class T5, class T6> struct mp_reverse_impl> { - using type = mp_push_back>::type, T6, T5, T4, T3, T2, T1>; + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class... T> struct mp_reverse_impl> +{ + using type = mp_push_back>::type, T10, T9, T8, T7, T6, T5, T4, T3, T2, T1>; }; } // namespace detail diff --git a/test/mp_reverse.cpp b/test/mp_reverse.cpp index 79d7cb6..e1aebf5 100644 --- a/test/mp_reverse.cpp +++ b/test/mp_reverse.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -22,6 +23,9 @@ struct X6 {}; struct X7 {}; struct X8 {}; struct X9 {}; +struct X10 {}; +struct X11 {}; +struct X12 {}; int main() { @@ -39,6 +43,9 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_list>)); } { @@ -52,11 +59,35 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple>)); } { BOOST_TEST_TRAIT_TRUE((std::is_same>, std::pair>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + using boost::mp11::mp_transform; + using boost::mp11::mp_plus; + using boost::mp11::mp_fill; + + { + int const N = 37; + + using L = mp_iota_c; + + using R1 = mp_reverse; + using R2 = mp_reverse; + + BOOST_TEST_TRAIT_TRUE((std::is_same)); + + using R3 = mp_transform; + + BOOST_TEST_TRAIT_TRUE((std::is_same>>)); + } + return boost::report_errors(); }