EDIT: oubliez, j'ai trouvé mon erreur.
Bonjour,
Voulant adapter un Bit Twiddling Hack en fonction constexpr, je suis tombé sur quelque chose qui me perturbe assez.
Avec GCC 4.6.3 et clang 3.5, le premier calcul me donne le bon résultat. Le second, avec la parenthèse en plus, me fait perdre 1 au résultat, et du coup, le dernier foire totalement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 static_assert(8|(8>>1)|(8>>2)|(8>>4)|(8>>8) == 15, "succes normal"); static_assert((8|(8>>1)|(8>>2)|(8>>4)|(8>>8)) == 14, "succes anormal"); static_assert(1+(8|(8>>1)|(8>>2)|(8>>4)|(8>>8)) == 16, "WTF?");
Est-ce moi qui ne suit pas réveillé, ou assistons-nous à un bug de 2 compilos ?
EDIT: c'est la même chose avec les divers compilos (VC++, clang, icc, gcc) que j'ai pu essayer en ligne. Au détail qu'ils me trouvent un soucis de précédence dans les priorités de | sur la seconde ligne. Cela n'explique pas le dernier résultat, même sur-parenthésé, qui vaut tout le temps 15.
Partager