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/algorithm.hpp b/include/boost/mp11/algorithm.hpp index 2f81789..309255c 100644 --- a/include/boost/mp11/algorithm.hpp +++ b/include/boost/mp11/algorithm.hpp @@ -189,17 +189,10 @@ 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; +template using mp_repeat = typename detail::mp_repeat_c_impl::type; // mp_product namespace detail @@ -322,42 +315,27 @@ template class L, class T1, class T2, class T3, class T4, cla using type = mp_append, typename mp_take_c_impl, N-5>::type>; }; -template struct mp_take_impl -{ - static_assert( N::value >= 0, "mp_take: N must not be negative" ); - using type = typename mp_take_c_impl::type; -}; - } // namespace detail template using mp_take_c = typename detail::mp_take_c_impl::type; -template using mp_take = typename detail::mp_take_impl::type; +template using mp_take = typename detail::mp_take_c_impl::type; // mp_replace namespace detail { -#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) - template struct mp_replace_impl; template class L, class... T, class V, class W> struct mp_replace_impl, V, W> { +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) template struct _f { using type = mp_if, W, A>; }; - using type = L::type...>; -}; - #else - -template struct mp_replace_impl -{ template using _f = mp_if, W, A>; - - using type = mp_transform<_f, L>; -}; - + using type = L<_f...>; #endif +}; } // namespace detail @@ -367,11 +345,12 @@ template using mp_replace = typename detail::mp_repla namespace detail { -template class P, class W> struct mp_replace_if_impl -{ - template using _f = mp_if, W, T>; +template class P, class W> struct mp_replace_if_impl; - using type = mp_transform<_f, L>; +template class L, class... T, template class P, class W> struct mp_replace_if_impl, P, W> +{ + template using _f = mp_if, W, U>; + using type = L<_f...>; }; } // namespace detail @@ -384,27 +363,15 @@ namespace detail template class P> struct mp_copy_if_impl; -#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) - template class L, class... T, template class P> struct mp_copy_if_impl, P> { - static_assert( sizeof...(T) == 0, "T... must be empty" ); - using type = L<>; -}; - +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1910 ) + template struct _f { using type = mp_if, mp_list, mp_list<>>; }; + using type = mp_append, typename _f::type...>; #else - -template class L, template class P> struct mp_copy_if_impl, P> -{ - using type = L<>; -}; - + template using _f = mp_if, mp_list, mp_list<>>; + using type = mp_append, _f...>; #endif - -template class L, class T1, class... T, template class P> struct mp_copy_if_impl, P> -{ - using rest = typename mp_copy_if_impl, P>::type; - using type = mp_if, mp_push_front, rest>; }; } // namespace detail @@ -417,32 +384,15 @@ namespace detail template struct mp_remove_impl; -#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) - template class L, class... T, class V> struct mp_remove_impl, V> { - static_assert( sizeof...(T) == 0, "T... must be empty" ); - using type = L<>; -}; - +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1910 ) + template struct _f { using type = mp_if, mp_list<>, mp_list>; }; + using type = mp_append, typename _f::type...>; #else - -template class L, class V> struct mp_remove_impl, V> -{ - using type = L<>; -}; - + template using _f = mp_if, mp_list<>, mp_list>; + using type = mp_append, _f...>; #endif - -template class L, class T1, class... T> struct mp_remove_impl, T1> -{ - using type = typename mp_remove_impl, T1>::type; -}; - -template class L, class T1, class... T, class V> struct mp_remove_impl, V> -{ - using rest = typename mp_remove_impl, V>::type; - using type = mp_push_front; }; } // namespace detail @@ -455,27 +405,15 @@ namespace detail template class P> struct mp_remove_if_impl; -#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) - template class L, class... T, template class P> struct mp_remove_if_impl, P> { - static_assert( sizeof...(T) == 0, "T... must be empty" ); - using type = L<>; -}; - +#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1910 ) + template struct _f { using type = mp_if, mp_list<>, mp_list>; }; + using type = mp_append, typename _f::type...>; #else - -template class L, template class P> struct mp_remove_if_impl, P> -{ - using type = L<>; -}; - + template using _f = mp_if, mp_list<>, mp_list>; + using type = mp_append, _f...>; #endif - -template class L, class T1, class... T, template class P> struct mp_remove_if_impl, P> -{ - using rest = typename mp_remove_if_impl, P>::type; - using type = mp_if, rest, mp_push_front>; }; } // namespace detail @@ -488,27 +426,9 @@ namespace detail template class P> struct mp_partition_impl; -#if defined( BOOST_MSVC ) && BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) - template class L, class... T, template class P> struct mp_partition_impl, P> { - static_assert( sizeof...(T) == 0, "T... must be empty" ); - using type = L, L<>>; -}; - -#else - -template class L, template class P> struct mp_partition_impl, P> -{ - using type = L, L<>>; -}; - -#endif - -template class L, class T1, class... T, template class P> struct mp_partition_impl, P> -{ - using rest = typename mp_partition_impl, P>::type; - using type = mp_if, L, T1>, mp_second>, L, mp_push_front, T1>>>; + using type = L, P>, mp_remove_if, P>>; }; } // namespace detail @@ -760,9 +680,29 @@ template class L, class T1, class T2, class T3, class T4, cla using type = L; }; -template class L, class T1, class T2, class T3, class T4, class T5, class T6, class... T> struct mp_reverse_impl> +template class L, class T1, class T2, class T3, class T4, class T5, class T6> struct mp_reverse_impl> { - using type = mp_push_back>::type, T6, T5, T4, T3, T2, T1>; + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9> struct mp_reverse_impl> +{ + using type = L; +}; + +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class... T> struct mp_reverse_impl> +{ + using type = mp_push_back>::type, T10, T9, T8, T7, T6, T5, T4, T3, T2, T1>; }; } // namespace detail @@ -797,6 +737,11 @@ template class L, class T1, class... T, class V, template, F, F>::type; }; +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class... T, class V, template class F> struct mp_fold_impl, V, F> +{ + using type = typename mp_fold_impl, F, T2>, T3>, T4>, T5>, T6>, T7>, T8>, T9>, T10>, F>::type; +}; + } // namespace detail template class F> using mp_fold = typename detail::mp_fold_impl::type; @@ -830,6 +775,12 @@ template class L, class T1, class... T, class V, template; }; +template class L, class T1, class T2, class T3, class T4, class T5, class T6, class T7, class T8, class T9, class T10, class... T, class V, template class F> struct mp_reverse_fold_impl, V, F> +{ + using rest = typename mp_reverse_fold_impl, V, F>::type; + using type = F>>>>>>>>>; +}; + } // namespace detail template class F> using mp_reverse_fold = typename detail::mp_reverse_fold_impl::type; 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_copy_if.cpp b/test/mp_copy_if.cpp index 1545c18..0cf54d4 100644 --- a/test/mp_copy_if.cpp +++ b/test/mp_copy_if.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -17,6 +18,10 @@ struct X1 {}; struct X2 {}; struct X3 {}; +using boost::mp11::mp_bool; + +template using is_even = mp_bool; + int main() { using boost::mp11::mp_list; @@ -46,5 +51,17 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + + { + int const N = 12; + using L1 = mp_iota_c; + + using R1 = mp_copy_if; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<2>, mp_size_t<4>, mp_size_t<6>, mp_size_t<8>, mp_size_t<10>>>)); + } + return boost::report_errors(); } diff --git a/test/mp_fold.cpp b/test/mp_fold.cpp index 4a0fa73..96dd7ba 100644 --- a/test/mp_fold.cpp +++ b/test/mp_fold.cpp @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -53,5 +54,25 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, mp_push_front>, mp_list>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_reverse; + using boost::mp11::mp_size_t; + using boost::mp11::mp_plus; + + { + int const N = 37; + + using L = mp_iota_c; + + using R1 = mp_fold, mp_push_back>; + BOOST_TEST_TRAIT_TRUE((std::is_same)); + + using R2 = mp_fold, mp_push_front>; + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + + using R3 = mp_fold, mp_plus>; + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + } + return boost::report_errors(); } diff --git a/test/mp_remove_if.cpp b/test/mp_remove_if.cpp index 733f9fb..bd9b777 100644 --- a/test/mp_remove_if.cpp +++ b/test/mp_remove_if.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -17,6 +18,10 @@ struct X1 {}; struct X2 {}; struct X3 {}; +using boost::mp11::mp_bool; + +template using is_odd = mp_bool; + int main() { using boost::mp11::mp_list; @@ -46,5 +51,17 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same, std::tuple>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + + { + int const N = 12; + using L1 = mp_iota_c; + + using R1 = mp_remove_if; + + BOOST_TEST_TRAIT_TRUE((std::is_same, mp_size_t<2>, mp_size_t<4>, mp_size_t<6>, mp_size_t<8>, mp_size_t<10>>>)); + } + return boost::report_errors(); } 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(); diff --git a/test/mp_reverse.cpp b/test/mp_reverse.cpp index 79d7cb6..e1aebf5 100644 --- a/test/mp_reverse.cpp +++ b/test/mp_reverse.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -22,6 +23,9 @@ struct X6 {}; struct X7 {}; struct X8 {}; struct X9 {}; +struct X10 {}; +struct X11 {}; +struct X12 {}; int main() { @@ -39,6 +43,9 @@ int main() 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>)); } { @@ -52,11 +59,35 @@ int main() 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::pair>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_size_t; + using boost::mp11::mp_transform; + using boost::mp11::mp_plus; + using boost::mp11::mp_fill; + + { + int const N = 37; + + using L = mp_iota_c; + + using R1 = mp_reverse; + using R2 = mp_reverse; + + BOOST_TEST_TRAIT_TRUE((std::is_same)); + + using R3 = mp_transform; + + BOOST_TEST_TRAIT_TRUE((std::is_same>>)); + } + return boost::report_errors(); } diff --git a/test/mp_reverse_fold.cpp b/test/mp_reverse_fold.cpp index f88b645..0556bee 100644 --- a/test/mp_reverse_fold.cpp +++ b/test/mp_reverse_fold.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015-2017 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -9,6 +9,7 @@ #include #include +#include #include #include #include @@ -55,5 +56,25 @@ int main() BOOST_TEST_TRAIT_TRUE((std::is_same, mp_list<>, rev_push_front>, mp_list>)); } + using boost::mp11::mp_iota_c; + using boost::mp11::mp_reverse; + using boost::mp11::mp_size_t; + using boost::mp11::mp_plus; + + { + int const N = 37; + + using L = mp_iota_c; + + using R1 = mp_reverse_fold, rev_push_front>; + BOOST_TEST_TRAIT_TRUE((std::is_same)); + + using R2 = mp_reverse_fold, rev_push_back>; + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + + using R3 = mp_reverse_fold, mp_plus>; + BOOST_TEST_TRAIT_TRUE((std::is_same>)); + } + return boost::report_errors(); } diff --git a/test/mp_valid.cpp b/test/mp_valid.cpp index a096442..40ccbb8 100644 --- a/test/mp_valid.cpp +++ b/test/mp_valid.cpp @@ -1,5 +1,5 @@ -// Copyright 2015 Peter Dimov. +// Copyright 2015 Peter Dimov. // // Distributed under the Boost Software License, Version 1.0. // @@ -27,7 +27,7 @@ template using add_extents = T[]; int main() { - using boost::mp11::mp_valid; + using boost::mp11::mp_valid; using boost::mp11::mp_identity; BOOST_TEST_TRAIT_FALSE((mp_valid)); @@ -49,7 +49,7 @@ int main() BOOST_TEST_TRAIT_FALSE((mp_valid)); #if !defined( BOOST_GCC ) || !BOOST_WORKAROUND( BOOST_GCC, < 70000 ) - // g++ up to at least 6.2 doesn't like add_reference for some reason or other + // g++ up to at least 6.3 doesn't like add_reference for some reason or other BOOST_TEST_TRAIT_FALSE((mp_valid)); #if !defined( BOOST_MSVC ) || !BOOST_WORKAROUND( BOOST_MSVC, <= 1800 ) // msvc-12.0 gives an internal error here