diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 45506b1..539bf58 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -443,6 +443,12 @@ struct mp_take_c_impl, typen template using mp_take_c = typename detail::mp_take_c_impl::type; template using mp_take = typename detail::mp_take_c_impl::type; +// mp_back +template using mp_back = mp_at_c::value - 1>; + +// mp_pop_back +template using mp_pop_back = mp_take_c::value - 1>; + // mp_replace namespace detail { diff --git a/test/Jamfile b/test/Jamfile index 74f6b67..ba8e33d 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -104,6 +104,8 @@ run mp_max_element.cpp ; run mp_max_element_q.cpp ; run mp_nth_element.cpp ; run mp_nth_element_q.cpp ; +run mp_back.cpp ; +run mp_pop_back.cpp ; # integral run integral.cpp ; diff --git a/test/mp_back.cpp b/test/mp_back.cpp new file mode 100644 index 0000000..457364e --- /dev/null +++ b/test/mp_back.cpp @@ -0,0 +1,52 @@ + +// Copyright 2015, 2019 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + + +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + using boost::mp11::mp_list; + using boost::mp11::mp_back; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, void>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, int[]>)); + + using L3 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); + + using L4 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, double>)); + + using L5 = std::add_const; + BOOST_TEST_TRAIT_TRUE((std::is_same, void()>)); + + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + + int const N = 137; + + using L6 = mp_iota_c; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t>)); + + using boost::mp11::mp_valid; + + using L7 = mp_list<>; + BOOST_TEST_TRAIT_FALSE((mp_valid)); + + return boost::report_errors(); +} diff --git a/test/mp_pop_back.cpp b/test/mp_pop_back.cpp new file mode 100644 index 0000000..554da9e --- /dev/null +++ b/test/mp_pop_back.cpp @@ -0,0 +1,49 @@ + +// Copyright 2015, 2019 Peter Dimov +// +// Distributed under the Boost Software License, Version 1.0. +// +// See accompanying file LICENSE_1_0.txt or copy at +// http://www.boost.org/LICENSE_1_0.txt + + +#include +#include +#include +#include +#include +#include +#include + +int main() +{ + using boost::mp11::mp_list; + using boost::mp11::mp_pop_back; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>)); + + using L3 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>>)); + + using L4 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); + + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + + int const N = 137; + + using L6 = mp_iota_c; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_iota_c>)); + + using boost::mp11::mp_valid; + + using L7 = mp_list<>; + BOOST_TEST_TRAIT_FALSE((mp_valid)); + + return boost::report_errors(); +}