
On Sat, 24 Jun 2006 14:17:37 +0200, Gennaro Prota <gennaro_prota@yahoo.com> wrote:
Tricky question. IMHO it is undefined behavior. When BOOST_ASSERT falls back to the standard assert it really depends on the underlying library. C90 does not require that assert works with expressions having non-int type. In C99 it shall work for any scalar expression (which anyway "out of range" is not; it has array type).
We could perhaps protect against this kinds of things by using a static_cast in assert.hpp (probably documenting that)
I'd like to fix this problem. But I guess I should better explain that "perhaps". The static_cast would prevent using, for instance BOOST_STATIC_ASSERT("foo"); That's fine as long as we want the user to "perceive" the problem and be forced to write, for instance: BOOST_STATIC_ASSERT("foo" != 0 /*or nullptr*/); Otherwise the following choices come to mind: a) # define BOOST_ASSERT(expr) assert(0 != (expr)) b) # define BOOST_ASSERT(expr) assert(!!(expr)) c) # define BOOST_ASSERT(expr) assert("BOOST_LIBRARIES:" && (expr)) d) # define BOOST_ASSERT(expr) assert(!"BOOST_LIBRARIES:" || (expr)) The last one is for those who find "||" to be a better "separator" than "&&" :-o Looking forward for consensus and patching :) -- [ Gennaro Prota, C++ developer for hire ] [ resume: available on request ]