From: Darren Cook (darren_at_[hidden])
Date: 2005-09-21 17:53:22


>>I don't get it. If you put BOOST_ASSERT( false ) anywhere, then you
>>effectively say "never exceute this code". Otherwise there is an error
>>in the assertion itself.
>
> Although that's a reasonable point of view, it is not supported by the
> current documentation, according to which executing BOOST_ASSERT(false) is
> well-defined and not an error. With some configurations it will invoke
> boost::assertion_failed(), which will pop up a message box offering to
> ignore, abort or break into the debugger.
>
> As I said in my previous post, I find the current behaviour quite useful.
> I sometimes use assert as a convenient way of saying, "issue a warning
> message, but only in debug builds."

Same here. I'm using John Torjo's SMART_ASSERT and I have lines like:
  SMART_ASSERT(false)(a)(b)(c).msg("Surely we never reach here?");

I.e. if it does reach here I can see the values of a,b and c and can
immediately see if it is a use case I never thought of, or a program bug.

But instead of adding BOOST_ASSUME() I'd prefer the use of _assume() in
BOOST_ASSERT be controlled by a define and off by default. It is a
relatively minor optimization so could just be enabled by those who need
the speed and know their code does not do ASSERT(false).

Darren