以下は、IIFE(Immediately Called Lambda-Axpression)として表される未定義の動作の2つのテストケースです。
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
か?
4
@ formerlyknownas_463035818標準では、constexpr内のすべてのUBを診断する必要があります。
—
NathanOliver
@NathanOliverああありがとう。それが私が学ぶ方法です、私は間違いをします;)
—
idclev 463035818
うん。GCCバグのように見える
—
NathanOliver
報告します。
—
wimalopaan