Erro do compilador C3772
'name': declaração de modelo friend inválida
É inválido declarar um amigo de uma especialização de modelo de classe. Você não pode declarar uma especialização explícita ou parcial de um modelo de classe e, na mesma instrução, declarar um amigo dessa especialização. O espaço reservado name identifica a declaração inválida.
Para corrigir este erro
Não declare um amigo de uma especialização de modelo de classe.
Se for adequado para o seu aplicativo, declare um amigo do modelo de classe ou declare um amigo de uma especialização parcial ou explícita específica.
Exemplo
O exemplo de código a seguir falha porque declara um amigo de uma especialização parcial de um modelo de classe.
// c3772.cpp
// compile with: /c
// A class template.
template<class T> class A {};
// A partial specialization of the class template.
template<class T> class A<T*> {};
// An explicit specialization.
template<> class A<char>;
class X {
// Invalid declaration of a friend of a partial specialization.
template<class T> friend class A<T*>; // C3772
// Instead, if it is appropriate for your application, declare a
// friend of the class template. Consequently, all specializations
// of the class template are friends:
// template<class T> friend class A;
// Or declare a friend of a particular partial specialization:
// friend class A<int*>;
// Or declare a friend of a particular explicit specialization:
// friend class A<char>;
};