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