c++ - 未使用的常量变量模板的默认初始化
问题描述
以下程序:
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 的子语句生成有效的特化,如果模板内的语句和模板未实例化,或
- ...
- 由于不依赖于模板参数的构造,紧随其定义的模板的假设实例化将是格式错误的,或者
- ...
所以两个编译器都符合标准。
推荐阅读
- c# - Math.net的FFT函数答案解析
- apache-nifi - 如何在 apache nifi 中连接两个 GetSplunk 处理器?
- oracle - oracle动态sql,查询中查找使用过的表
- python - 为函数 cv2.createBackgroundSubtractorMOG2() 设置初始背景
- reactjs - 如何在 Reach Route 组件中使用所需的道具
- php - 从数组更新实体
- r - 在 R & R Shiny 中从 SQL 查询创建下拉列表
- vue.js - 创建主 Vue 实例之前的 Vue 路由
- amcharts - amchart 4 在本地工作正常,但在部署后显示多行
- openstack - 创建 octavia 负载均衡器失败并显示“Nova 无法构建实例,原因是:提供的 key_name 无效”