throw_exception_test.cpp
来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 149 行
CPP
149 行
//Copyright (c) 2006-2008 Emil Dotchevski and Reverge Studios, Inc.//Distributed under the Boost Software License, Version 1.0. (See accompanying//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)#include "helper2.hpp"#include <boost/exception/get_error_info.hpp>#include <boost/exception/info.hpp>#include <boost/exception_ptr.hpp>#include <boost/detail/lightweight_test.hpp>typedef boost::error_info<struct tag_test_int,int> test_data;structexception1: std::exception { };structexception2: std::exception, boost::exception { };voidboost_throw_exception_test() { try { BOOST_THROW_EXCEPTION(exception1()); BOOST_TEST(false); } catch( boost::exception & x ) { boost::shared_ptr<char const * const> file=boost::get_error_info<boost::throw_function>(x); boost::shared_ptr<char const * const> function=boost::get_error_info<boost::throw_file>(x); boost::shared_ptr<int const> line=boost::get_error_info<boost::throw_line>(x); BOOST_TEST( file && *file ); BOOST_TEST( function && *function ); BOOST_TEST( line && *line==32 ); } catch( ... ) { BOOST_TEST(false); } try { BOOST_THROW_EXCEPTION(exception2() << test_data(42)); BOOST_TEST(false); } catch( boost::exception & x ) { boost::shared_ptr<char const * const> file=boost::get_error_info<boost::throw_function>(x); boost::shared_ptr<char const * const> function=boost::get_error_info<boost::throw_file>(x); boost::shared_ptr<int const> line=boost::get_error_info<boost::throw_line>(x); boost::shared_ptr<int const> data=boost::get_error_info<test_data>(x); BOOST_TEST( file && *file ); BOOST_TEST( function && *function ); BOOST_TEST( line && *line==52 ); BOOST_TEST( data && *data==42 ); } catch( ... ) { BOOST_TEST(false); } }voidthrow_fwd( void (*thrower)(int) ) { try { thrower(42); } catch( boost::exception & x ) { x << test_data(42); throw; } }template <class T>voidtester() { try { throw_fwd( &boost::exception_test::throw_test_exception<T> ); BOOST_ASSERT(false); } catch( ... ) { boost::exception_ptr p = boost::current_exception(); try { rethrow_exception(p); BOOST_TEST(false); } catch( T & y ) {#ifdef BOOST_NO_RTTI try { throw; } catch( boost::exception & y ) {#endif BOOST_TEST(boost::get_error_info<test_data>(y)); if( boost::shared_ptr<int const> d=boost::get_error_info<test_data>(y) ) BOOST_TEST(*d==42);#ifdef BOOST_NO_RTTI } catch( ... ) { BOOST_TEST(false); }#endif BOOST_TEST(y.x_==42); } catch( ... ) { BOOST_TEST(false); } } }intmain() { boost_throw_exception_test(); tester<boost::exception_test::derives_boost_exception>(); tester<boost::exception_test::derives_boost_exception_virtually>(); tester<boost::exception_test::derives_std_exception>(); return boost::report_errors(); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?