Malgré le respect de la norme C, qui autorise explicitement les spécialisations explicites dans n'importe quelle portée où le modèle principal peut être défini, le code fourni présente des erreurs de compilation dans GCC mais pas dans Clang. Cette divergence soulève la question de savoir s'il s'agit d'un bug dans GCC et comment le localiser dans son bug tracker.
Selon [temp.expl.spec], paragraphe 2, "Une spécialisation explicite peut être déclarée dans toute portée dans laquelle le modèle principal correspondant peut être défini. Cependant, GCC HEAD 8.0.1 avec -std=c 2a produit un message d'erreur indiquant que la spécialisation explicite n'est pas autorisée dans une portée autre qu'un espace de noms.
Cet écart par rapport à la norme suggère un bug potentiel dans GCC. Pour localiser ce problème dans le système de suivi des bogues, on peut rechercher « spécialisation explicite » ou « portée » dans la base de données de bogues GCC. Alternativement, le problème peut être signalé directement à l'aide du système de rapport de bogues.
Dans ce cas, le problème a été signalé sous le nom de bogue 85282, qui reconnaît le problème et son incohérence avec l'amendement CWG 727. L'amendement a révisé la norme pour autoriser les spécialisations explicites dans n'importe quelle portée où le modèle principal peut être défini.
L'implication de ce bug est que les utilisateurs de GCC peuvent rencontrer des problèmes de compilation lorsqu'ils tentent de déclarer des spécialisations explicites en dehors de la portée de l'espace de noms, malgré la norme C autorisant de telles déclarations. Pour atténuer ce problème, les utilisateurs peuvent soit cibler des compilateurs non-GCC, soit encapsuler la spécialisation explicite dans un espace de noms, qui est actuellement la seule portée compatible avec l'interprétation de la norme par 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!