Erreur GCC : spécialisation explicite dans une portée non-espace de noms
Question :
Pourquoi le code suivant ne parvient pas à être compilé dans GCC lors de la spécialisation explicite d'un modèle de fonction membre dans un classe ?
template<typename T> struct Widget { template<typename U> void foo(U) { } template<> void foo(int*) { } };
Réponse :
Selon le standard C ([temp.expl.spec], paragraphe 2), les spécialisations explicites peuvent être déclarées dans n'importe quel portée dans laquelle le modèle principal correspondant peut être défini. Par conséquent, le code devrait également être compilé dans GCC.
Bogue et rapports GCC :
Cet échec de compilation dans GCC est probablement un bug. Pour le signaler, suivez ces étapes :
Référence standard :
Le paragraphe 2 de la section standard C [temp.expl.spec] indique :
Une spécialisation explicite peut être déclarée dans toute portée dans laquelle le modèle principal correspondant peut être défini.
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!