]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mp11/test/mp_for_each.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / mp11 / test / mp_for_each.cpp
1
2 // Copyright 2017 Peter Dimov.
3 //
4 // Distributed under the Boost Software License, Version 1.0.
5 //
6 // See accompanying file LICENSE_1_0.txt or copy at
7 // http://www.boost.org/LICENSE_1_0.txt
8
9
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>
15 #include <tuple>
16
17 #if !defined( BOOST_NO_CXX14_CONSTEXPR )
18 # define CONSTEXPR14 constexpr
19 #else
20 # define CONSTEXPR14
21 #endif
22
23 struct F
24 {
25 int s;
26
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; }
30 };
31
32 using boost::mp11::mp_list;
33 using boost::mp11::mp_for_each;
34
35 int main()
36 {
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 );
41
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 );
46
47 BOOST_TEST_EQ( (mp_for_each<std::pair<int, short>>( F{0} ).s), 12 );
48
49 #if defined( BOOST_NO_CXX11_CONSTEXPR ) || ( defined( _LIBCPP_VERSION ) && __cplusplus < 201400L )
50 #else
51
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" );
54
55 #endif
56
57 #if !defined( BOOST_NO_CXX14_CONSTEXPR ) && !BOOST_WORKAROUND( BOOST_MSVC, < 1920 )
58
59 constexpr auto r1 = mp_for_each<mp_list<int, short, char>>( F{0} );
60 static_assert( r1.s == 123, "r1.s == 123" );
61
62 constexpr auto r2 = mp_for_each<std::tuple<int, short, char>>( F{0} );
63 static_assert( r2.s == 123, "r2.s == 123" );
64
65 constexpr auto r3 = mp_for_each<std::pair<int, short>>( F{0} );
66 static_assert( r3.s == 12, "r3.s == 12" );
67
68 #endif
69
70 return boost::report_errors();
71 }