Boost logo

Boost :

From: Emil Dotchevski (emil_at_[hidden])
Date: 2007-10-15 23:22:23

> Support for asynchronous exception handling is also very important, but is
> missing from Exception. Can exception::pimpl remember the user exception type
> (CRTP), for the sake of clone/raise?

Cloning exceptions is out of the scope of Boost Exception. See

> The need to preregister tag types is slightly annoying. The need to specify the
> data-type with the tag is especially annoying.
> Why not use accompanying text as a key to retrieve values?

The rationale for the tag type registration is to provide compile-time
type safety, which is also why the value type is required at the time
of the registration.

If there is a consensus that compile-time type safety is less
important than the convenience of string-based identification, the
interface for adding data to exceptions can be changed:

catch( boost::exception & x )

Retrieval would then look like this:

catch( boost::exception & x )
    if( int const * ec = x.get<int>("errno") )
        //ec points the int at "errno", or...
        // null if x has no such int.

In my opinion, compile-time type safety is especially important in the
case of boost::exception.

It is true that type inconsistencies are not the only thing that can
go wrong, but the error handling paths of any program are the hardest
to test; catching any error-handling bug at compile time is very

> try
> {
> int value=5;
> throw exception() << "Something went wrong. value=" << value;
> }

This approach is inappropriate in general, because the actual
formatting of the text is locale-specific and is best done when
handling the exception, not when throwing.

Emil Dotchevski

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