From 941754ed239de94d484ab4286d4d1a4ab89ec48d Mon Sep 17 00:00:00 2001 From: Peter Dimov Date: Wed, 26 Jan 2022 01:07:46 +0200 Subject: [PATCH] Add exception_ptr_test2.cpp --- test/Jamfile.v2 | 1 + test/exception_ptr_test2.cpp | 107 +++++++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+) create mode 100644 test/exception_ptr_test2.cpp diff --git a/test/Jamfile.v2 b/test/Jamfile.v2 index 90345bb..683b14b 100644 --- a/test/Jamfile.v2 +++ b/test/Jamfile.v2 @@ -41,6 +41,7 @@ run no_exceptions_test.cpp : : : off ; run errinfos_test.cpp : : : on ; run exception_ptr_test.cpp/BOOST_ENABLE_NON_INTRUSIVE_EXCEPTION_PTR ../../thread/src/tss_null.cpp /boost/exception /boost//thread : : : multi on : non_intrusive_exception_ptr_test ; run exception_ptr_test.cpp ../../thread/src/tss_null.cpp /boost//thread : : : multi on ; +run exception_ptr_test2.cpp ; lib visibility_test_lib : visibility_test_lib.cpp : hidden on ; run visibility_test.cpp visibility_test_lib/shared : : : hidden on ; diff --git a/test/exception_ptr_test2.cpp b/test/exception_ptr_test2.cpp new file mode 100644 index 0000000..6001d7e --- /dev/null +++ b/test/exception_ptr_test2.cpp @@ -0,0 +1,107 @@ +// Copyright 2022 Peter Dimov +// Distributed under the Boost Software License, Version 1.0. +// https://www.boost.org/LICENSE_1_0.txt + +#include + +#if defined(BOOST_NO_CXX11_HDR_EXCEPTION) + +#include +BOOST_PRAGMA_MESSAGE( "Skipping test because BOOST_NO_CXX11_HDR_EXCEPTION is defined" ) + +int main() {} + +#else + +#include +#include +#include +#include +#include +#include + +class my_exception +{ +}; + +class my_exception2: public std::exception +{ +}; + +class my_exception3: public std::bad_alloc +{ +}; + +class my_exception4: public std::exception, public boost::exception +{ +}; + +class my_exception5: public std::logic_error, public virtual boost::exception +{ +public: + + my_exception5(): std::logic_error( "" ) {} +}; + +int main() +{ + try + { + throw my_exception(); + } + catch( ... ) + { + boost::exception_ptr p = boost::current_exception(); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception ); + } + + try + { + throw my_exception2(); + } + catch( ... ) + { + boost::exception_ptr p = boost::current_exception(); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception2 ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), std::exception ); + } + + try + { + throw my_exception3(); + } + catch( ... ) + { + boost::exception_ptr p = boost::current_exception(); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception3 ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), std::bad_alloc ); + } + + try + { + throw my_exception4(); + } + catch( ... ) + { + boost::exception_ptr p = boost::current_exception(); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception4 ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), std::exception ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception ); + } + + try + { + throw my_exception5(); + } + catch( ... ) + { + boost::exception_ptr p = boost::current_exception(); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), my_exception5 ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), std::logic_error ); + BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception ); + } + + return boost::report_errors(); +} + +#endif