Boost logo

Boost Users :

From: Nat Goodspeed (nat_at_[hidden])
Date: 2008-07-09 08:38:13


Michiel Helvensteijn wrote:

> I've changed BOOST_ASSERT for my personal use:
>
> #define BOOST_ASSERT(expr) { \
> if (!(expr)) { \
> ::boost::assertion_failed(#expr, BOOST_CURRENT_FUNCTION, \
> __FILE__, __LINE__); \
> abort(); \
> } \
> }
>
> there may have been a reason to
> push everything into the ternary operator that I am not aware of.

In general, I think the major issue with changing macro contents from a
simple statement to a compound statement is that it can have peculiar
effects on code surrounding macro invocations. For instance (contrived
example):

     if (! data.valid())
         BOOST_ASSERT(false);
     else
     {
         // ...process 'data'...
     }

The classic workaround is to wrap the compound statement in a no-op 'do'
statement:

#define MACRO(stuff) do /* intended macro contents */ while (0)

If there are special constraints unique to BOOST_ASSERT, I don't know them.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net