From: Ian McCulloch (ianmcc_at_[hidden])
Date: 2005-10-10 15:12:56


Eric Niebler wrote:

>
> Rob Stewart wrote:
>>
>> That way a debug build asserts, which likely gets a core dump,
>> and a release build throws an exception. If the exception is a
>> type that is never caught in the code except in main(), then
>> main() can report the problem and exit. That gives a clean exit
>> with a diagnostic in release builds, while giving the opportunity
>> for post mortem debugging in debug builds.
>
>
> No. An assert should not throw, not in release mode, not ever. If an
> assert fails, your program is now in an invalid state. Throwing an
> exception potentially causes lots of code to execute that is potentially
> dangerous. The correct thing to do is dump core immediately. Maybe try
> to save user data into into a separate location, taking care not to
> overwrite the last-known-good with potentially corrupt data, but that's
> it. Assert != exception.

Fine. But why not use an exception as part of the mechanism for saving some
(hopefully) recoverable data?