2013-06-18 133 views
4

我有一个问题,让BOOST_STATIC_ASSERT_MSG发出有意义的错误消息。我已经把它煮成这样:BOOST_STATIC_ASSERT_MSG - 缺少错误消息

#include <boost/static_assert.hpp> 

namespace StaticChecks 
{ 
    BOOST_STATIC_ASSERT_MSG(false, "Where is my error message?"); 
} 

指定的错误消息是无处可见的。相反,我得到如下:

c:\tryit> x86_64-w64-mingw32-g++ -O0 -g -m64 -Wall -IC:\boost_1_50_0 -IC:\MinGW-W64\msys\include compiletimechecks.cpp -c -o compiletimechecks.cpp.o 
compiletimechecks.cpp:5:5: error: invalid application of 'sizeof' to incomplete type 'boost::STATIC_ASSERTION_FAILURE<false>' 
compiletimechecks.cpp:5:5: error: template argument 1 is invalid 
compiletimechecks.cpp:5:63: error: invalid type in declaration before ';' token 

我在Windows 7和使用GCC/C++ 64位:使用

c:\tryit> x86_64-w64-mingw32-g++ --version 
x86_64-w64-mingw32-g++ (Built by MinGW-builds project) 4.7.2 

我得到的Linux(Ubuntu的12.04 LTS 64位)同样的错误gcc版本4.6.3和升级版本1.48。

此外,我应该补充说,断言成功时,它按预期工作。

回答

3

从文档上BOOST_STATIC_ASSERT_MSG

如果C++ 0X static_assert功能不可用,BOOST_STATIC_ASSERT_MSG(x, msg)将被视为BOOST_STATIC_ASSERT(x)

你显然没有建设-std=c++0x,所以static_assert不可用,因此不显示的消息。

+1

+1这也是我想要添加的。但我确实记得'BOOST_STATIC_ASSERT'在C++ 11之前将消息显示为'typedef'或'array'的名称(并且我无法将它切换为-std = C++ 0x off)。我猜他们在最近的版本中改变了机器。来自同一页:*“对于BOOST_STATIC_ASSERT(x),错误消息将是x的字符串化版本。* – jrok

+0

@Angew:是的,添加-std = C++ 0x选项可使BOOST_STATIC_ASSERT_MSG按预期工作。不幸的是,它也在我们正在开发的项目上打开了一个关于其他编译问题的潘多拉盒子,所以现在我们不会使用这个选项。但至少我们现在知道未来某个时候该做什么。 – ebbek

相关问题