VC++ est ne respectant pas dans ce cas - explicite spécialisations doivent être à portée espace de noms. C++03, §l'article 14.7.3/2:
Explicite de spécialisation doivent être déclarés dans l'espace de noms dont le modèle est membre, ou, pour les modèles de membre, dans l'espace de noms dont la classe englobante ou de la classe englobante modèle est membre.
Explicite de la spécialisation d'une fonction membre, membre de la classe ou de la donnée membre statique d'une classe de modèle doivent être déclarés dans l'espace de noms dont le modèle de classe est un membre.
En outre, vous avez le problème que vous ne pouvez pas se spécialisent fonctions de membre sans explicitement spécialisée le contenant de la classe, donc une seule solution serait de laisser Verify()
de l'avant à un, éventuellement spécialisés, gratuit fonction:
namespace detail {
template <typename TL> void Verify (int, int[]) {}
template <> void Verify<int>(int, int[]) {}
}
template<typename T> class CConstraint {
// ...
template <typename TL> void Verify(int position, int constraints[]) {
detail::Verify<TL>(position, constraints);
}
};