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