以下程序:
template<typename = void>
const int n;
被gcc编译成功,但是clang报错:
# error: default initialization of an object of const type 'const int'
const int n;
^
= 0
这是有道理的。
如果使用gcc 确实会给出错误n
,但即使n
未使用也需要诊断吗?
以下程序:
template<typename = void>
const int n;
被gcc编译成功,但是clang报错:
# error: default initialization of an object of const type 'const int'
const int n;
^
= 0
这是有道理的。
如果使用gcc 确实会给出错误n
,但即使n
未使用也需要诊断吗?
即使
n
未使用,是否也需要诊断?
不,适用的规则是[temp.res.general]/8:
可以在任何实例化之前检查模板的有效性。
该程序格式错误,不需要诊断,如果:
- 无法为模板或 constexpr 的子语句生成有效的特化,如果模板内的语句和模板未实例化,或
- ...
- 由于不依赖于模板参数的构造,紧随其定义的模板的假设实例化将是格式错误的,或者
- ...
所以两个编译器都符合标准。