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
?
c++
undefined-behavior
constexpr
avr-gcc
Wimalopaan
quelle
quelle
Antworten:
Nein, dies ist ein GCC-Fehler. Ich habe es gerade als Fehler # 93389 gemeldet .
quelle