Le traitement extensionnel des fonctions de bibliothèque standard non constexpr est-il conforme ?
La capacité de GCC à traiter les fonctions de bibliothèque standard non constexpr comme constexpr dans certaines situations soulèvent des questions quant à la conformité.
Contradiction dans Normes
Dans le projet de norme C 11, il est apparu que traiter les fonctions intégrées comme constexpr serait explicitement autorisé. Cependant, le consensus a changé dans C 12 et la proposition a changé, ce qui a conduit à C 14 interdisant explicitement ce comportement.
Règle du "comme si"
Dans C 11, Il n’était pas clair si la règle du « comme si » autorisait ce comportement. Certains avis suggèrent que cela pourrait être le cas, mais cette interprétation n'est pas confirmée dans la résolution du numéro 2013 du LWG, qui traite de ce sujet spécifique.
Mise en œuvre de GCC
GCC mis en œuvre ce comportement est basé sur la résolution proposée antérieurement par LWG 2013, qui permettait un traitement implicite en tant que fonctions constexpr. Cependant, la résolution finale a changé, et cette extension est désormais non conforme en C 14.
Conformité en mode strict
Pour se conformer à la norme C 14, GCC devrait émettre un avertissement en mode de conformité stricte (-std=c 11 -pedantic ou -std=c 14 -pedantic) en cas de rencontre fonctions de bibliothèque non constexpr utilisées dans les contextes constexpr. Alternativement, ce comportement doit être désactivé dans ces modes.
Exemption des intrinsèques
Les intrinsèques du compilateur ne sont pas couverts par la norme et, par conséquent, ils peuvent être traités différemment. Il est probable que l'utilisation des intrinsèques du compilateur dans des contextes constexpr reste acceptable.
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!