【问题标题】:GCC fails to report an ill-formed constexpr lambda callGCC 未能报告格式错误的 constexpr lambda 调用
【发布时间】:2020-01-22 15:18:59
【问题描述】:

以下是未定义行为的两个测试用例,表示为 IIFE(立即称为 Lambda-Axpression):

constexpr auto test3 = []{
    int* p{};
    {   
        int x{};
        p = &x;
    }
    return *p; // Undefined Behaviour
}(); // IIFE

constexpr auto test4 = []{
    int x = std::numeric_limits<int>::min();
    int y = -x;  // Undefined Behaviour
    return y;
}();

int main() {}

当使用 GCC 主干编译时,test4 被正确拒绝,因为它在 constexpr 中显示未定义的行为。另一方面,test3 被接受。

GCC 是否有权接受test3

【问题讨论】:

  • @foreknownas_463035818 该标准要求诊断 constexpr 中的所有 UB。
  • @NathanOliver 哦,谢谢。这就是我学习的方式,我会犯错误;)
  • 是的。看起来像一个 GCC 错误
  • 我会举报的。

标签: c++ undefined-behavior constexpr avr-gcc


【解决方案1】:

GCC 是否有权接受 test3?

不,这是一个 GCC 错误。我刚刚将其报告为bug #93389

【讨论】:

  • 感谢您简化问题和答案!
猜你喜欢
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多