
Le 29/06/12 09:17, Emil Dotchevski a écrit :
On Thu, Jun 28, 2012 at 11:53 PM, Vicente J. Botet Escriba< vicente.botet@wanadoo.fr> wrote:
Does the use of BOOST_THROW_EXCEPTION implies the use of exception_ptr?
BOOST_THROW_EXCEPTION simply captures information about the throw location, then calls boost::throw_exception.
I see that template<class E> BOOST_ATTRIBUTE_NORETURN inline void throw_exception( E const & e ) { //All boost exceptions are required to derive from std::exception, //to ensure compatibility with BOOST_NO_EXCEPTIONS. throw_exception_assert_compatibility(e); #ifndef BOOST_EXCEPTION_DISABLE throw enable_current_exception(enable_error_info(e)); #else throw e; #endif } From the documentation, enable_current_exception let me think that we not only BOOST_THROW_EXCEPTION but boost::throw_exception immplies the use of exception_ptr, isn't it? Am I missing something evident? Best, Vicente enable_current_exception #include <boost/exception/enable_current_exception.hpp> namespace boost { template<class T> ---unspecified---enable_current_exception( T const& e ); } Requirements: * T must be a class with an accessible no-throw copy constructor. * If T has any virtual base types, those types must have an accessible default constructor. Returns: An object of /unspecified/ type which derives publicly from T. That is, the returned object can be intercepted by a catch(T &). Description: This function is designed to be used directly in a throw-expression to enable the exception_ptr support in Boost Exception. For example: class my_exception: public std::exception { }; .... throw boost::enable_current_exception(my_exception()); Unless enable_current_exception is called at the time an exception object is used in a throw-expression, an attempt to copy it using current_exception may return an exception_ptr which refers to an instance of unknown_exception. See current_exception for details. Note: Instead of using the throw keyword directly, it is preferable to call boost::throw_exception. This is guaranteed to throw an exception that derives from boost::exception and supports the exception_ptr functionality.