GCC no informa una llamada lambda constexpr mal formada


9

A continuación se presentan dos casos de prueba para Comportamiento indefinido, expresados ​​como IIFE (Inmediatamente llamado Axda-Lambda):

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() {}

Cuando se compila con el tronco GCC, test4se rechaza correctamente ya que muestra Comportamiento indefinido en a constexpr. Por otro lado test3se acepta.

¿GCC tiene derecho a aceptar test3?


44
@ formerlyknownas_463035818 El estándar requiere que se diagnostique TODOS los UB en un constexpr.
NathanOliver

@NathanOliver oh gracias. así es como aprendo,
cometo

Sí. Parece un error de CCG
NathanOliver

Lo reportaré.
wimalopaan

Respuestas:


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.