je donne les résultats suivants (réduit), qui a travaillé dans VC2005, mais ne fonctionne plus en 2010.VS2010 code C++ membre erreur de spécialisation fonction modèle
template <typename TDataType>
class TSpecWrapper
{
public:
typedef typename TDataType::parent_type index_type;
public:
template <bool THasTriangles>
void Spec(index_type& io_index)
{ std::cout << "False version" << std::endl; }
template <>
void Spec<true>(index_type& io_index)
{ std::cout << "True version" << std::endl; }
};
Il semble que lorsque « index_type » est un type dépendant, Je reçois toujours un C2770: erreur de modèle explicite non valide (s) sur la spécialisation. Notez que ce code est en fait suffisant pour générer l'erreur - une main vide est suffisante pour le compiler, le modèle n'a même pas besoin d'être instancié.
Cela fonctionne très bien si index_type n'est pas un type dépendant. Des idées pour lesquelles il en est ainsi dans VC2010, si c'est un comportement standard ou un bug, et si je peux contourner cela?
De quel type vous passer pour le paramètre 'TDataType'? –
Il y a un paramètre 'index_type' et' index', est-ce une faute de frappe? –
duplication possible de [Spécialisation explicite dans la portée sans espace de noms] (http://stackoverflow.com/questions/3052579/explicit-specialization-in-non-namespace-scope) –