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
?
c++
undefined-behavior
constexpr
avr-gcc
wimalopaan
fuente
fuente
Respuestas:
No, este es un error de GCC. Acabo de informarlo como error # 93389 .
fuente