GCC ne signale pas un appel lambda constexpr mal formé

9

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, test4est correctement rejeté car il présente un comportement indéfini dans a constexpr. En revanche test3est accepté.

Le CCG a-t-il raison d'accepter test3?

wimalopaan
la source
4
@ formerlyknownas_463035818 La norme exige que TOUS les UB d'un constexpr soient diagnostiqués.
NathanOliver
@NathanOliver oh merci. c'est comme ça que j'apprends, je fais des erreurs;)
idclev 463035818
Oui. Ressemble à un bug de GCC
NathanOliver
Je vais le signaler.
wimalopaan

Réponses:

7

GCC a-t-il raison d'accepter test3?

Non, c'est un bug GCC. Je viens de le signaler comme bogue # 93389 .

wimalopaan
la source
Merci d'avoir rationalisé la question et la réponse!
wimalopaan