GCC не может сообщить о неправильно сформированном лямбда-вызове constexpr

9

Ниже приведены два тестовых примера для неопределенного поведения, выраженного как 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?

wimalopaan
источник
4
@ прежние известныеas_463035818 Стандарт требует, чтобы ВСЕ UB в constexpr были диагностированы.
Натан Оливер
@NathanOliver о, спасибо. вот так я учусь, я делаю ошибки;)
idclev 463035818
Ага. Похоже, ошибка GCC
NathanOliver
Я сообщу об этом.
Вималопан

Ответы:

7

Правильно ли GCC принять test3?

Нет, это ошибка GCC. Я только что сообщил об этом как об ошибке # 93389 .

wimalopaan
источник
Спасибо за оптимизацию вопроса и ответа!
Вималопан