【发布时间】: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