Poniżej znajdują się dwa przypadki testowe dla niezdefiniowanego zachowania, wyrażone jako IIFE (Natychmiastowa wywoływana ekspresja 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() {}
Po skompilowaniu z test4
łączem GCC jest poprawnie odrzucany, ponieważ wykazuje niezdefiniowane zachowanie w pliku constexpr
. Z drugiej strony test3
jest akceptowane.
Czy GCC ma prawo zaakceptować test3
?
c++
undefined-behavior
constexpr
avr-gcc
wimalopaan
źródło
źródło
Odpowiedzi:
Nie, to błąd GCC. Właśnie zgłosiłem to jako błąd # 93389 .
źródło