C++ constexpr函数中的断言

C++ constexpr函数中的断言,c++,constexpr,C++,Constexpr,在试图找出为什么会出现某个编译错误时,我给出了以下最小的示例: constexpr void Test(bool test) { if (test) return; assert(false); } 我尝试过的每一个版本的clang(3.7+)都可以编译,但gcc(测试5-8)的编译失败 错误:调用非“constexpr”函数“void”\u断言\u失败(const 字符*,常量字符*,无符号整数,常量字符*)' 根据我的理解,函数应该能够是constexpr

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

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

    assert(false);
}
我尝试过的每一个版本的clang(3.7+)都可以编译,但gcc(测试5-8)的编译失败

错误:调用非“constexpr”函数“void”\u断言\u失败(const 字符*,常量字符*,无符号整数,常量字符*)'

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


我的理解是错误的,还是gcc没有编译这个错误?

这是错误的,几天前刚刚修复。

如果你喜欢我,我会有这个问题,但是你不能升级编译器,也不能更改代码。快速修复方法是让编译器通过向编译器添加NDEBUG标志来删除断言:

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

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

在gcc 7.2.0中也会发生。也许gcc在这里是错误的…类似于那里的bug