1 | // Copyright 2023 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 | |
8 | using namespace boost::system; |
9 | |
10 | // Tricky mixed construction cases |
11 | // https://github.com/boostorg/system/issues/104 |
12 | // https://brevzin.github.io//c++/2023/01/18/optional-construction/ |
13 | |
14 | int main() |
15 | { |
16 | { |
17 | result<int> r( make_error_code( e: errc::invalid_argument ) ); |
18 | result<result<int>> r2( r ); |
19 | |
20 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
21 | } |
22 | |
23 | { |
24 | result<int> r( 5 ); |
25 | result<result<int>> r2( r ); |
26 | |
27 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
28 | } |
29 | |
30 | { |
31 | result<int> const r( make_error_code( e: errc::invalid_argument ) ); |
32 | result<result<int>> r2( r ); |
33 | |
34 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
35 | } |
36 | |
37 | { |
38 | result<int> const r( 5 ); |
39 | result<result<int>> r2( r ); |
40 | |
41 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
42 | } |
43 | |
44 | { |
45 | result<int> r( make_error_code( e: errc::invalid_argument ) ); |
46 | result<result<int>> r2( std::move( r ) ); |
47 | |
48 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
49 | } |
50 | |
51 | { |
52 | result<int> r( 5 ); |
53 | result<result<int>> r2( std::move( r ) ); |
54 | |
55 | BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( r2.value(), r ); |
56 | } |
57 | |
58 | return boost::report_errors(); |
59 | } |
60 |