mirror of
https://github.com/boostorg/system.git
synced 2025-08-02 22:04:28 +02:00
Add a converting constructor to result<void>
This commit is contained in:
@@ -538,6 +538,23 @@ public:
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// converting
|
||||||
|
template<class E2, class En = typename std::enable_if<
|
||||||
|
std::is_convertible<E2, E>::value
|
||||||
|
>::type>
|
||||||
|
BOOST_CXX14_CONSTEXPR result( result<void, E2> const& r2 )
|
||||||
|
noexcept(
|
||||||
|
std::is_nothrow_constructible<E, E2>::value &&
|
||||||
|
std::is_nothrow_default_constructible<E2>::value &&
|
||||||
|
std::is_nothrow_copy_constructible<E2>::value )
|
||||||
|
: v_( in_place_error, r2.error() )
|
||||||
|
{
|
||||||
|
if( r2 )
|
||||||
|
{
|
||||||
|
this->emplace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// queries
|
// queries
|
||||||
|
|
||||||
constexpr bool has_value() const noexcept
|
constexpr bool has_value() const noexcept
|
||||||
|
@@ -183,6 +183,67 @@ int main()
|
|||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, int> r;
|
||||||
|
result<void, X> r2 = r;
|
||||||
|
|
||||||
|
BOOST_TEST( r2 );
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, int> const r;
|
||||||
|
result<void, X> r2 = r;
|
||||||
|
|
||||||
|
BOOST_TEST( r2 );
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, X> r2 = result<void, int>();
|
||||||
|
|
||||||
|
BOOST_TEST( r2 );
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, int> r( 5 );
|
||||||
|
result<void, X> r2 = r;
|
||||||
|
|
||||||
|
BOOST_TEST( !r2 );
|
||||||
|
BOOST_TEST_EQ( r2.error(), X(5) );
|
||||||
|
BOOST_TEST_EQ( X::instances, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, int> const r( 6 );
|
||||||
|
result<void, X> r2 = r;
|
||||||
|
|
||||||
|
BOOST_TEST( !r2 );
|
||||||
|
BOOST_TEST_EQ( r2.error(), X(6) );
|
||||||
|
BOOST_TEST_EQ( X::instances, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
result<void, X> r2 = result<void, int>( 7 );
|
||||||
|
|
||||||
|
BOOST_TEST( !r2 );
|
||||||
|
BOOST_TEST_EQ( r2.error(), X(7) );
|
||||||
|
BOOST_TEST_EQ( X::instances, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_TEST_EQ( X::instances, 0 );
|
||||||
|
|
||||||
|
//
|
||||||
|
|
||||||
{
|
{
|
||||||
int x = 5;
|
int x = 5;
|
||||||
|
|
||||||
@@ -225,6 +286,9 @@ int main()
|
|||||||
BOOST_TEST_TRAIT_FALSE((std::is_constructible<result<int, void*>, result<int, int>>));
|
BOOST_TEST_TRAIT_FALSE((std::is_constructible<result<int, void*>, result<int, int>>));
|
||||||
BOOST_TEST_TRAIT_FALSE((std::is_convertible<result<int, int>, result<int, void*>>));
|
BOOST_TEST_TRAIT_FALSE((std::is_convertible<result<int, int>, result<int, void*>>));
|
||||||
|
|
||||||
|
BOOST_TEST_TRAIT_FALSE((std::is_constructible<result<void, void*>, result<void, int>>));
|
||||||
|
BOOST_TEST_TRAIT_FALSE((std::is_convertible<result<void, int>, result<void, void*>>));
|
||||||
|
|
||||||
BOOST_TEST_TRAIT_TRUE((std::is_constructible<result<int const&>, result<int&>>));
|
BOOST_TEST_TRAIT_TRUE((std::is_constructible<result<int const&>, result<int&>>));
|
||||||
BOOST_TEST_TRAIT_TRUE((std::is_convertible<result<int&>, result<int const&>>));
|
BOOST_TEST_TRAIT_TRUE((std::is_convertible<result<int&>, result<int const&>>));
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user