GCC gagal melaporkan panggilan lambda constexpr yang buruk


9

Berikut adalah dua uji kasus untuk Perilaku Tidak Terdefinisi, dinyatakan sebagai IIFE (Segera Disebut 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() {}

Ketika dikompilasi dengan trunk GCC, test4ditolak dengan benar karena memperlihatkan Perilaku Tidak Terdefinisi dalam a constexpr. Di sisi lain test3diterima.

Apakah GCC berhak menerima test3?


4
@ formerlyknownas_463035818 Standar ini mengharuskan SEMUA UB di sebuah constexpr didiagnosis.
NathanOliver

@NathanOliver oh terima kasih. Itulah cara saya belajar, saya membuat kesalahan;)
idclev 463035818

Ya. Sepertinya bug GCC
NathanOliver

Saya akan melaporkannya.
wimalopaan

Jawaban:


7

Apakah GCC berhak menerima test3?

Tidak, ini adalah bug GCC. Saya baru saja melaporkannya sebagai bug # 93389 .


Terima kasih telah mempersingkat pertanyaan dan jawabannya!
wimalopaan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.