【发布时间】:2019-03-20 16:34:30
【问题描述】:
在当前的 C++ 标准(2019 年 3 月)中,有这两个段落(强调我的):
在模板声明或定义中使用并且依赖于模板参数的名称被假定为不命名类型除非适用的名称查找找到类型名称或名称由关键字类型名。 [...]
在查找模板定义中使用的名称声明时,通常的查找规则([basic.lookup.unqual]、[basic.lookup.argdep])用于非依赖名称。依赖于模板参数的名称查找被推迟到知道实际的模板参数([temp.dep])。 [...]
第一段暗示依赖于模板参数的名称将通过“适用名称查找”进行查找。
但是,第二段指出,依赖于模板参数的名称的查找被推迟到知道模板参数为止。
作为第一段一部分的示例包括类似于以下情况的情况:
template <typename T>
class A
{
void f()
{
T* p;
}
};
在方法f中,我认为T是一个“依赖于模板参数的名称”,因此它的查找应该推迟到知道T,因此没有“适用的名称查找”,名称应该假定不命名类型。
如果第二个引用的段落似乎声明没有执行查找,那么第一个引用的段落“除非适用的名称查找找到类型名称”是什么意思?我错过了什么吗?
谢谢。
【问题讨论】:
-
评论不用于扩展讨论;这个对话是moved to chat。
标签: c++ templates language-lawyer