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?

wimalopaan
fuente
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:

7

¿GCC tiene derecho a aceptar test3?

No, este es un error de GCC. Acabo de informarlo como error # 93389 .

wimalopaan
fuente
¡Gracias por simplificar la pregunta y la respuesta!
wimalopaan