From 93852d1a7e2152d6eef28b617436f0a1a3227303 Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Tue, 9 Apr 2024 03:01:38 +0300 Subject: [PATCH] Support result &= fv. Refs #119. --- include/boost/system/result.hpp | 14 ++++++++++++++ test/result_and_eq_fn1v.cpp | 27 +++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/boost/system/result.hpp b/include/boost/system/result.hpp index 5cd6802..456a792 100644 --- a/include/boost/system/result.hpp +++ b/include/boost/system/result.hpp @@ -1296,6 +1296,20 @@ result& operator&=( result& r, F&& f ) return r; } +template()() ), + class En = typename std::enable_if::value>::type +> +result& operator&=( result& r, F&& f ) +{ + if( r ) + { + std::forward( f )(); + } + + return r; +} + // result &= unary-returning-result template r; + fv_called = 0; + + r &= fv; + + BOOST_TEST( r.has_value() ); + BOOST_TEST_EQ( fv_called, 1 ); + } + + { + result r( in_place_error ); + fv_called = 0; + + r &= fv; + + BOOST_TEST( r.has_error() ); + BOOST_TEST_EQ( fv_called, 0 ); + } + return boost::report_errors(); }