2013-06-18 130 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

相關問題