Maison >développement back-end >C++ >Pourquoi GCC ne parvient-il pas à compiler les spécialisations explicites des modèles de fonctions membres au sein d'une classe ?

Pourquoi GCC ne parvient-il pas à compiler les spécialisations explicites des modèles de fonctions membres au sein d'une classe ?

DDD
DDDoriginal
2024-11-24 12:52:43373parcourir

Why Does GCC Fail to Compile Explicit Specializations of Member Function Templates Within a Class?

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 :

  1. Créez un rapport de bug sur https://gcc.gnus.org/bugzilla/index.cgi.
  2. Attribuez le composant "C" et la version appropriée de GCC (par exemple, "8").
  3. Fournissez une description du problème, y compris le message d'erreur que vous avez reçu et le message attendu. comportement.
  4. Joignez un extrait de code minimal reproductible (par exemple, le code que vous avez fourni) au rapport.

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!

Déclaration:
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