Boost logo

Boost :

Subject: Re: [boost] Boost and exceptions
From: Agustín K-ballo Bergé (kaballo86_at_[hidden])
Date: 2012-06-24 00:44:54

On 24/06/2012 2:40, Robert Ramey wrote:
> Dave Abrahams wrote:
>> on Sat Jun 23 2012, "Robert Ramey" <> wrote:
>> Like some other things we've discussed, that's essentially a C++
>> language feature. You couldn't do a plain "throw e" either, without
>> causing the slice. The only way to propagate the contents of e is
>> "throw;", which is obviously incapable of enhancing the thrown
>> exception in any way.
>> The the more you pick at Emil's design and the more I check your
>> arguments, the more impressed I am with the care he took.
> My reaction is just the opposite
> even little things are a problem, The first thing I looked at was
> the documentation of BOOST_THROW_EXCEPTION(e).
> If this is invoked at the exception site it works. If it is invoked
> anywhere else - like a rethrow it doesn't. It's totally non-intuitive
> and a trap for users. There is no mention of this in the documentation.

This is the nature of C++ exceptions, it is no different for simply
`throw e;`. It may be non-intuitive for those not versed in C++
exceptions (they are far more complex than they appear), and its
certainly a trap for users but such trap comes from the standard and not
from Boost.Exception.

>> I may be
>> misunderstanding, but IIUC, the "problem" that he "fixed" was that his
>> change caused already-unsupported misuses of boost::throw_exception to
>> stop compiling. It's arguable that those misuses *should* be flagged
>> with compiler errors.
> the original boost::throw_exception was defined as:
> void throw_exception( std::exception const & e ); // user defined
> #else
> template<class E>
> void throw_exception(E const & e){
> throw(e);
> }
> #endif
> it's hard to see how one could even define "misuse" of this - much
> less detect it.

As it was previously stated, the misuses of boost:throw_exception where
those that didn't pass an exception derived from std::exception. They
would fail when BOOST_NO_EXCEPTIONS was defined, they fail all the time now.

Agustín K-ballo Bergé.-

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