diff --git a/doc/html/mp11.html b/doc/html/mp11.html index a6e817b..db32cd8 100644 --- a/doc/html/mp11.html +++ b/doc/html/mp11.html @@ -68,6 +68,8 @@
mp_push_back<L, T...>
mp_rename<L, Y>
+
mp_apply<F, + L>
mp_append<L...>
mp_replace_front<L, T>
mp_replace_first<L, T>
@@ -699,6 +701,21 @@

+mp_apply<F, + L> +

+
template<template<class...> class F, class L> using mp_apply = mp_rename<L, F>;
+
+

+ mp_apply<F, L> applies the function F to the contents of the list L, that is, mp_rename<F, L<T...>> + is an alias for F<T...>. + (mp_apply is the same as + mp_rename with the arguments + reversed.) +

+
+
+

mp_append<L...>

template<class... L> using mp_append = /*...*/;
@@ -1688,7 +1705,7 @@
 
- +

Last revised: March 20, 2017 at 14:09:13 GMT

Last revised: March 24, 2017 at 12:24:11 GMT


diff --git a/doc/mp11/list.qbk b/doc/mp11/list.qbk index 19f1677..5b01b3b 100644 --- a/doc/mp11/list.qbk +++ b/doc/mp11/list.qbk @@ -85,6 +85,13 @@ is an alias for `L`. `mp_rename` changes the type of the list `L` to `Y`. That is, `mp_rename, Y>` is an alias for `Y`. [endsect] +[section `mp_apply`] + template class F, class L> using mp_apply = mp_rename; + +`mp_apply` applies the function `F` to the contents of the list `L`, that is, `mp_rename>` is an alias for `F`. +(`mp_apply` is the same as `mp_rename` with the arguments reversed.) +[endsect] + [section `mp_append`] template using mp_append = /*...*/; diff --git a/include/boost/mp11/list.hpp b/include/boost/mp11/list.hpp index db57d65..85e590f 100644 --- a/include/boost/mp11/list.hpp +++ b/include/boost/mp11/list.hpp @@ -147,6 +147,8 @@ template class A, class... T, template class B> str template class B> using mp_rename = typename detail::mp_rename_impl::type; +template class F, class L> using mp_apply = typename detail::mp_rename_impl::type; + // mp_append namespace detail { diff --git a/test/mp_rename.cpp b/test/mp_rename.cpp index e124683..3ad751a 100644 --- a/test/mp_rename.cpp +++ b/test/mp_rename.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -20,68 +20,126 @@ int main() { using boost::mp11::mp_list; using boost::mp11::mp_rename; + using boost::mp11::mp_apply; 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<>>)); + 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>)); + 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>)); + 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>)); + 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<>>)); + 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>)); + 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>)); + 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>)); + 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>)); + 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();