Maison >développement back-end >C++ >Les compilateurs C 14 peuvent-ils traiter de manière conforme les fonctions de bibliothèque standard non constexpr comme « constexpr » ?
Extension du compilateur conforme pour constexpr Gestion des fonctions de bibliothèque standard non constexpr ?
En C 11, le projet de norme semblait permettre de traiter la norme la bibliothèque fonctionne comme constexpr même si elle n'a pas été explicitement marquée comme telle. Cependant, cette position a évolué depuis.
C 14 Evolution
En C 14, il est explicitement indiqué que les fonctions requises non standard ne doivent pas être déclarées comme constexpr par mises en œuvre. Ceci est décrit dans la section 17.6.5.6 du projet de norme C 14 :
An implementation shall not declare any standard library function signature as constexpr except for those where it is explicitly required.
Cette décision a été prise pour éviter les divergences de mise en œuvre, en particulier avec l'utilisation de SFINAE conduisant à des comportements observables différents.
Implémentation de GCC
GCC traitait auparavant certaines fonctions de bibliothèque standard non constexpr comme constexpr basées sur la résolution précédente de la proposition du LWG 2013. Cependant, ce comportement n'est plus considéré comme conforme en C 14.
Absence d'avertissement en mode strict
Malgré la non-conformité, GCC ne génère pas d'avertissements en mode de conformité stricte ( -std=c 11 -pédant). Il s'agit probablement d'un oubli qui sera corrigé dans les futures mises à jour.
Exemption des intrinsèques
Les intrinsèques du compilateur ne sont pas soumis à la même règle que les fonctions de bibliothèque standard. Par conséquent, l'utilisation d'intrinsèques telles que :
static constexpr double a = __builtin_cos(3.);
doit être considérée comme conforme.
Conclusion
Traiter les fonctions de bibliothèque standard non constexpr comme constexpr est actuellement une extension non conforme dans C 14. Bien que GCC ait autorisé cela dans C 11 sur la base d'une résolution de proposition antérieure, il est attendu que cette extension sera supprimée ou modifiée pour se conformer à la norme C 14 actuelle.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!