当重复声明具有默认参数的模板类时,出现错误:
<source>:12:23: error: redefinition of default argument for 'class<template-parameter-1-2>'
12 | template <typename T, typename = T>
| ^~~~~~~~
<source>:9:23: note: original definition appeared here
9 | template <typename T, typename = T>
|
重复没有默认参数的模板前向声明不会产生任何错误。重复相同的操作,但不使用默认参数也可以(但在我看来这没有意义,应该会产生一些错误)。
以下是整个示例:
template <typename T>
struct ok;
template <typename T>
struct ok;
template <typename T, typename = T>
struct not_ok;
template <typename T, typename = T>
struct not_ok;
template <typename T, typename = T>
struct why_is_it_ok;
template <typename T, typename>
struct why_is_it_ok;
为什么?
与函数参数的默认参数一样,模板参数的默认参数在每个范围内只允许设置一次。
没问题,因为没有声明引入默认参数。
不允许,因为第二个未命名参数在同一范围内被默认两次。
允许,因为只有第一个声明声明了默认参数