diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 122ade4..c15ed12 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -118,6 +118,8 @@ boost_test(TYPE run SOURCES std_interop_test12.cpp) boost_test(TYPE run SOURCES errc_test4.cpp) +boost_test(TYPE run SOURCES std_interop_test13.cpp) + # result set(BOOST_TEST_COMPILE_FEATURES cxx_std_11) diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 6dbe139..bb30ad8 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -142,6 +142,8 @@ run std_interop_test12.cpp ; run errc_test4.cpp ; +run std_interop_test13.cpp ; + # result import ../../config/checks/config : requires ; diff --git a/test/std_interop_test13.cpp b/test/std_interop_test13.cpp new file mode 100644 index 0000000..9f514b9 --- /dev/null +++ b/test/std_interop_test13.cpp @@ -0,0 +1,77 @@ +// Copyright 2021, 2022 Peter Dimov. +// Distributed under the Boost Software License, Version 1.0. +// http://www.boost.org/LICENSE_1_0.txt + +#include +#include +#include +#include +#include +#include + +#if !defined(BOOST_SYSTEM_HAS_SYSTEM_ERROR) + +BOOST_PRAGMA_MESSAGE( "BOOST_SYSTEM_HAS_SYSTEM_ERROR not defined, test will be skipped" ) +int main() {} + +#else + +#include + +class my_category_impl: public std::error_category +{ +public: + + char const* name() const BOOST_NOEXCEPT + { + return "mycat"; + } + + std::string message( int /*ev*/ ) const + { + return "Unknown error"; + } +}; + +std::error_category const& my_category() +{ + static my_category_impl mycat; + return mycat; +} + +int main() +{ + { + std::error_code e1( 5, boost::system::system_category() ); + boost::system::error_code e2( e1 ); + std::error_code e3( e2 ); + + BOOST_TEST_EQ( e1, e3 ); + BOOST_TEST_EQ( e1.value(), e3.value() ); + BOOST_TEST_EQ( &e1.category(), &e3.category() ); + } + + { + std::error_code e1( 5, boost::system::generic_category() ); + boost::system::error_code e2( e1 ); + std::error_code e3( e2 ); + + BOOST_TEST_EQ( e1, e3 ); + BOOST_TEST_EQ( e1.value(), e3.value() ); + BOOST_TEST_EQ( &e1.category(), &e3.category() ); + } + + { + std::error_code e1( 5, my_category() ); + boost::system::error_code e2( e1 ); + std::error_code e3( e2 ); + + BOOST_TEST_EQ( e1, e3 ); + BOOST_TEST_EQ( e1.value(), e3.value() ); + BOOST_TEST_EQ( &e1.category(), &e3.category() ); + } + + return boost::report_errors(); +} + +#endif