GCC non riesce a segnalare una chiamata constexpr lambda mal formata


9

Di seguito sono riportati due casi di test per comportamento indefinito, espressi come IIFE (immediatamente chiamata 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() {}

Se compilato con il trunk GCC, test4viene rifiutato correttamente poiché mostra un comportamento indefinito in a constexpr. D'altra parte test3è accettato.

GCC ha ragione di accettare test3?


4
@ formerlyknownas_463035818 Lo standard richiede che TUTTI gli UB in un constexpr vengano diagnosticati.
NathanOliver,

@NathanOliver oh grazie. ecco come imparo, faccio errori;)
idclev 463035818

Sì. Sembra un bug di GCC
NathanOliver il

Lo segnalerò.
Wimalopaan,

Risposte:


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.