Maison > développement back-end > C++ > Pourquoi GCC ne parvient-il pas à compiler des spécialisations explicites dans une portée autre que l'espace de noms ?

Pourquoi GCC ne parvient-il pas à compiler des spécialisations explicites dans une portée autre que l'espace de noms ?

Susan Sarandon
Libérer: 2024-11-22 00:08:10
original
460 Les gens l'ont consulté

Why Does GCC Fail to Compile Explicit Specializations in Non-Namespace Scope?

Spécialisations explicites dans la portée non-espace de noms : problème de compilation GCC

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal