Voici deux cas de test pour le comportement indéfini, exprimés en IIFE (Immediately Called 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() {}
Lorsqu'il est compilé avec le tronc GCC, test4
est correctement rejeté car il présente un comportement indéfini dans a constexpr
. En revanche test3
est accepté.
Le CCG a-t-il raison d'accepter test3
?
c++
undefined-behavior
constexpr
avr-gcc
wimalopaan
la source
la source
Réponses:
Non, c'est un bug GCC. Je viens de le signaler comme bogue # 93389 .
la source