Ниже приведены два тестовых примера для неопределенного поведения, выраженного как IIFE (немедленное название лямбда-экспрессии):
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
@ прежние известныеas_463035818 Стандарт требует, чтобы ВСЕ UB в constexpr были диагностированы.
—
Натан Оливер
@NathanOliver о, спасибо. вот так я учусь, я делаю ошибки;)
—
idclev 463035818
Ага. Похоже, ошибка GCC
—
NathanOliver
Я сообщу об этом.
—
Вималопан