【问题标题】:BOOST_STATIC_ASSERT_MSG - error message missingBOOST_STATIC_ASSERT_MSG - 缺少错误信息
【发布时间】:2013-06-18 08:34:01
【问题描述】:

我无法让 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

我在使用 gcc 4.6.3 版和 Boost 1.48 版的 Linux(Ubuntu 12.04 LTS 64 位)上遇到了同样的错误。

另外,我应该补充一点,当断言成功时,它会按预期工作。

【问题讨论】:

    标签: c++ gcc boost mingw


    【解决方案1】:

    来自BOOST_STATIC_ASSERT_MSG 上的文档:

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

    您显然是在没有-std=c++0x 的情况下构建的,因此static_assert 不可用,因此不会显示消息。

    【讨论】:

    • +1 这也是我想添加的。但我确实记得 BOOST_STATIC_ASSERT 在 C++11 之前将消息显示为 typedefarray 的名称(而且我无法让它工作切换 -std=c++0x 关闭)。我猜他们在最近的版本中改变了机器。来自同一页面:“对于 BOOST_STATIC_ASSERT(x),错误消息将是 x 的字符串版本”。
    • @Angew:是的,添加选项 -std=c++0x 可以使 BOOST_STATIC_ASSERT_MSG 按预期工作。不幸的是,它还打开了一个潘多拉魔盒,其中包含我们正在处理的项目的其他编译问题,所以目前我们不会使用这个选项。但至少我们现在知道将来某个时候该做什么。
    猜你喜欢
    • 2017-11-25
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 2016-08-25
    • 1970-01-01
    • 2018-09-30
    • 1970-01-01
    相关资源
    最近更新 更多