GCC не повідомляє про неправильно сформований лямбда-виклик constexpr


9

Нижче наведено два тестові випадки для невизначеної поведінки, виражених як IIFE (негайно називається лямбда-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він правильно відкидається, оскільки він демонструє не визначене поведінку в a constexpr. З іншого боку test3прийнято.

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


4
@ bivlyknownas_463035818 Стандарт вимагає діагностувати ВСІ UB у підказці.
NathanOliver

@NathanOliver о, дякую. ось як я вчуся, роблю помилки;)
idclev 463035818

Так. Схоже на помилку GCC
NathanOliver

Я повідомлю про це.
wimalopaan

Відповіді:


7

Чи правильно GCC приймати тест3?

Ні, це помилка GCC. Я щойно повідомив про це як помилку # 93389 .


Дякуємо вам за упорядкування запитання та відповіді!
wimalopaan
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.