From e6f83a0d333d06a648dee9d2859bac49cec61b1b Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Fri, 24 Jul 2015 13:45:08 +0300 Subject: [PATCH] Add mp_unique. --- include/boost/mp11/algorithm.hpp | 14 +++++++++ test/Jamfile.v2 | 1 + test/mp_unique.cpp | 54 ++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 test/mp_unique.cpp diff --git a/include/boost/mp11/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 6cdd387..f7e8196 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -9,6 +9,7 @@ // http://www.boost.org/LICENSE_1_0.txt #include +#include #include #include #include @@ -779,6 +780,19 @@ template class L, class T1, class... T, class V, template class F> using mp_reverse_fold = typename detail::mp_reverse_fold_impl::type; // mp_unique +namespace detail +{ + +template struct mp_unique_impl; + +template class L, class... T> struct mp_unique_impl> +{ + using type = mp_set_push_back, T...>; +}; + +} // namespace detail + +template using mp_unique = typename detail::mp_unique_impl::type; } // namespace boost diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 0352f9b..677dc14 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -54,6 +54,7 @@ run mp_find_if.cpp : : : $(REQ) ; run mp_reverse.cpp : : : $(REQ) ; run mp_fold.cpp : : : $(REQ) ; run mp_reverse_fold.cpp : : : $(REQ) ; +run mp_unique.cpp : : : $(REQ) ; # integral run integral.cpp : : : $(REQ) ; diff --git a/test/mp_unique.cpp b/test/mp_unique.cpp new file mode 100644 index 0000000..cdc2f98 --- /dev/null +++ b/test/mp_unique.cpp @@ -0,0 +1,54 @@ + +// Copyright 2015 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 + +int main() +{ + using boost::mp_list; + using boost::mp_unique; + + { + 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>)); + 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>, 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::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>)); + } + + return boost::report_errors(); +}