From 5c1d0df8938661d0de87b9f8c0b0d48fa86d0b9e Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 31 Jan 2024 05:26:01 +0200 Subject: [PATCH] Enable result & fv. Refs #117. --- include/boost/system/result.hpp | 16 ++++++++++++ test/result_and_fn1v.cpp | 45 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/include/boost/system/result.hpp b/include/boost/system/result.hpp index 762afa3..f3d841f 100644 --- a/include/boost/system/result.hpp +++ b/include/boost/system/result.hpp @@ -1103,6 +1103,22 @@ result operator&( result&& r, F&& f ) } } +template()() ), + class En = typename std::enable_if::value>::type +> +result operator&( result const& r, F&& f ) +{ + if( r.has_error() ) + { + return r.error(); + } + else + { + return std::forward( f )(); + } +} + // result & unary-returning-result template r; + result r2 = r & k; + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( *r2, 7 ); + } + + { + result const r; + result r2 = r & k; + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( *r2, 7 ); + } + + { + result r2 = result() & k; + + BOOST_TEST( r2.has_value() ) && BOOST_TEST_EQ( *r2, 7 ); + } + + { + result r( in_place_error ); + result r2 = r & k; + + BOOST_TEST( r2.has_error() ); + } + + { + result const r( in_place_error ); + result r2 = r & k; + + BOOST_TEST( r2.has_error() ); + } + + { + result r2 = result( in_place_error ) & k; + + BOOST_TEST( r2.has_error() ); + } + return boost::report_errors(); }