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, test4
se rechaza correctamente ya que muestra Comportamiento indefinido en a constexpr
. Por otro lado test3
se 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