From 5386c7359daa0582c2659922cd0bb5935d086f94 Mon Sep 17 00:00:00 2001 From: Emil Dotchevski Date: Thu, 18 Feb 2010 05:58:00 +0000 Subject: [PATCH] Fixing problems found by the vacpp test. [SVN r59743] --- include/boost/exception/exception.hpp | 84 ++++++++++++++------------- include/boost/throw_exception.hpp | 24 ++++++-- 2 files changed, 64 insertions(+), 44 deletions(-) diff --git a/include/boost/exception/exception.hpp b/include/boost/exception/exception.hpp index bd86b76..82ff23a 100644 --- a/include/boost/exception/exception.hpp +++ b/include/boost/exception/exception.hpp @@ -132,18 +132,6 @@ boost } }; - template - E const & operator<<( E const &, error_info const & ); - - template - E const & operator<<( E const &, throw_function const & ); - - template - E const & operator<<( E const &, throw_file const & ); - - template - E const & operator<<( E const &, throw_line const & ); - class exception; template @@ -187,6 +175,18 @@ boost char const * get_diagnostic_information( exception const &, char const * ); void copy_boost_exception( exception *, exception const * ); + + template + E const & set_info( E const &, error_info const & ); + + template + E const & set_info( E const &, throw_function const & ); + + template + E const & set_info( E const &, throw_file const & ); + + template + E const & set_info( E const &, throw_line const & ); } class @@ -225,18 +225,18 @@ boost private: template - friend E const & operator<<( E const &, throw_function const & ); + friend E const & exception_detail::set_info( E const &, throw_function const & ); template - friend E const & operator<<( E const &, throw_file const & ); + friend E const & exception_detail::set_info( E const &, throw_file const & ); template - friend E const & operator<<( E const &, throw_line const & ); - - friend char const * exception_detail::get_diagnostic_information( exception const &, char const * ); + friend E const & exception_detail::set_info( E const &, throw_line const & ); template - friend E const & operator<<( E const &, error_info const & ); + friend E const & exception_detail::set_info( E const &, error_info const & ); + + friend char const * exception_detail::get_diagnostic_information( exception const &, char const * ); template friend struct exception_detail::get_info; @@ -257,28 +257,32 @@ boost { } - template - E const & - operator<<( E const & x, throw_function const & y ) + namespace + exception_detail { - x.throw_function_=y.v_; - return x; - } + template + E const & + set_info( E const & x, throw_function const & y ) + { + x.throw_function_=y.v_; + return x; + } - template - E const & - operator<<( E const & x, throw_file const & y ) - { - x.throw_file_=y.v_; - return x; - } + template + E const & + set_info( E const & x, throw_file const & y ) + { + x.throw_file_=y.v_; + return x; + } - template - E const & - operator<<( E const & x, throw_line const & y ) - { - x.throw_line_=y.v_; - return x; + template + E const & + set_info( E const & x, throw_line const & y ) + { + x.throw_line_=y.v_; + return x; + } } //////////////////////////////////////////////////////////////////////// @@ -304,10 +308,10 @@ boost }; struct large_size { char c[256]; }; - large_size dispatch( exception * ); + large_size dispatch_boost_exception( exception const * ); struct small_size { }; - small_size dispatch( void * ); + small_size dispatch_boost_exception( void const * ); template struct enable_error_info_helper; @@ -330,7 +334,7 @@ boost struct enable_error_info_return_type { - typedef typename enable_error_info_helper::type type; + typedef typename enable_error_info_helper::type type; }; } diff --git a/include/boost/throw_exception.hpp b/include/boost/throw_exception.hpp index 656b8de..1d018c5 100644 --- a/include/boost/throw_exception.hpp +++ b/include/boost/throw_exception.hpp @@ -36,16 +36,32 @@ #if !defined( BOOST_EXCEPTION_DISABLE ) # include # include -# define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(::boost::enable_error_info(x) <<\ - ::boost::throw_function(BOOST_CURRENT_FUNCTION) <<\ - ::boost::throw_file(__FILE__) <<\ - ::boost::throw_line(__LINE__)) +# define BOOST_THROW_EXCEPTION(x) ::boost::exception_detail::throw_exception_(x,BOOST_CURRENT_FUNCTION,__FILE__,__LINE__) #else # define BOOST_THROW_EXCEPTION(x) ::boost::throw_exception(x) #endif namespace boost { +#if !defined( BOOST_EXCEPTION_DISABLE ) + namespace + exception_detail + { + template + void + throw_exception_( E const & x, char const * current_function, char const * file, int line ) + { + throw_exception( + set_info( + set_info( + set_info( + enable_error_info(x), + throw_function(current_function)), + throw_file(file)), + throw_line(line))); + } + } +#endif #ifdef BOOST_NO_EXCEPTIONS