【发布时间】:2021-12-09 01:53:12
【问题描述】:
为什么 C++ 标准规定模板中的非限定名称是非依赖的?
例如
template<typename T>
class Base
{
public:
T x;
};
template<typename T>
class C : public Base<T>
{
public:
bool m() { return x == 0; } // Error: undeclared identifier 'x'
};
从接受的答案中引用 SO question 关于如何克服限制:
标准规定模板中的非限定名称是 非依赖的,必须在定义模板时查找。这 依赖基类的定义当时是未知的 (可能存在基类模板的特化)所以不合格 名称无法解析。
但是,引用的答案和其他答案没有说明为什么这是标准规定的。这种限制的理由是什么?
【问题讨论】: