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

Alw*_*ing 6 c++

我理解(是一个来源),只要两个定义不冲突,就可以重新定义默认模板参数。因此,我尝试使用 g++ 5.3.1 编译以下内容:

\n\n
template <class = int> class A; // forward declaration\ntemplate <class T = A<>> struct B {};\n\ntemplate <class T = int> class A {}; // "= int" here is for clarity\n\nint main() { return 0; }\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译器抱怨:

\n\n
\n

错误:重新定义 \xe2\x80\x98class T\xe2\x80\x99 的默认参数

\n
\n\n

我的理解哪里不对?

\n

Rer*_*ito 5

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

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