【问题标题】:assert in constexpr function在 constexpr 函数中断言
【发布时间】:2018-09-19 04:03:39
【问题描述】:

在试图找出为什么会出现某种编译错误时,我想出了以下最小示例:

constexpr void Test(bool test)
{
    if (test)
        return;

    assert(false);
}

我尝试过的每个 clang 版本(3.7+)都可以毫无问题地编译,但使用 gcc(测试 5-8)失败,使用

错误:调用非‘constexpr’函数‘void __assert_fail(const char*, const char*, unsigned int, const char*)'

根据我的理解,函数应该可以是constexpr,因为有一组参数值可以在编译时对其进行评估。

是我的理解错了,还是 gcc 编译不成功?

【问题讨论】:

标签: c++ constexpr


【解决方案1】:

这是GCC bug 86678,几天前才修复。

【讨论】:

    【解决方案2】:

    如果你和我一样有这个问题,但你不能升级编译器也不能改变代码。一个快速的解决方法是让编译器通过向编译器添加 NDEBUG 标志来删除断言:

    • gcc/clang:-DNDEBUG
    • msvc:/DNDEBUG

    也许这可以节省一些时间。

    【讨论】:

      猜你喜欢
      • 2015-11-30
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      相关资源
      最近更新 更多