
On Wed, 05 Jul 2006 18:05:20 +0200, Gennaro Prota <gennaro_prota@yahoo.com> wrote:
On Wed, 5 Jul 2006 18:20:57 +0300, "Peter Dimov" <pdimov@mmltd.net> wrote:
BOOST_ASSERT wasn't supposed to be an improvement over assert, interface-wise. In my opinion, invalid assertions should be fixed; we should not alter BOOST_ASSERT to make them work.
I agree. The point, anyhow, was avoiding those invalid assertions. What I proposed above make them silently work as the user expects without invoking undefined behavior. The alternative is *catching* the error. If we can do the latter then it's even better to me.
Just to spell out what I have in mind and make a couple of further questions (:-s): namespace boost { namespace detail { namespace assert_ { char valid_assert_expression(int); void valid_assert_expression(...); }}} #define BOOST_ASSERT(expr) \ ( \ (void)sizeof boost::detail::assert_ \ ::valid_assert_expression(expr) \ , assert(expr) \ ) /**/ Now I wonder: a) should we leave the test when BOOST_DISABLE_ASSERTS is defined too? b) why the last parameter of assertion_failed() is not unsigned long? -- [ Gennaro Prota, C++ developer for hire ] [ resume: available on request ]