GCC 未能报告格式错误的 constexpr lambda 调用

GCC fails to report an ill-formed constexpr lambda call

下面是未定义行为的两个测试用例,表示为 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

Is GCC right to accept test3?

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