From e7f2e7a45d393907bf9827fb2eda2180ff7697ad Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Fri, 12 Mar 2021 06:35:11 +0200 Subject: [PATCH] Add mp_join --- include/boost/mp11/algorithm.hpp | 4 +++ test/Jamfile | 1 + test/mp_join.cpp | 51 ++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 test/mp_join.cpp diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 40a8c55..0ff96d9 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -1296,6 +1296,10 @@ template struct mp_split_impl } // namespace detail +// mp_join + +template using mp_join = mp_apply>>; + } // namespace mp11 } // namespace boost diff --git a/test/Jamfile b/test/Jamfile index 531e598..8f4daca 100644 --- a/test/Jamfile +++ b/test/Jamfile @@ -126,6 +126,7 @@ run mp_pairwise_fold.cpp ; run mp_pairwise_fold_q.cpp ; run mp_intersperse.cpp ; run mp_split.cpp ; +run mp_join.cpp ; # integral run integral.cpp ; diff --git a/test/mp_join.cpp b/test/mp_join.cpp new file mode 100644 index 0000000..1f4b986 --- /dev/null +++ b/test/mp_join.cpp @@ -0,0 +1,51 @@ +// Copyright 2021 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include +#include +#include + +struct X1 {}; +struct X2 {}; +struct X3 {}; +struct X4 {}; + +struct S {}; + +int main() +{ + using boost::mp11::mp_list; + using boost::mp11::mp_join; + + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, mp_list<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, mp_list>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_list<>>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_list<>, mp_list<>>, S>, mp_list>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>, S>, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, mp_list<>, mp_list, mp_list<>>, S>, mp_list>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, std::tuple<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, S>, std::tuple>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>, std::tuple<>>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>, std::tuple<>, std::tuple<>>, S>, std::tuple>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>, S>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple<>, std::tuple, std::tuple<>>, S>, std::tuple>)); + + return boost::report_errors(); +}