在constexpr函数中声明

时间:2018-09-19 04:03:39

标签: c++ constexpr

在试图弄清为什么出现某个编译错误的原因时,我想到了以下最小示例:

NavigationView

对于我尝试过的每个版本的clang(3.7+),此编译都不会出现问题,但是对于

,使用gcc(测试5-8)失败
  

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

根据我的理解,该函数应该能够为constexpr void Test(bool test) { if (test) return; assert(false); } ,因为存在一组参数值,可以在编译时对其求值。

我的理解是错误的,还是gcc无法编译此错误?

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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

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

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