微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未使用的常量变量模板的默认初始化

如何解决未使用的常量变量模板的默认初始化

以下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 举报,一经查实,本站将立刻删除。