]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/mp11/test/construct_from_tuple.cpp
2 // Copyright 2015, 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/tuple.hpp>
11 #include <boost/core/lightweight_test.hpp>
12 #include <boost/config.hpp>
13 #include <boost/detail/workaround.hpp>
23 T1( int x
= 0, int y
= 0, int z
= 0 ): x(x
), y(y
), z(z
) {}
28 std::unique_ptr
<int> x
, y
, z
;
30 T2( std::unique_ptr
<int> x
, std::unique_ptr
<int> y
, std::unique_ptr
<int> z
): x(std::move(x
)), y(std::move(y
)), z(std::move(z
)) {}
32 #if BOOST_WORKAROUND( BOOST_MSVC, <= 1800 )
34 T2( T2
&& r
): x( std::move(r
.x
) ), y( std::move(r
.y
) ), z( std::move(r
.z
) ) {}
41 using boost::mp11::construct_from_tuple
;
44 std::tuple
<int, short, char> tp
{ 1, 2, 3 };
47 T1 t1
= construct_from_tuple
<T1
>( tp
);
49 BOOST_TEST_EQ( t1
.x
, 1 );
50 BOOST_TEST_EQ( t1
.y
, 2 );
51 BOOST_TEST_EQ( t1
.z
, 3 );
55 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
57 BOOST_TEST_EQ( t1
.x
, 1 );
58 BOOST_TEST_EQ( t1
.y
, 2 );
59 BOOST_TEST_EQ( t1
.z
, 3 );
64 std::tuple
<int, short, char> const tp
{ 1, 2, 3 };
67 T1 t1
= construct_from_tuple
<T1
>( tp
);
69 BOOST_TEST_EQ( t1
.x
, 1 );
70 BOOST_TEST_EQ( t1
.y
, 2 );
71 BOOST_TEST_EQ( t1
.z
, 3 );
75 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
77 BOOST_TEST_EQ( t1
.x
, 1 );
78 BOOST_TEST_EQ( t1
.y
, 2 );
79 BOOST_TEST_EQ( t1
.z
, 3 );
83 #if defined( __clang_major__ ) && __clang_major__ == 3 && __clang_minor__ < 8
87 std::tuple
<std::unique_ptr
<int>, std::unique_ptr
<int>, std::unique_ptr
<int>> tp
{ std::unique_ptr
<int>(new int(1)), std::unique_ptr
<int>(new int(2)), std::unique_ptr
<int>(new int(3)) };
89 T2 t2
= construct_from_tuple
<T2
>( std::move(tp
) );
91 BOOST_TEST_EQ( *t2
.x
, 1 );
92 BOOST_TEST_EQ( *t2
.y
, 2 );
93 BOOST_TEST_EQ( *t2
.z
, 3 );
99 std::pair
<int, short> tp
{ 1, 2 };
102 T1 t1
= construct_from_tuple
<T1
>( tp
);
104 BOOST_TEST_EQ( t1
.x
, 1 );
105 BOOST_TEST_EQ( t1
.y
, 2 );
106 BOOST_TEST_EQ( t1
.z
, 0 );
110 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
112 BOOST_TEST_EQ( t1
.x
, 1 );
113 BOOST_TEST_EQ( t1
.y
, 2 );
114 BOOST_TEST_EQ( t1
.z
, 0 );
119 std::pair
<int, short> const tp
{ 1, 2 };
122 T1 t1
= construct_from_tuple
<T1
>( tp
);
124 BOOST_TEST_EQ( t1
.x
, 1 );
125 BOOST_TEST_EQ( t1
.y
, 2 );
126 BOOST_TEST_EQ( t1
.z
, 0 );
130 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
132 BOOST_TEST_EQ( t1
.x
, 1 );
133 BOOST_TEST_EQ( t1
.y
, 2 );
134 BOOST_TEST_EQ( t1
.z
, 0 );
139 std::array
<int, 3> tp
{{ 1, 2, 3 }};
142 T1 t1
= construct_from_tuple
<T1
>( tp
);
144 BOOST_TEST_EQ( t1
.x
, 1 );
145 BOOST_TEST_EQ( t1
.y
, 2 );
146 BOOST_TEST_EQ( t1
.z
, 3 );
150 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
152 BOOST_TEST_EQ( t1
.x
, 1 );
153 BOOST_TEST_EQ( t1
.y
, 2 );
154 BOOST_TEST_EQ( t1
.z
, 3 );
159 std::array
<int, 3> const tp
{{ 1, 2, 3 }};
162 T1 t1
= construct_from_tuple
<T1
>( tp
);
164 BOOST_TEST_EQ( t1
.x
, 1 );
165 BOOST_TEST_EQ( t1
.y
, 2 );
166 BOOST_TEST_EQ( t1
.z
, 3 );
170 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
172 BOOST_TEST_EQ( t1
.x
, 1 );
173 BOOST_TEST_EQ( t1
.y
, 2 );
174 BOOST_TEST_EQ( t1
.z
, 3 );
182 T1 t1
= construct_from_tuple
<T1
>( tp
);
184 BOOST_TEST_EQ( t1
.x
, 0 );
185 BOOST_TEST_EQ( t1
.y
, 0 );
186 BOOST_TEST_EQ( t1
.z
, 0 );
190 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
192 BOOST_TEST_EQ( t1
.x
, 0 );
193 BOOST_TEST_EQ( t1
.y
, 0 );
194 BOOST_TEST_EQ( t1
.z
, 0 );
199 std::array
<int, 0> tp
;
202 T1 t1
= construct_from_tuple
<T1
>( tp
);
204 BOOST_TEST_EQ( t1
.x
, 0 );
205 BOOST_TEST_EQ( t1
.y
, 0 );
206 BOOST_TEST_EQ( t1
.z
, 0 );
210 T1 t1
= construct_from_tuple
<T1
>( std::move(tp
) );
212 BOOST_TEST_EQ( t1
.x
, 0 );
213 BOOST_TEST_EQ( t1
.y
, 0 );
214 BOOST_TEST_EQ( t1
.z
, 0 );
218 return boost::report_errors();