"new" statement and -fno-exceptions

Mike Stump mrs@apple.com
Mon Oct 4 23:48:00 GMT 2004


On Oct 4, 2004, at 6:37 AM, Paul Koning wrote:
> We recently ran into some problems with an application being killed by
> unhandled exception processing -- even though it's compiled
> -fno-exceptions.

Ok.

> It turns out that a "new" statement will throw an exception on alloc
> failure

Yes, it _is_ documented to throw on failure.  If you don't want it to 
throw either never fail to allocate, or call one that doesn't throw, as 
documented.  See nothrow_t in the standard.

> (if the "nothrow" variant isn't used) no matter whether
> -fno-exceptions is used or not.  This is somewhat surprising;

Live and learn I guess.  Next, I suppose you'll be surprised that when 
you use another C++ library (other than libstdc++) that throws when it 
is documented to throw, even though you compiled your client code with 
-fno-exceptions.

-fno-exceptions doesn't change code you call, only your code that you 
compile.  In your case, you call a routine that throws, and it does; 
the solution is to stop calling routines that throw.

This is all as designed.



More information about the Gcc mailing list