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, test4
viene rifiutato correttamente poiché mostra un comportamento indefinito in a constexpr
. D'altra parte test3
è accettato.
GCC ha ragione di accettare test3
?