L'instanciation explicite de '<espace de nommage>::<classe de template>' doit apparaître dans l'espace de nommage '<espace de nommage>' (C++)
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>;