// Copyright 2023 Klemens Morgenstern // Distributed under the Boost Software License, Version 1.0. // https://www.boost.org/LICENSE_1_0.txt #include #include #include using namespace boost::system; struct X { int v_; explicit X( int v = 0 ): v_( v ) {} X( X const& ) = delete; X& operator=( X const& ) = delete; X( X && ) = default; X& operator=( X && ) = 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 ); } { 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 ); } { BOOST_TEST(( result().has_value() )); BOOST_TEST(( !result().has_error() )); BOOST_TEST_EQ( (result().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 ); } { double x = 1.0; result r( x ); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); BOOST_TEST_EQ( std::move( r ).error().v_, 0 ); } { double x = 1.0; BOOST_TEST(( result( x ).has_value() )); BOOST_TEST(( !result( x ).has_error() )); BOOST_TEST_EQ( (result( x ).error().v_), 0 ); } // return boost::report_errors(); }