Abaixo estão dois casos de teste para Comportamento indefinido, expressos como IIFE (Imediatamente chamado de 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() {}
Quando compilado com o tronco GCC, test4
é corretamente rejeitado, pois exibe Comportamento indefinido em a constexpr
. Por outro lado, test3
é aceito.
O GCC está certo em aceitar test3
?
4
@ formerlyknownas_463035818 O padrão exige que TODOS os UBs em um consumidor sejam diagnosticados.
—
NathanOliver 22/01
@NathanOliver oh thanks. é assim que eu aprendo, eu
—
cometo
Sim. Parece um bug do GCC
—
NathanOliver
Vou denunciá-lo.
—
wimalopaan 22/01