Ich habe den folgenden (minimierten) Code, der in VC2005 funktionierte, aber in 2010 nicht mehr funktioniert.
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; }
};
Es scheint, dass, wenn "index_type" ein abhängiger Typ ist, ich immer eine C2770: ungültige explizite Vorlage Argument (s) Fehler auf die Spezialisierung erhalten. Beachten Sie, dass dieser Code tatsächlich genug ist, um den Fehler zu erzeugen - eine leere main ist ausreichend, um es zu kompilieren, die Vorlage muss nicht einmal instanziiert werden.
Es funktioniert gut, wenn index_type kein abhängiger Typ ist. Irgendwelche Ideen, warum dies so in VC2010 ist, wenn dies tatsächlich Standardverhalten oder ein Fehler ist, und wenn ich es umgehen kann?