首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >常数函数中的断言

常数函数中的断言
EN

Stack Overflow用户
提问于 2018-09-19 04:03:39
回答 2查看 630关注 0票数 2

在试图找出我为什么得到一个特定的编译错误时,我想出了以下最小的例子:

代码语言:javascript
复制
constexpr void Test(bool test)
{
    if (test)
        return;

    assert(false);
}

这在编译所有版本的clang i tested (3.7+)时都没有问题,但在gcc (测试5-8)中失败。

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

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

我的理解是错的,还是gcc没有编错?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-19 04:16:05

这是GCC虫86678,几天前就修好了。

票数 5
EN

Stack Overflow用户

发布于 2021-02-19 08:09:19

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

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

也许这能节省一些时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52397841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档