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。
此外,我應該補充說,斷言成功時,它按預期工作。
+1這也是我想要添加的。但我確實記得'BOOST_STATIC_ASSERT'在C++ 11之前將消息顯示爲'typedef'或'array'的名稱(並且我無法將它切換爲-std = C++ 0x off)。我猜他們在最近的版本中改變了機器。來自同一頁:*「對於BOOST_STATIC_ASSERT(x),錯誤消息將是x的字符串化版本。* – jrok
@Angew:是的,添加-std = C++ 0x選項可使BOOST_STATIC_ASSERT_MSG按預期工作。不幸的是,它也在我們正在開發的項目上打開了一個關於其他編譯問題的潘多拉盒子,所以現在我們不會使用這個選項。但至少我們現在知道未來某個時候該做什麼。 – ebbek