如何解决未使用的常量变量模板的默认初始化
以下program:
template<typename = void>
const int n;
由gcc成功编译,但是clang给出错误:
# error: default initialization of an object of const type 'const int'
const int n;
^
= 0
这很有意义。
如果使用n
,gcc会给出错误信息,但是即使未使用n
,是否也需要诊断?
解决方法
即使未使用
n
,也需要诊断吗?
不。适用规则是[temp.res.general]/8:
可以在任何实例化之前检查模板的有效性。
该程序格式错误,如果出现以下情况,则无需进行诊断:
- 如果模板中的语句或模板未实例化,则无法为模板或constexpr的子语句生成有效的专业化,或者
- ...
- 由于模板不依赖模板参数,因此假设模板紧随其定义之后的假想实例化将不正确,或者
- ...
所以两个编译器都符合标准。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。