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