Boost logo

Boost :

Subject: [boost] [static_assert.hpp] Add BOOST_STATIC_ASSERT_MSG?
From: Beman Dawes (bdawes_at_[hidden])
Date: 2011-01-27 08:05:02


BOOST_STATIC_ASSERT predated C++0x static_assert, so it doesn't take
advantage of static_assert's message argument when static_assert is
available.

It would break too much code to change BOOST_STATIC_ASSERT, but we can
add a new macro that does take advantage of C++0x static_assert if
available.

After adding this to <boost/static_assert.hpp>:

+ #ifndef BOOST_NO_STATIC_ASSERT
+ # define BOOST_STATIC_ASSERT_MSG( B, Msg ) static_assert(B, Msg)
+ #else
+ # define BOOST_STATIC_ASSERT_MSG( B, Msg ) BOOST_STATIC_ASSERT( B )
+ #endif

This test program:

    #include <boost/static_assert.hpp>
    int main()
    {
      BOOST_STATIC_ASSERT_MSG( true, "should never fire" );
      BOOST_STATIC_ASSERT_MSG( false, "should always fire" );
      return 0;
    }

Compiling with VC++ 10, which supports static_assert, produced:

    temp.cpp(7) : error C2338: should always fire

Compiling with VC++ 9, which does not support static_assert, produced:

    temp.cpp(7) : error C2027: use of undefined type
'boost::STATIC_ASSERTION_FAILURE<x>'
        with
        [
            x=false
        ]

Comments?

--Beman


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk