// Copyright 2021 Peter Dimov. // 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 X { int a; }; struct Y { int a, b; }; struct E { std::string v; }; result fx0() { return {}; } result fx1() { return {{ 1 }}; } result fy0() { return {}; } result fy2() { return {{ 1, 2 }}; } result fxe0() { return {}; } result fxe1() { return {{ 1 }}; } result> fv0() { return {}; } result> fv1() { return {{ 1 }}; } result> fv2() { return {{ 1, 2 }}; } result fw0() { return {}; } int main() { { result r = fx0(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 0 ); } { result r = fx1(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 1 ); } { result r = fy0(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 0 ); BOOST_TEST_EQ( r->b, 0 ); } { result r = fy2(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 1 ); BOOST_TEST_EQ( r->b, 2 ); } { result r = fxe0(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 0 ); } { result r = fxe1(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->a, 1 ); } { result> r = fv0(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->size(), 0 ); } { result> r = fv1(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->size(), 1 ); BOOST_TEST_EQ( r->at(0), 1 ); } { result> r = fv2(); BOOST_TEST( r.has_value() ); BOOST_TEST_EQ( r->size(), 2 ); BOOST_TEST_EQ( r->at(0), 1 ); BOOST_TEST_EQ( r->at(1), 2 ); } { result r = fw0(); BOOST_TEST( r.has_value() ); BOOST_TEST( !r.has_error() ); } return boost::report_errors(); }