]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mp11/test/mp_for_each.cpp
2 // Copyright 2017 Peter Dimov.
4 // Distributed under the Boost Software License, Version 1.0.
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
10 #include <boost/mp11/algorithm.hpp>
11 #include <boost/mp11/list.hpp>
12 #include <boost/core/lightweight_test.hpp>
13 #include <boost/config.hpp>
14 #include <boost/detail/workaround.hpp>
17 #if !defined( BOOST_NO_CXX14_CONSTEXPR )
18 # define CONSTEXPR14 constexpr
27 CONSTEXPR14
void operator()( int ) { s
= s
* 10 + 1; }
28 CONSTEXPR14
void operator()( short ) { s
= s
* 10 + 2; }
29 CONSTEXPR14
void operator()( char ) { s
= s
* 10 + 3; }
32 using boost::mp11::mp_list
;
33 using boost::mp11::mp_for_each
;
37 BOOST_TEST_EQ( (mp_for_each
<mp_list
<>>( 11 )), 11 );
38 BOOST_TEST_EQ( (mp_for_each
<mp_list
<int>>( F
{0} ).s
), 1 );
39 BOOST_TEST_EQ( (mp_for_each
<mp_list
<int, short>>( F
{0} ).s
), 12 );
40 BOOST_TEST_EQ( (mp_for_each
<mp_list
<int, short, char>>( F
{0} ).s
), 123 );
42 BOOST_TEST_EQ( (mp_for_each
<std::tuple
<>>( 11 )), 11 );
43 BOOST_TEST_EQ( (mp_for_each
<std::tuple
<int>>( F
{0} ).s
), 1 );
44 BOOST_TEST_EQ( (mp_for_each
<std::tuple
<int, short>>( F
{0} ).s
), 12 );
45 BOOST_TEST_EQ( (mp_for_each
<std::tuple
<int, short, char>>( F
{0} ).s
), 123 );
47 BOOST_TEST_EQ( (mp_for_each
<std::pair
<int, short>>( F
{0} ).s
), 12 );
49 #if defined( BOOST_NO_CXX11_CONSTEXPR ) || ( defined( _LIBCPP_VERSION ) && __cplusplus < 201400L )
52 static_assert( mp_for_each
<mp_list
<>>( 11 ) == 11, "mp_for_each<mp_list<>>( 11 ) == 11" );
53 static_assert( mp_for_each
<std::tuple
<>>( 12 ) == 12, "mp_for_each<std::tuple<>>( 12 ) == 12" );
57 #if !defined( BOOST_NO_CXX14_CONSTEXPR ) && !BOOST_WORKAROUND( BOOST_MSVC, < 1920 )
59 constexpr auto r1
= mp_for_each
<mp_list
<int, short, char>>( F
{0} );
60 static_assert( r1
.s
== 123, "r1.s == 123" );
62 constexpr auto r2
= mp_for_each
<std::tuple
<int, short, char>>( F
{0} );
63 static_assert( r2
.s
== 123, "r2.s == 123" );
65 constexpr auto r3
= mp_for_each
<std::pair
<int, short>>( F
{0} );
66 static_assert( r3
.s
== 12, "r3.s == 12" );
70 return boost::report_errors();