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(); }