// Copyright 2023 Klemens Morgenstern // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include #include using namespace boost::system; struct XM { int v_; explicit XM( int v = 0 ): v_( v ) {} XM( XM const& ) = delete; XM& operator=( XM const& ) = delete; XM( XM && ) = default; XM& operator=( XM && ) = default; }; int main() { { result r( 1 ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 1 ); } { BOOST_TEST(( !result( 1 ).has_value() )); BOOST_TEST(( result( 1 ).has_error() )); BOOST_TEST_EQ( (result( 1 ).error().v_), 1 ); } { result r( "s" ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 0 ); } { result r( "s" ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 0 ); } { BOOST_TEST(( result( "s" ).has_value() )); BOOST_TEST(( !result( "s" ).has_error() )); BOOST_TEST_EQ( (result( "s" ).error().v_), 0 ); } { result r( 1 ); BOOST_TEST( !r.has_value() ); BOOST_TEST( r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 1 ); } { BOOST_TEST(( !result( 1 ).has_value() )); BOOST_TEST(( result( 1 ).has_error() )); BOOST_TEST_EQ( (result( 1 ).error().v_), 1 ); } { result r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 0 ); } { result r; BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 0 ); } { BOOST_TEST(( result( ).has_value() )); BOOST_TEST(( !result( ).has_error() )); BOOST_TEST_EQ( (result( ).error().v_), 0 ); } return boost::report_errors(); }