默认模板参数的非冲突重新定义

时间:2016-07-18 13:17:52

标签: c++

我理解(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'的默认参数

我的理解在哪里不正确?

1 个答案:

答案 0 :(得分:3)

您无法重新定义默认模板参数。

当您编写template <class T = int> class A {};时,您正在重新定义此默认参数,这就是您收到错误的原因。您必须选择一个位置来放置该默认参数(前向声明或实际定义)。