编译器错误 C2299

更新:2007 年 11 月

错误消息

“function”: 行为更改: 显式专用化不能是复制构造函数或复制赋值运算符

对 Visual C++ 2005 执行编译器一致性工作时,也会生成此错误:Visual C++ 的早期版本允许复制构造函数或复制赋值运算符的显式专用化。

若要解决 C2299,请不要使复制构造函数或赋值运算符成为模板函数,而使其成为采用类类型的非模板函数。通过显式指定模板参数来调用复制构造函数或赋值运算符的任何代码都需要移除模板参数。

有关更多信息,请参见 Visual C++ 2005 编译器中的重大更改

下面的示例生成 C2299:

// C2299.cpp
// compile with: /c
class C {
   template <class T>
   C (T t);

   template <> C (const C&);   // C2299
   C (const C&);   // OK
};