L'instanciation explicite de '<espace de nommage>::<classe de template>' doit apparaître dans l'espace de nommage '<espace de nommage>' (C++)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Erreurs et avertissements du compilateur (C++) - Index


Vous pouvez obtenir cette erreur lorsque vous essayez de compiler l'extrait de code suivant avec un compilateur amélioré par Clang :

namespace N {
  template<typename T> 
  class TTest
  {
  };
}

using namespace N;
template class TTest<int>;
Remarque : Même si gcc accepte l'extrait de code affiché ci-dessus sans objection, il semble que Clang se trouve ici. Les autres compilateurs ne se sont pas encore mis à jour avec les modifications standard. Voir Bug 60786 (EN)).

Voici Clang implémentant Defect Report #275 (EN). Comme mentionné dans DR275, le problème principal est : > "An explicit instantiation shall appear in an enclosing namespace of its template. > If the name declared in the explicit instantiation is an unqualified name, the > explicit instantiation shall appear in the namespace where its template is declared."

La solution consiste à utiliser le nom qualifié, tel que dans :

namespace N {
  template<typename T> 
  class TTest
  {
  };
}
//using namespace N;
template class N::TTest<int>;

Voir aussi