]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/system/test/result_value_construct.cpp
1 // Copyright 2017, 2021 Peter Dimov.
2 // Distributed under the Boost Software License, Version 1.0.
3 // https://www.boost.org/LICENSE_1_0.txt
5 #include <boost/system/result.hpp>
6 #include <boost/core/lightweight_test.hpp>
7 #include <boost/core/lightweight_test_trait.hpp>
9 using namespace boost::system
;
17 explicit X( int v
): v_( v
) { ++instances
; }
19 X( int v1
, int v2
): v_( v1
+v2
) { ++instances
; }
20 X( int v1
, int v2
, int v3
): v_( v1
+v2
+v3
) { ++instances
; }
22 X( X
const& ) = delete;
23 X
& operator=( X
const& ) = delete;
35 BOOST_TEST( r
.has_value() );
36 BOOST_TEST( !r
.has_error() );
38 BOOST_TEST_EQ( r
.value(), 0 );
44 BOOST_TEST( r
.has_value() );
45 BOOST_TEST( !r
.has_error() );
47 BOOST_TEST_EQ( r
.value(), 0 );
51 result
<int, int> r( in_place_value
, 1 );
53 BOOST_TEST( r
.has_value() );
54 BOOST_TEST( !r
.has_error() );
56 BOOST_TEST_EQ( *r
, 1 );
59 BOOST_TEST_EQ( X::instances
, 0 );
64 BOOST_TEST( r
.has_value() );
65 BOOST_TEST( !r
.has_error() );
67 BOOST_TEST_EQ( r
.value().v_
, 1 );
69 BOOST_TEST_EQ( X::instances
, 1 );
72 BOOST_TEST_EQ( X::instances
, 0 );
77 BOOST_TEST( r
.has_value() );
78 BOOST_TEST( !r
.has_error() );
80 BOOST_TEST_EQ( r
.value().v_
, 1+2 );
82 BOOST_TEST_EQ( X::instances
, 1 );
85 BOOST_TEST_EQ( X::instances
, 0 );
88 result
<X
> r( 1, 2, 3 );
90 BOOST_TEST( r
.has_value() );
91 BOOST_TEST( !r
.has_error() );
93 BOOST_TEST_EQ( r
.value().v_
, 1+2+3 );
95 BOOST_TEST_EQ( X::instances
, 1 );
98 BOOST_TEST_EQ( X::instances
, 0 );
101 result
<X
, X
> r( in_place_value
, 1 );
103 BOOST_TEST( r
.has_value() );
104 BOOST_TEST( !r
.has_error() );
106 BOOST_TEST_EQ( r
->v_
, 1 );
108 BOOST_TEST_EQ( X::instances
, 1 );
111 BOOST_TEST_EQ( X::instances
, 0 );
114 BOOST_TEST_TRAIT_TRUE((std::is_constructible
<result
<int>, int>));
115 BOOST_TEST_TRAIT_TRUE((std::is_convertible
<int, result
<int>>));
117 BOOST_TEST_TRAIT_FALSE((std::is_constructible
<result
<int, int>, int>));
118 BOOST_TEST_TRAIT_FALSE((std::is_constructible
<result
<int, float>, int>));
120 BOOST_TEST_TRAIT_TRUE((std::is_constructible
<result
<X
>, int>));
121 BOOST_TEST_TRAIT_FALSE((std::is_convertible
<int, result
<X
>>));
125 result
<void> r( in_place_value
);
127 BOOST_TEST( r
.has_value() );
128 BOOST_TEST( !r
.has_error() );
131 return boost::report_errors();