Boost logo

Boost :

From: Ivan Vecerina (INVALID_please_use_contact_form_at_[hidden])
Date: 2004-09-19 02:15:36

I've noticed discussions about this a couple of years ago.
For assert-style macros that include multiple statements,
a common idiom is to enclose the statements in a do{...}while(0)
dummy loop. This makes the macro behave like a single statement.

A problem with some compilers (notably VC7.x) is that this
triggers a warning (C4127: conditional expression is constant).

The workaround adopted by boost is to automatically disable
this warning -- which however can be legitimate and useful
in user code.

I think I have found a better 'always-false' condition which
does not trigger a warning, and works at least in VC7.1:
    do{ }while(__LINE__==-1)

Do you see a problem with this approach?
Could this approach be used to stop disabling warning 4127
when boost is compiled?
Do other compilers have similar warnings and workarounds?

Should a boost macro that expands to a warning-free always-false
(or always-true) compile-time constant be considered?
This would also allow statements such as BOOST_ASSERT(BOOST_FALSE),
while(BOOST_TRUE), or do{...}while(BOOST_FALSE) to compile
without warning...


-- <- email contact form

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