c++ - 为什么在模板声明中使用类型说明符时可以被视为限定 ID
问题描述
template<typename T>
void fun(){
T::type v;
}
在此示例中,T::type
被视为表达式。相关规则在目前的草案中有说明,即:
temp.res#general-5
其终端名称是依赖的且位于仅类型上下文中的限定 ID被视为表示类型。
在我看来,T::type v
无论如何T::type
都不应该将其视为一种表达方式。因为根据整个部分expr,如果遵守 [expr] 中列出的语法,那不可能是表达式。
在这种情况下,T::type
应将其视为具有 形式的简单类型说明符nested-name-specifier opt type-name
。至少,它是一个类型说明符而不是一个qualified-id
. 所以,我想知道 [temp.res#general-5] 如何适用于这个例子,该规则的前提条件是组件应该首先是一个qualified-id。
作为对比,下面的例子有点不同
template<typename T>
void fun(){
T::type * v;
}
对于T::type* v
,根据 [expr] 的语法,T::type
可以认为是一个qualified-id。根据 [声明],它也可以被视为类型说明符。标准中没有详细说明如何解决模板声明中出现的语句的歧义(是否将限定名称视为限定 ID 或某些看起来像限定 ID 的组件,例如简单类型-说明符)。
如前所述,规则 [temp.res#general-5] 不涵盖这些用于形成语句的组件,如果它遵守相应的有效语法,则不能被视为限定 ID。那么,如何解读这些问题呢?
解决方案
推荐阅读
- google-cloud-platform - 从负载均衡器提供 Google 函数
- c# - 有没有办法在 dotnet core 3.1 中为 cookie 配置数据保护提供程序?
- javascript - 根据按钮选择更新数组
- node.js - mongoose 可以根据与集合匹配的对象数组进行批量更新吗?
- prometheus - 高基数指标的聚合
- dictionary - 定义地图切片的地图,出现“赋值为零”错误,我是否动态预填充或生成键?
- python - 宇宙飞船图像无法移动。我的代码有错误吗?
- java - Jsoup 不会保存对 HTML 所做的更改
- c++ - 错误:重载决议为 unique_ptr 选择了已删除的运算符“=”,但仅当不在 MRE 中时
- node.js - 如何发布多个数组Nodejs