
Library authors often use the pattern: void foo(void) { unsigned res = SomeFuncWithSideEffects(); BOOST_ASSERT(res); } This causes a lot of noise on some compilers (e.g. gcc) about unused variables when building in release mode. I suggest a macro void foo(void) { BOOST_ASSERT_DEF( unsigned res = ) SomeFuncWithSideEffects(); BOOST_ASSERT(res); } to get rid of these warnings, in cases where the variable is only used for assertion. In boostroot/boost/assert.hpp add #if defined(BOOST_DISABLE_ASSERTS) # define BOOST_ASSERT_DEF( tokens ) #elif defined(BOOST_ENABLE_ASSERT_HANDLER) # define BOOST_ASSERT_DEF( tokens ) tokens #else # if defined(NDEBUG) # define BOOST_ASSERT_DEF( tokens ) # else # define BOOST_ASSERT_DEF( tokens ) tokens # endif #endif Comments welcome! In particular if anyone thinks that the above pattern can or should better be avoided at all, I would be glad to learn how this can be done. Roland aka speedsnail