Nachfolgend sind zwei Testfälle für undefiniertes Verhalten aufgeführt, ausgedrückt als IIFE (Sofort als Lambda-Axpression bezeichnet):
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() {}
Wird beim Kompilieren mit GCC-Trunk test4
korrekt abgelehnt, da es in a undefiniertes Verhalten zeigt constexpr
. Auf der anderen Seite test3
wird akzeptiert.
Ist GCC berechtigt zu akzeptieren test3
?