diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 00bfd49..58ede82 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -154,7 +154,10 @@ boost_test(TYPE run SOURCES result_eq.cpp) boost_test(TYPE run SOURCES result_range_for.cpp) boost_test(TYPE run SOURCES result_value_construct2.cpp) boost_test(TYPE run SOURCES result_error_construct2.cpp) +boost_test(TYPE run SOURCES result_errc_construct.cpp) boost_test(TYPE run SOURCES result_convert_construct.cpp) boost_test(TYPE run SOURCES result_typedefs.cpp) boost_test(TYPE run SOURCES result_value_construct3.cpp) boost_test(TYPE run SOURCES result_error_construct3.cpp) +boost_test(TYPE run SOURCES result_emplace.cpp) +boost_test(TYPE run SOURCES result_error_construct4.cpp) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 0ca52cb..4da60c4 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -190,3 +190,4 @@ run result_typedefs.cpp : : : $(CPP11) ; run result_value_construct3.cpp : : : $(CPP11) ; run result_error_construct3.cpp : : : $(CPP11) ; run result_emplace.cpp : : : $(CPP11) ; +run result_error_construct4.cpp : : : $(CPP11) ; diff --git a/test/result_error_construct4.cpp b/test/result_error_construct4.cpp new file mode 100644 index 0000000..d596813 --- /dev/null +++ b/test/result_error_construct4.cpp @@ -0,0 +1,49 @@ +// Copyright 2023 Peter Dimov. +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include +#include + +using namespace boost::system; + +// Eigen::Matrix4d has an explicit templated constructor +// https://github.com/boostorg/system/issues/103 +// https://github.com/boostorg/json/issues/843 + +struct X +{ + X() {} + template explicit X( T const& ) {} +}; + +int main() +{ + { + auto ec = make_error_code( errc::invalid_argument ); + + result r = ec; + + BOOST_TEST( !r.has_value() ); + BOOST_TEST( r.has_error() ); + + BOOST_TEST_EQ( r.error(), ec ); + } + +#if defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) + + { + auto ec = make_error_code( std::errc::invalid_argument ); + + result r = ec; + + BOOST_TEST( !r.has_value() ); + BOOST_TEST( r.has_error() ); + + BOOST_TEST_EQ( r.error(), ec ); + } + +#endif + + return boost::report_errors(); +}