Erro do compilador C2299
'function': mudança de comportamento: uma especialização explícita não pode ser um construtor de cópia ou operador de atribuição de cópia
Comentários
Esse erro também pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito para o Visual Studio 2005. As versões anteriores do Visual C++ permitiam especializações explícitas para um construtor de cópia ou um operador de atribuição de cópia.
Para resolver C2299, não transforme o construtor de cópia ou o operador de atribuição em um modelo de função. Torne-as funções não modelo que usam um tipo de classe. Qualquer código que chame o construtor de cópia ou o operador de atribuição especificando explicitamente os argumentos de modelo precisa remover os argumentos do modelo.
Exemplo
O seguinte exemplo gera o erro C2299:
// C2299.cpp
// compile with: /c
class C {
template <class T>
C (T t);
template <> C (const C&); // C2299
C (const C&); // OK
};