Boost logo

Boost :

Subject: [boost] [assert] static_assert envy
From: Beman Dawes (bdawes_at_[hidden])
Date: 2011-01-17 10:06:53

Whenever I write a BOOST_ASSERT macro, I'm envious of C++0x static_assert
because of its ability to supply a clear error message. I'd really like to
be able to write a variant of BOOST_ASSERT like this:

#include <boost/assert.hpp>
int main()
  BOOST_EXTENDED_ASSERT(true, "This will not assert");
  BOOST_EXTENDED_ASSERT(false, "This will assert");
  return 0;

And then get debug mode output like this:

***** Internal Program Error - Assertion Failed *****
extended_assert_test.cpp(6): error in int main(void): This will assert

Adding the code below at the end of <boost/assert.hpp> will do just that. It
isn't totally ready for prime time, but it would be nice to find out if
others would like something similar added to<boost/assert.hpp>.


// experimental code

#ifndef NDEBUG

# include <iostream>
# include <cstdlib>
# include <boost/current_function.hpp>

  namespace boost { namespace assertion { namespace detail {
  inline void extended_assert_failed(char const * msg, char const *
    char const * file, long line)
    std::cerr << "***** Internal Program Error - Assertion Failed *****\n";
    std::cerr << file << '(' << line << "): error in " << function << ": "
<< msg << std::endl;
  }}} // boost::assertion::detail


# define BOOST_EXTENDED_ASSERT(expr, msg) \
    ((expr)? ((void)0): ::boost::assertion::detail::extended_assert_failed\
      (msg, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__))
# define BOOST_EXTENDED_ASSERT(expr, msg)

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