Boost logo

Boost :

Subject: Re: [boost] Policy proposal: All user-visible exceptions should be thrown through BOOST_THROW_EXCEPTION
From: Vicente J. Botet Escriba (vicente.botet_at_[hidden])
Date: 2012-06-29 12:44:43

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_at_[hidden]> 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 enable_current_exception(enable_error_info(e));
     throw e;

 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?



#include <boost/exception/enable_current_exception.hpp>

     template<class T>
     ---unspecified---enable_current_exception( T const& e );


  * 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.


An object of /unspecified/ type which derives publicly from T. That is,
the returned object can be intercepted by a catch(T &).


This function is designed to be used directly in a throw-expression to
enable the exception_ptr support in Boost Exception. For example:

     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.


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.

Boost list run by bdawes at, gregod at, cpdaniel at, john at