-fno-exceptions documentation

Peter Dimov pdimov@mmltd.net
Tue Dec 6 10:53:00 GMT 2005


Howard Hinnant wrote:

> So for  http://gcc.gnu.org/ml/gcc/2004-10/msg00099.html, my knee-jerk
> reaction is to say "recompile libstdc++" with that setting if you
> need it to not thrown an exception".  That being said, my response is
> probably not what the customer wanted either.  He wanted op new to
> return 0 on failure, not abort.  In general it would be nice to give
> the customer the ability to customize error handling when exceptions
> are turned off.  For example instead of calling abort() in an
> exceptional situation we might instead call a weak-linked
> __gcc_handle_error(const char* msg).  The customer then might
> override this function, inspect the message, and do something that
> makes sense for them.  The default implementation could just call
> abort(), maybe after printing out the msg.  This still requires a
> recompile of libstdc++, but at least it gives the customer another
> option.  Here's how it might look:
>
> operator new (std::size_t sz) throw (std::bad_alloc)
> {
>  ...
>       if (! handler)
> #ifdef __EXCEPTIONS
> throw bad_alloc();
> #else
>         std::__gcc_handle_error("bad_alloc");
> #endif
>    ...
> }

This is what I do in Boost:

void * operator new (std::size_t sz) throw (std::bad_alloc)
{
    if( !handler )
    {
        boost::throw_exception( std::bad_alloc() );
        return 0;
    }
}

The default boost::throw_exception( x ) throws x, but when exceptions are 
off, is left undefined for the user to supply an appropriate implementation. 
In libstdc++, it could have a weak definition that aborts by default.

http://www.boost.org/libs/utility/throw_exception.html



More information about the Libstdc++ mailing list