Boost logo

Boost :

From: David Abrahams (dave_at_[hidden])
Date: 2007-02-25 10:50:20

I just did a sweep through all our code and found and fixed lots of
issues related to the use of BOOST_TEST macro, all of which boiled
down to the fact that it is possible to use it and never call
boost::report_errors(). In several places it had been used as a
drop-in replacement for assert(), which it isn't because failure to
call report_errors will allow test failures to pass silently. It was
also used in a couple places in lieu of BOOST_CHECK, i.e. the author
obviously was trying to use Boost.Test but got the wrong macro name.

I suggest we do something to make it harder to make that mistake. The
only approach I can think of is to create an object at namespace scope
whose destructor checks to see if we're exiting with a nonzero error
count and without having called report_errors. Or maybe it should
just do something like:

     namespace boost { namespace detail {
        template <bool = false>
        struct lightweight_error_reporter
                if (boost::report_errors())

            static lightweight_error_reporter instance;

Whether abort() or exit(1) or throw xxx is more appropriate there I
don't know (haven't done the research).


Dave Abrahams
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at