Maison >développement back-end >C++ >Pourquoi GCC ne parvient-il pas à compiler une spécialisation explicite dans une portée autre que l'espace de noms ?
Spécialisation explicite dans la portée non-espace de noms
Le code donné ne parvient pas à se compiler dans GCC malgré une compilation réussie dans Clang. Selon le standard C ([temp.expl.spec]), des spécialisations explicites peuvent être déclarées dans n'importe quelle portée où le modèle principal correspondant pourrait être défini.
Ce comportement semble être un bug dans GCC. Selon CWG 727, la règle de [temp.expl.spec] concernant la spécialisation explicite a été modifiée pour permettre de telles déclarations dans n'importe quelle portée pertinente.
Portée de la spécialisation explicite
La norme d'origine stipulait que la spécialisation explicite devait être déclarée dans un espace de noms entourant le modèle spécialisé. Cependant, la norme actuelle autorise une spécialisation explicite dans n'importe quelle portée où le modèle principal peut être défini :
Le non-respect par GCC de cette règle mise à jour constitue un bug. Le problème a été identifié comme étant le bogue 85282 et est actuellement suivi par l'équipe de développement de GCC.
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!