2013-06-18 2 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?"); 
} 

지정된 오류 메시지가 보이지 않는다. 나는 윈도우 7에있어 ​​

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 

및 GCC/C++ 64 비트 사용 : 나는 리눅스 (우분투 12.04 LTS 64 비트)에서 동일한 오류가 발생

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

사용을 대신 나는 다음과 같은 수 gcc 버전 4.6.3 및 Boost 버전 1.48

또한 어설 션이 성공하면 예상대로 작동한다는 것을 추가해야합니다. BOOST_STATIC_ASSERT_MSG에 워드 프로세서

답변

3

은 :

는 C++ 0X의 static_assert 기능을 사용할 수없는 경우, BOOST_STATIC_ASSERT_MSG(x, msg)BOOST_STATIC_ASSERT(x)으로 처리됩니다.

당신은 분명히 -std=c++0x없이 구축하고, 그래서 static_assert 사용할 수 없습니다 및 메시지 따라서 표시되지 않습니다.

+1

+1 내가 추가하고 싶은 내용입니다. 하지만 C++ 11 이전에'typedef' 또는'array'의 이름으로 메시지를 보여주는'BOOST_STATIC_ASSERT'를 생각해 봅니다. (그리고 나는 그것을 작동 전환시킬 수 없습니다 -std = C++ 0x off). 나는 그들이 최근 버전에서 기계를 변경했다고 생각한다. 동일한 페이지에서 : * "BOOST_STATIC_ASSERT (x)의 경우, 오류 메시지는 x"의 문자열 버전이됩니다. * – jrok

+0

@Angew : 예, -std = C++ 0x 옵션을 추가하면 BOOST_STATIC_ASSERT_MSG가 예상대로 작동합니다. 불행하게도 현재 진행중인 프로젝트에서 판도라의 다른 컴파일 문제 상자를 열어서이 옵션을 사용하지 않을 것입니다. 그러나 적어도 미래에 언젠가해야 할 일을 이제는 알았습니다. – ebbek

관련 문제