3

在 1.43 boost 上,似乎 BOOST_STATIC_ASSERT 只允许放置一个布尔值,是否有一些替代方法可以让我在编译错误时也显示一条消息?

4

3 回答 3

5

MPL 有BOOST_MPL_ASSERT_MSG. 例如使用 GCC 4.2。有了这个:

BOOST_MPL_ASSERT_MSG(false, THIS_DOESNT_WORK, (void));

... 结果是:

/path/to/file.cpp:42: error: no matching function for call to 
'assertion_failed(mpl_::failed************ (function()::THIS_DOESNT_WORK::************)())'
于 2010-07-13T21:39:39.180 回答
3

您是否尝试过类似的方法:

BOOST_STATIC_ASSERT(sizeof(long) == 64 && "Must have 64-bit long!")

如果你的编译器支持 C++0x static_assert,你可以这样做:

static_assert(sizeof(long) == 64, "Must have 64-bit long!")
于 2010-07-13T21:42:59.520 回答
0

Boost 1.47 及更高版本的支持BOOST_STATIC_ASSERT_MSG。用法:

#include <boost/static_assert.hpp>
BOOST_STATIC_ASSERT_MSG(condition, msg)

如果 C++11 可用,或者编译器支持static_assert(),则错误消息将为msg字符串。否则宏被视为BOOST_STATIC_ASSERT(condition)

于 2016-04-28T08:25:30.460 回答