From 686e398e56a2a7c26b524bbf729cda9fedb7f887 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Sun, 21 Jun 2015 19:53:23 +0300 Subject: [PATCH] Initial commit. --- include/boost/mp11.hpp | 15 ++ include/boost/mp11/detail/mp_plus.hpp | 68 +++++ include/boost/mp11/integral.hpp | 34 +++ include/boost/mp11/list.hpp | 346 ++++++++++++++++++++++++++ include/boost/mp11/utility.hpp | 59 +++++ meta/libraries.json | 14 ++ test/Jamfile.v2 | 41 +++ test/integral.cpp | 55 ++++ test/mp_append.cpp | 76 ++++++ test/mp_assign.cpp | 64 +++++ test/mp_clear.cpp | 32 +++ test/mp_empty.cpp | 49 ++++ test/mp_eval_if.cpp | 39 +++ test/mp_fill.cpp | 39 +++ test/mp_front.cpp | 43 ++++ test/mp_identity.cpp | 26 ++ test/mp_if.cpp | 38 +++ test/mp_inherit.cpp | 27 ++ test/mp_pop_front.cpp | 39 +++ test/mp_push_back.cpp | 52 ++++ test/mp_push_front.cpp | 52 ++++ test/mp_rename.cpp | 88 +++++++ test/mp_repeat.cpp | 131 ++++++++++ test/mp_second.cpp | 34 +++ test/mp_size.cpp | 48 ++++ test/mp_third.cpp | 28 +++ 26 files changed, 1537 insertions(+) create mode 100644 include/boost/mp11.hpp create mode 100644 include/boost/mp11/detail/mp_plus.hpp create mode 100644 include/boost/mp11/integral.hpp create mode 100644 include/boost/mp11/list.hpp create mode 100644 include/boost/mp11/utility.hpp create mode 100644 meta/libraries.json create mode 100644 test/Jamfile.v2 create mode 100644 test/integral.cpp create mode 100644 test/mp_append.cpp create mode 100644 test/mp_assign.cpp create mode 100644 test/mp_clear.cpp create mode 100644 test/mp_empty.cpp create mode 100644 test/mp_eval_if.cpp create mode 100644 test/mp_fill.cpp create mode 100644 test/mp_front.cpp create mode 100644 test/mp_identity.cpp create mode 100644 test/mp_if.cpp create mode 100644 test/mp_inherit.cpp create mode 100644 test/mp_pop_front.cpp create mode 100644 test/mp_push_back.cpp create mode 100644 test/mp_push_front.cpp create mode 100644 test/mp_rename.cpp create mode 100644 test/mp_repeat.cpp create mode 100644 test/mp_second.cpp create mode 100644 test/mp_size.cpp create mode 100644 test/mp_third.cpp diff --git a/include/boost/mp11.hpp b/include/boost/mp11.hpp new file mode 100644 index 0000000..32cbb01 --- /dev/null +++ b/include/boost/mp11.hpp @@ -0,0 +1,15 @@ +#ifndef BOOST_MP11_HPP_INCLUDED +#define BOOST_MP11_HPP_INCLUDED + +// 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 + +#endif // #ifndef BOOST_MP11_HPP_INCLUDED diff --git a/include/boost/mp11/detail/mp_plus.hpp b/include/boost/mp11/detail/mp_plus.hpp new file mode 100644 index 0000000..1b77783 --- /dev/null +++ b/include/boost/mp11/detail/mp_plus.hpp @@ -0,0 +1,68 @@ +#ifndef BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED +#define BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED + +// 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 + +namespace boost +{ + +// mp_plus +namespace detail +{ + +template struct mp_plus_impl; + +#if defined( BOOST_NO_CXX11_CONSTEXPR ) + +template<> struct mp_plus_impl<> +{ + using type = std::integral_constant; +}; + +template struct mp_plus_impl +{ + static const/*expr*/ auto _v = T1::value + mp_plus::value; + using type = std::integral_constant< typename std::remove_const::type, _v >; +}; + +template struct mp_plus_impl +{ + static const/*expr*/ auto _v = T1::value + T2::value + T3::value + T4::value + T5::value + T6::value + T7::value + T8::value + T9::value + T10::value + mp_plus::value; + using type = std::integral_constant< typename std::remove_const::type, _v >; +}; + +#else + +constexpr int cx_plus() +{ + return 0; +} + +template constexpr auto cx_plus( T1 t1, T... t ) -> decltype( t1 + cx_plus( t... ) ) +{ + return t1 + cx_plus( t... ); +} + +template struct mp_plus_impl +{ + static constexpr auto _v = cx_plus( T::value... ); + using type = std::integral_constant< typename std::remove_const::type, _v >; +}; + +#endif + +} // namespace detail + +template using mp_plus = typename detail::mp_plus_impl::type; + +} // namespace boost + +#endif // #ifndef BOOST_MP11_DETAIL_MP_PLUS_HPP_INCLUDED diff --git a/include/boost/mp11/integral.hpp b/include/boost/mp11/integral.hpp new file mode 100644 index 0000000..7380f5a --- /dev/null +++ b/include/boost/mp11/integral.hpp @@ -0,0 +1,34 @@ +#ifndef BOOST_MP11_INTEGRAL_HPP_INCLUDED +#define BOOST_MP11_INTEGRAL_HPP_INCLUDED + +// 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 + +namespace boost +{ + +// mp_bool +template using mp_bool = std::integral_constant; + +using mp_true = mp_bool; +using mp_false = mp_bool; + +// mp_to_bool +template using mp_to_bool = mp_bool( T::value )>; + +// mp_int +template using mp_int = std::integral_constant; + +// mp_size_t +template using mp_size_t = std::integral_constant; + +} // namespace boost + +#endif // #ifndef BOOST_MP11_INTEGRAL_HPP_INCLUDED diff --git a/include/boost/mp11/list.hpp b/include/boost/mp11/list.hpp new file mode 100644 index 0000000..d13d2b2 --- /dev/null +++ b/include/boost/mp11/list.hpp @@ -0,0 +1,346 @@ +#ifndef BOOST_MP11_LIST_HPP_INCLUDED +#define BOOST_MP11_LIST_HPP_INCLUDED + +// 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 + +namespace boost +{ + +// mp_list +template struct mp_list +{ +}; + +// mp_size +namespace detail +{ + +template struct mp_size_impl; + +template class L, class... T> struct mp_size_impl> +{ + using type = mp_size_t; +}; + +} // namespace detail + +template using mp_size = typename detail::mp_size_impl::type; + +// mp_empty +template using mp_empty = mp_bool< mp_size::value == 0 >; + +// mp_front +namespace detail +{ + +template struct mp_front_impl; + +template class L, class T1, class... T> struct mp_front_impl> +{ + using type = T1; +}; + +} // namespace detail + +template using mp_front = typename detail::mp_front_impl::type; + +// mp_pop_front +namespace detail +{ + +template struct mp_pop_front_impl; + +template class L, class T1, class... T> struct mp_pop_front_impl> +{ + using type = L; +}; + +} // namespace detail + +template using mp_pop_front = typename detail::mp_pop_front_impl::type; + +// mp_first +template using mp_first = mp_front; + +// mp_rest +template using mp_rest = mp_pop_front; + +// mp_second +namespace detail +{ + +template struct mp_second_impl; + +template class L, class T1, class T2, class... T> struct mp_second_impl> +{ + using type = T2; +}; + +} // namespace detail + +template using mp_second = typename detail::mp_second_impl::type; + +// mp_third +namespace detail +{ + +template struct mp_third_impl; + +template class L, class T1, class T2, class T3, class... T> struct mp_third_impl> +{ + using type = T3; +}; + +} // namespace detail + +template using mp_third = typename detail::mp_third_impl::type; + +// mp_push_front +namespace detail +{ + +template struct mp_push_front_impl; + +template class L, class... U, class... T> struct mp_push_front_impl, T...> +{ + using type = L; +}; + +} // namespace detail + +template using mp_push_front = typename detail::mp_push_front_impl::type; + +// mp_push_back +namespace detail +{ + +template struct mp_push_back_impl; + +template class L, class... U, class... T> struct mp_push_back_impl, T...> +{ + using type = L; +}; + +} // namespace detail + +template using mp_push_back = typename detail::mp_push_back_impl::type; + +// mp_rename +namespace detail +{ + +template class B> struct mp_rename_impl; + +template class A, class... T, template class B> struct mp_rename_impl, B> +{ + using type = B; +}; + +} // namespace detail + +template class B> using mp_rename = typename detail::mp_rename_impl::type; + +// mp_append +namespace detail +{ + +template struct mp_append_impl; + +template<> struct mp_append_impl<> +{ + using type = mp_list<>; +}; + +template class L, class... T> struct mp_append_impl> +{ + using type = L; +}; + +template class L1, class... T1, template class L2, class... T2, class... Lr> struct mp_append_impl, L2, Lr...> +{ + using type = typename mp_append_impl, Lr...>::type; +}; + +} // namespace detail + +template using mp_append = typename detail::mp_append_impl::type; + +// mp_assign +namespace detail +{ + +template struct mp_assign_impl; + +template class L1, class... T, template class L2, class... U> struct mp_assign_impl, L2> +{ + using type = L1; +}; + +} // namespace detail + +template using mp_assign = typename detail::mp_assign_impl::type; + +// mp_clear +template using mp_clear = mp_assign>; + +// mp_transform +namespace detail +{ + +template class F, class... L> struct mp_transform_impl; + +template class F, class... L> using mp_transform = typename mp_transform_impl::type; + +template class F, template class L, class... T> struct mp_transform_impl> +{ + using type = L...>; +}; + +template class F, template class L1, class... T1, template class L2, class... T2> struct mp_transform_impl, L2> +{ + static_assert( sizeof...(T1) == sizeof...(T2), "The arguments of mp_transform should be of the same size" ); + using type = L1...>; +}; + +template class F, template class L1, class... T1, template class L2, class... T2, template class L3, class... T3> struct mp_transform_impl, L2, L3> +{ + static_assert( sizeof...(T1) == sizeof...(T2) && sizeof...(T1) == sizeof...(T3), "The arguments of mp_transform should be of the same size" ); + using type = L1...>; +}; + +} // namespace detail + +template class F, class... L> using mp_transform = typename detail::mp_transform_impl::type; + +// mp_fill +namespace detail +{ + +template struct mp_fill_impl; + +template class L, class... T, class V> struct mp_fill_impl, V> +{ +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) + + template struct _f { using type = V; }; + using type = L::type...>; + +#else + + template using _f = V; + using type = L<_f...>; + +#endif +}; + +} // namespace detail + +template using mp_fill = typename detail::mp_fill_impl::type; + +// mp_count +namespace detail +{ + +template struct mp_count_impl; + +template class L, class... T, class V> struct mp_count_impl, V> +{ + using type = mp_plus...>; +}; + +} // namespace detail + +template using mp_count = typename detail::mp_count_impl::type; + +// mp_count_if +namespace detail +{ + +template class P> struct mp_count_if_impl; + +template class L, class... T, template class P> struct mp_count_if_impl, P> +{ +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) + + template struct _f { using type = mp_to_bool>; }; + using type = mp_plus::type...>; + +#else + + using type = mp_plus>...>; + +#endif +}; + +} // namespace detail + +template class P> using mp_count_if = typename detail::mp_count_if_impl::type; + +// mp_contains +template using mp_contains = mp_to_bool>; + +// mp_repeat(_c) +namespace detail +{ + +template struct mp_repeat_c_impl +{ + using _l1 = typename mp_repeat_c_impl::type; + using _l2 = typename mp_repeat_c_impl::type; + + using type = mp_append<_l1, _l1, _l2>; +}; + +template struct mp_repeat_c_impl +{ + using type = mp_clear; +}; + +template struct mp_repeat_c_impl +{ + using type = L; +}; + +template struct mp_repeat_impl +{ + static_assert( N::value >= 0, "mp_repeat: N must not be negative" ); + + using type = typename mp_repeat_c_impl::type; +}; + +} // namespace detail + +template using mp_repeat_c = typename detail::mp_repeat_c_impl::type; +template using mp_repeat = typename detail::mp_repeat_impl::type; + +// mp_drop +// mp_take +// mp_find +// mp_find_if +// mp_find_index +// mp_find_index_if +// mp_reverse +// mp_copy_if +// mp_remove_if +// mp_product? +// mp_fold +// mp_reverse_fold +// mp_replace? +// mp_replace_if? +// mp_partition +// mp_sort + +} // namespace boost + +#endif // #ifndef BOOST_MP11_LIST_HPP_INCLUDED diff --git a/include/boost/mp11/utility.hpp b/include/boost/mp11/utility.hpp new file mode 100644 index 0000000..213857d --- /dev/null +++ b/include/boost/mp11/utility.hpp @@ -0,0 +1,59 @@ +#ifndef BOOST_MP11_UTILITY_HPP_INCLUDED +#define BOOST_MP11_UTILITY_HPP_INCLUDED + +// 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 + +namespace boost +{ + +// mp_identity +template struct mp_identity +{ + using type = T; +}; + +// mp_inherit +template struct mp_inherit: T... {}; + +// mp_if +template struct mp_if_c_impl; + +template struct mp_if_c_impl +{ + using type = T; +}; + +template struct mp_if_c_impl +{ + using type = E; +}; + +template using mp_if_c = typename mp_if_c_impl::type; + +template using mp_if = typename mp_if_c_impl( C::value ), T, E>::type; + +// mp_eval_if +template class F, class... U> struct mp_eval_if_c_impl; + +template class F, class... U> struct mp_eval_if_c_impl +{ + using type = T; +}; + +template class F, class... U> struct mp_eval_if_c_impl +{ + using type = F; +}; + +template class F, class... U> using mp_eval_if_c = typename mp_eval_if_c_impl::type; + +template class F, class... U> using mp_eval_if = typename mp_eval_if_c_impl( C::value ), T, F, U...>::type; + +} // namespace boost + +#endif // #ifndef BOOST_MP11_UTILITY_HPP_INCLUDED diff --git a/meta/libraries.json b/meta/libraries.json new file mode 100644 index 0000000..9f401ff --- /dev/null +++ b/meta/libraries.json @@ -0,0 +1,14 @@ +{ + "key": "mp11", + "name": "Mp11", + "authors": [ + "Peter Dimov" + ], + "maintainers": [ + "Peter Dimov " + ], + "description": "Simple C++11 metaprogramming library.", + "category": [ + "Metaprogramming" + ] +} diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 new file mode 100644 index 0000000..249e876 --- /dev/null +++ b/test/Jamfile.v2 @@ -0,0 +1,41 @@ +# Boost.Mp11 Library Test Jamfile +# +# 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 + +import testing ; +import ../../config/checks/config : requires ; + +REQ = ; #[ requires cxx11_variadic_templates cxx11_template_aliases cxx11_hdr_type_traits cxx11_hdr_tuple ] ; + +# list +run mp_size.cpp : : : $(REQ) ; +run mp_empty.cpp : : : $(REQ) ; +run mp_front.cpp : : : $(REQ) ; +run mp_pop_front.cpp : : : $(REQ) ; +run mp_second.cpp : : : $(REQ) ; +run mp_third.cpp : : : $(REQ) ; +run mp_push_front.cpp : : : $(REQ) ; +run mp_push_back.cpp : : : $(REQ) ; +run mp_rename.cpp : : : $(REQ) ; +run mp_append.cpp : : : $(REQ) ; +run mp_assign.cpp : : : $(REQ) ; +run mp_clear.cpp : : : $(REQ) ; +#run mp_transform.cpp : : : $(REQ) ; +run mp_fill.cpp : : : $(REQ) ; +#run mp_count.cpp : : : $(REQ) ; +#run mp_count_if.cpp : : : $(REQ) ; +#run mp_contains.cpp : : : $(REQ) ; +run mp_repeat.cpp : : : $(REQ) ; + +# integral +run integral.cpp : : : $(REQ) ; + +# utility +run mp_identity.cpp : : : $(REQ) ; +run mp_inherit.cpp : : : $(REQ) ; +run mp_if.cpp : : : $(REQ) ; +run mp_eval_if.cpp : : : $(REQ) ; diff --git a/test/integral.cpp b/test/integral.cpp new file mode 100644 index 0000000..92e9bc4 --- /dev/null +++ b/test/integral.cpp @@ -0,0 +1,55 @@ + +// 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 + +int main() +{ + using boost::mp_bool; + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + + using boost::mp_true; + using boost::mp_false; + + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + + using boost::mp_int; + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + + using boost::mp_size_t; + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::integral_constant>)); + + using boost::mp_to_bool; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_false>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, mp_true>)); + + return boost::report_errors(); +} diff --git a/test/mp_append.cpp b/test/mp_append.cpp new file mode 100644 index 0000000..cfe8e3f --- /dev/null +++ b/test/mp_append.cpp @@ -0,0 +1,76 @@ + +// 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 + +struct X1 {}; +struct X2 {}; +struct X3 {}; +struct X4 {}; +struct X5 {}; +struct X6 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_append; + + using L1 = mp_list; + using L2 = mp_list; + using L3 = mp_list; + using L4 = 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>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple, std::tuple, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple, std::tuple, std::tuple, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple, std::tuple, std::tuple, std::tuple, std::tuple, std::tuple>, std::tuple>)); + + // + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>, std::tuple<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, std::tuple, mp_list>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, std::tuple, mp_list, std::tuple>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, std::tuple, mp_list, std::tuple, mp_list>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list, std::tuple, mp_list, std::tuple, mp_list, std::tuple>, std::tuple>)); + + // + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair, std::pair>, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair, std::pair, std::pair>, std::tuple>)); + + // + + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::pair>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>, std::pair>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_list<>>, std::pair>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_list<>, mp_list<>>, std::pair>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_list<>, mp_list<>, mp_list<>>, std::pair>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_assign.cpp b/test/mp_assign.cpp new file mode 100644 index 0000000..a586cf5 --- /dev/null +++ b/test/mp_assign.cpp @@ -0,0 +1,64 @@ + +// 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 + +struct X1 {}; +struct X2 {}; +struct X3 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_assign; + + using L1 = 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>)); + + // + + using L2 = 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>)); + + // + + using L3 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::pair>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::pair>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_clear.cpp b/test/mp_clear.cpp new file mode 100644 index 0000000..e3fb626 --- /dev/null +++ b/test/mp_clear.cpp @@ -0,0 +1,32 @@ + +// 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_clear; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>)); + + // + + using L2 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_empty.cpp b/test/mp_empty.cpp new file mode 100644 index 0000000..7e137a8 --- /dev/null +++ b/test/mp_empty.cpp @@ -0,0 +1,49 @@ + +// 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 +#include + +int main() +{ + using boost::mp_list; + using boost::mp_empty; + using boost::mp_true; + using boost::mp_false; + + using L1 = mp_list<>; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L3 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L4 = std::tuple<>; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_true>)); + + using L5 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L6 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L7 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + using L8 = std::add_const; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_false>)); + + return boost::report_errors(); +} diff --git a/test/mp_eval_if.cpp b/test/mp_eval_if.cpp new file mode 100644 index 0000000..2f291e9 --- /dev/null +++ b/test/mp_eval_if.cpp @@ -0,0 +1,39 @@ + +// 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 + +int main() +{ + using boost::mp_eval_if_c; + using boost::mp_identity; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_identity>)); + + using boost::mp_eval_if; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_identity>)); + + using boost::mp_int; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], mp_identity, void, void, void>, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], mp_identity, void()>, mp_identity>)); + + using boost::mp_size_t; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], mp_identity, void, void, void>, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], mp_identity, void()>, mp_identity>)); + + return boost::report_errors(); +} diff --git a/test/mp_fill.cpp b/test/mp_fill.cpp new file mode 100644 index 0000000..b2fdf81 --- /dev/null +++ b/test/mp_fill.cpp @@ -0,0 +1,39 @@ + +// 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 + +struct X1 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_fill; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>)); + + // + + using L2 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); + + // + + using L3 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_front.cpp b/test/mp_front.cpp new file mode 100644 index 0000000..90a0976 --- /dev/null +++ b/test/mp_front.cpp @@ -0,0 +1,43 @@ + +// 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_front; + using boost::mp_first; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, void>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, void>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, int[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, int[]>)); + + using L3 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, int>)); + + using L4 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, char>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, char>)); + + using L5 = std::add_const; + BOOST_TEST_TRAIT_TRUE((std::is_same, void()>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, void()>)); + + return boost::report_errors(); +} diff --git a/test/mp_identity.cpp b/test/mp_identity.cpp new file mode 100644 index 0000000..489e971 --- /dev/null +++ b/test/mp_identity.cpp @@ -0,0 +1,26 @@ + +// 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 + +struct X {}; + +int main() +{ + using boost::mp_identity; + + BOOST_TEST_TRAIT_TRUE((std::is_same::type, void const volatile>)); + BOOST_TEST_TRAIT_TRUE((std::is_same::type, void()>)); + BOOST_TEST_TRAIT_TRUE((std::is_same::type, int const[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same::type, X>)); + + return boost::report_errors(); +} diff --git a/test/mp_if.cpp b/test/mp_if.cpp new file mode 100644 index 0000000..96097f6 --- /dev/null +++ b/test/mp_if.cpp @@ -0,0 +1,38 @@ + +// 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 + +int main() +{ + using boost::mp_if_c; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, void()>)); + + using boost::mp_if; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, void()>)); + + using boost::mp_int; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], void()>, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], void()>, void()>)); + + using boost::mp_size_t; + + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], void()>, char[]>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, char[], void()>, void()>)); + + return boost::report_errors(); +} diff --git a/test/mp_inherit.cpp b/test/mp_inherit.cpp new file mode 100644 index 0000000..cf9ec09 --- /dev/null +++ b/test/mp_inherit.cpp @@ -0,0 +1,27 @@ + +// 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 + +struct X1 {}; +struct X2 {}; +struct X3 {}; + +int main() +{ + using boost::mp_inherit; + + BOOST_TEST_TRAIT_TRUE((std::is_base_of>)); + BOOST_TEST_TRAIT_TRUE((std::is_base_of>)); + BOOST_TEST_TRAIT_TRUE((std::is_base_of>)); + + return boost::report_errors(); +} diff --git a/test/mp_pop_front.cpp b/test/mp_pop_front.cpp new file mode 100644 index 0000000..f92dce9 --- /dev/null +++ b/test/mp_pop_front.cpp @@ -0,0 +1,39 @@ + +// 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_pop_front; + using boost::mp_rest; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list>)); + + using L3 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple<>>)); + + using L4 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); + + return boost::report_errors(); +} diff --git a/test/mp_push_back.cpp b/test/mp_push_back.cpp new file mode 100644 index 0000000..6bd1935 --- /dev/null +++ b/test/mp_push_back.cpp @@ -0,0 +1,52 @@ + +// 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_push_back; + + using L1 = 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>)); + + using L2 = 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>)); + + using L3 = 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>)); + + using L4 = 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>)); + + using L5 = 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>)); + + using L6 = 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(); +} diff --git a/test/mp_push_front.cpp b/test/mp_push_front.cpp new file mode 100644 index 0000000..303fddc --- /dev/null +++ b/test/mp_push_front.cpp @@ -0,0 +1,52 @@ + +// 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_push_front; + + using L1 = 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>)); + + using L2 = 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>)); + + using L3 = 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>)); + + using L4 = 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>)); + + using L5 = 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>)); + + using L6 = 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(); +} diff --git a/test/mp_rename.cpp b/test/mp_rename.cpp new file mode 100644 index 0000000..c0f3b60 --- /dev/null +++ b/test/mp_rename.cpp @@ -0,0 +1,88 @@ + +// 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 + +template struct X {}; +template using Y = X; + +int main() +{ + using boost::mp_list; + using boost::mp_rename; + + using L1 = 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, X<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y<>>)); + + using L2 = 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + + using L3 = 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + using L4 = 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + + // + + using L5 = std::tuple<>; + 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, X<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y<>>)); + + using L6 = std::tuple; + 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + + using L7 = std::tuple; + 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + using L8 = std::tuple; + 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + + // + + using L9 = std::pair; + 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, X>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, Y>)); + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_repeat.cpp b/test/mp_repeat.cpp new file mode 100644 index 0000000..3f08a50 --- /dev/null +++ b/test/mp_repeat.cpp @@ -0,0 +1,131 @@ + +// 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 +#include + +struct X1 {}; +struct X2 {}; + +int main() +{ + using boost::mp_list; + using boost::mp_repeat; + using boost::mp_repeat_c; + using boost::mp_true; + using boost::mp_false; + using boost::mp_int; + using boost::mp_size_t; + + using L1 = 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>, mp_list<>>)); + + using L2 = 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>, 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>)); + + using L3 = 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>)); + + // + + using L4 = 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<>>)); + BOOST_TEST_TRAIT_TRUE((std::is_same>, std::tuple<>>)); + + using L5 = 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>)); + 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>)); + + using L6 = 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>)); + + // + + using L7 = std::pair; + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + BOOST_TEST_TRAIT_TRUE((std::is_same, std::pair>)); + + // + + return boost::report_errors(); +} diff --git a/test/mp_second.cpp b/test/mp_second.cpp new file mode 100644 index 0000000..202a18f --- /dev/null +++ b/test/mp_second.cpp @@ -0,0 +1,34 @@ + +// 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_second; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, char[]>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, void>)); + + using L3 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, float>)); + + using L4 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, double>)); + + return boost::report_errors(); +} diff --git a/test/mp_size.cpp b/test/mp_size.cpp new file mode 100644 index 0000000..ae8969c --- /dev/null +++ b/test/mp_size.cpp @@ -0,0 +1,48 @@ + +// 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 +#include + +int main() +{ + using boost::mp_list; + using boost::mp_size; + using boost::mp_size_t; + + using L1 = mp_list<>; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<0>>)); + + using L2 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<1>>)); + + using L3 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<3>>)); + + using L4 = std::tuple<>; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<0>>)); + + using L5 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<1>>)); + + using L6 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<2>>)); + + using L7 = std::pair; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<2>>)); + + using L8 = std::add_const; + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<1>>)); + + return boost::report_errors(); +} diff --git a/test/mp_third.cpp b/test/mp_third.cpp new file mode 100644 index 0000000..75ad293 --- /dev/null +++ b/test/mp_third.cpp @@ -0,0 +1,28 @@ + +// 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_third; + + using L1 = mp_list; + BOOST_TEST_TRAIT_TRUE((std::is_same, float[]>)); + + using L2 = std::tuple; + BOOST_TEST_TRAIT_TRUE((std::is_same, char>)); + + return boost::report_errors(); +}