diff --git a/test/throw_exception_test2.cpp b/test/throw_exception_test2.cpp index c9d35de..30e6a37 100644 --- a/test/throw_exception_test2.cpp +++ b/test/throw_exception_test2.cpp @@ -16,13 +16,19 @@ class my_exception2: public std::exception, public boost::exception { }; +class my_exception3: public std::exception, public virtual boost::exception +{ +}; + int main() { BOOST_TEST_THROWS( boost::throw_exception( my_exception() ), boost::exception ); BOOST_TEST_THROWS( boost::throw_exception( my_exception2() ), boost::exception ); + BOOST_TEST_THROWS( boost::throw_exception( my_exception3() ), boost::exception ); BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception() ), boost::exception ); BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception2() ), boost::exception ); + BOOST_TEST_THROWS( BOOST_THROW_EXCEPTION( my_exception3() ), boost::exception ); return boost::report_errors(); } diff --git a/test/throw_exception_test3.cpp b/test/throw_exception_test3.cpp index 7f20420..5a26f36 100644 --- a/test/throw_exception_test3.cpp +++ b/test/throw_exception_test3.cpp @@ -17,6 +17,10 @@ class my_exception2: public std::exception, public boost::exception { }; +class my_exception3: public std::exception, public virtual boost::exception +{ +}; + int main() { try @@ -43,6 +47,18 @@ int main() BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception ); } + try + { + boost::throw_exception( 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 ), boost::exception ); + } + try { BOOST_THROW_EXCEPTION( my_exception() ); @@ -67,5 +83,17 @@ int main() BOOST_TEST_THROWS( boost::rethrow_exception( p ), boost::exception ); } + try + { + BOOST_THROW_EXCEPTION( 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 ), boost::exception ); + } + return boost::report_errors(); } diff --git a/test/throw_exception_test4.cpp b/test/throw_exception_test4.cpp index 07cd4ae..1a0eb81 100644 --- a/test/throw_exception_test4.cpp +++ b/test/throw_exception_test4.cpp @@ -17,6 +17,10 @@ class my_exception2: public std::exception, public boost::exception { }; +class my_exception3: public std::exception, public virtual boost::exception +{ +}; + int main() { try @@ -36,7 +40,7 @@ int main() int const * line = boost::get_error_info( x ); BOOST_TEST( line != 0 ); - BOOST_TEST_EQ( *line, 24 ); + BOOST_TEST_EQ( *line, 28 ); } { @@ -64,7 +68,35 @@ int main() int const * line = boost::get_error_info( x ); BOOST_TEST( line != 0 ); - BOOST_TEST_EQ( *line, 52 ); + BOOST_TEST_EQ( *line, 56 ); + } + + { + char const * const * function = boost::get_error_info( x ); + + BOOST_TEST( function != 0 ); + BOOST_TEST_CSTR_EQ( *function, BOOST_CURRENT_FUNCTION ); + } + } + + try + { + BOOST_THROW_EXCEPTION( my_exception3() ); + } + catch( boost::exception const & x ) + { + { + char const * const * file = boost::get_error_info( x ); + + BOOST_TEST( file != 0 ); + BOOST_TEST_CSTR_EQ( *file, __FILE__ ); + } + + { + int const * line = boost::get_error_info( x ); + + BOOST_TEST( line != 0 ); + BOOST_TEST_EQ( *line, 84 ); } {