]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/system/test/result_copy_construct.cpp
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / boost / libs / system / test / result_copy_construct.cpp
CommitLineData
1e59de90
TL
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
4
5#include <boost/system/result.hpp>
6#include <boost/core/lightweight_test.hpp>
7#include <boost/core/lightweight_test_trait.hpp>
8
9using namespace boost::system;
10
11struct X
12{
13 static int instances;
14
15 int v_;
16
17 X(): v_() { ++instances; }
18
19 explicit X( int v ): v_( v ) { ++instances; }
20
21 X( int v1, int v2 ): v_( v1+v2 ) { ++instances; }
22 X( int v1, int v2, int v3 ): v_( v1+v2+v3 ) { ++instances; }
23
24 X( X const& r ): v_( r.v_ ) { ++instances; }
25
26 X& operator=( X const& ) = delete;
27
28 ~X() { --instances; }
29};
30
31bool operator==( X const & x1, X const & x2 )
32{
33 return x1.v_ == x2.v_;
34}
35
36std::ostream& operator<<( std::ostream& os, X const & x )
37{
38 os << "X:" << x.v_;
39 return os;
40}
41
42int X::instances = 0;
43
44int main()
45{
46 {
47 result<int> r;
48 result<int> r2( r );
49
50 BOOST_TEST_EQ( r, r2 );
51 }
52
53 {
54 result<int> const r;
55 result<int> r2( r );
56
57 BOOST_TEST_EQ( r, r2 );
58 }
59
60 BOOST_TEST_EQ( X::instances, 0 );
61
62 {
63 result<X> r;
64 result<X> r2( r );
65
66 BOOST_TEST_EQ( r, r2 );
67 BOOST_TEST_EQ( X::instances, 2 );
68 }
69
70 BOOST_TEST_EQ( X::instances, 0 );
71
72 {
73 result<int> r( 1 );
74 result<int> r2( r );
75
76 BOOST_TEST_EQ( r, r2 );
77 }
78
79 {
80 result<int> const r( 1 );
81 result<int> r2( r );
82
83 BOOST_TEST_EQ( r, r2 );
84 }
85
86 BOOST_TEST_EQ( X::instances, 0 );
87
88 {
89 result<X> r( 1 );
90 result<X> r2( r );
91
92 BOOST_TEST_EQ( r, r2 );
93 BOOST_TEST_EQ( X::instances, 2 );
94 }
95
96 BOOST_TEST_EQ( X::instances, 0 );
97
98 {
99 result<X> const r( 1 );
100 result<X> r2( r );
101
102 BOOST_TEST_EQ( r, r2 );
103 BOOST_TEST_EQ( X::instances, 2 );
104 }
105
106 BOOST_TEST_EQ( X::instances, 0 );
107
108 {
109 auto ec = make_error_code( errc::invalid_argument );
110
111 result<int> r( ec );
112 result<int> r2( r );
113
114 BOOST_TEST_EQ( r, r2 );
115 }
116
117 {
118 auto ec = make_error_code( errc::invalid_argument );
119
120 result<int> const r( ec );
121 result<int> r2( r );
122
123 BOOST_TEST_EQ( r, r2 );
124 }
125
126 BOOST_TEST_EQ( X::instances, 0 );
127
128 {
129 result<std::string, X> r( 1 );
130 result<std::string, X> r2( r );
131
132 BOOST_TEST_EQ( r, r2 );
133 BOOST_TEST_EQ( X::instances, 2 );
134 }
135
136 BOOST_TEST_EQ( X::instances, 0 );
137
138 {
139 result<std::string, X> const r( 1 );
140 result<std::string, X> r2( r );
141
142 BOOST_TEST_EQ( r, r2 );
143 BOOST_TEST_EQ( X::instances, 2 );
144 }
145
146 BOOST_TEST_EQ( X::instances, 0 );
147
148 {
149 result<void> r;
150 result<void> r2( r );
151
152 BOOST_TEST_EQ( r, r2 );
153 }
154
155 {
156 result<void> const r;
157 result<void> r2( r );
158
159 BOOST_TEST_EQ( r, r2 );
160 }
161
162 {
163 auto ec = make_error_code( errc::invalid_argument );
164
165 result<void> r( ec );
166 result<void> r2( r );
167
168 BOOST_TEST_EQ( r, r2 );
169 }
170
171 {
172 auto ec = make_error_code( errc::invalid_argument );
173
174 result<void> const r( ec );
175 result<void> r2( r );
176
177 BOOST_TEST_EQ( r, r2 );
178 }
179
180 return boost::report_errors();
181}