J'ai trouvé un bogue dans GCC 6 et 7 (pas dans GCC 5) dans les fonctions constexpr, ce qui conduit à des résultats différents si la fonction est évaluée au moment de la compilation (mauvais résultat) ou runtime (résultat correct).GCC Bug - Accès au tableau In/Decrement dans constexpr
#include <iostream>
constexpr int bar(int *b) {
int i = 0;
b[i++] = 1; // GCC produce here an failure.
return 0;
}
constexpr int foo()
{
int tmp[] = {0};
bar(tmp);
return tmp[0];
}
constexpr int cexprI = foo();
int main()
{
std::cout << cexprI << " " << foo() << "\n";
return 0;
}
Le problème est l'incrément (se produit également pour décrément) fonctionnement intérieur de l'accès au tableau.
Le résultat de la compilation de l'expression constante est 0 (faux) et le résultat d'exécution est 1 (correct).
Quelqu'un pourrait-il confirmer ce bug et signaler à: https://gcc.gnu.org/bugzilla/
Je ne peux pas créer un compte là-bas User account creation has been restricted.
. J'ai contacté l'administrateur, mais le bug pour moi est majeur à critique. Donc, il voulait aussi vous informer. Je vous remercie!