GCC无法报告格式错误的constexpr lambda调用


9

以下是两个未定义行为的测试用例,表示为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由于它在中显示出Undefined Behavior ,因此被正确拒绝constexpr。另一方面test3被接受。

GCC有权接受test3吗?


4
@ formerlyknownas_463035818该标准要求对constexpr中的所有UB进行诊断。
NathanOliver

@NathanOliver哦,谢谢。那就是我的学习方式,我会犯错误;)
idclev 463035818

是的 看起来像一个GCC的bug
NathanOliver

我会报告。
wimalopaan

Answers:


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.