我理解(here是一个来源),只要两个定义不冲突,就可以重新定义默认模板参数。所以,我试图用g ++ 5.3.1编译以下内容:
template <class = int> class A; // forward declaration
template <class T = A<>> struct B {};
template <class T = int> class A {}; // "= int" here is for clarity
int main() { return 0; }
编译器抱怨:
错误:重新定义'class T'的默认参数
我的理解在哪里不正确?
答案 0 :(得分:3)
您无法重新定义默认模板参数。
当您编写template <class T = int> class A {};
时,您正在重新定义此默认参数,这就是您收到错误的原因。您必须选择一个位置来放置该默认参数(前向声明或实际定义)。