根据此页面: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent “非依赖名称是那些被认为不依赖于模板参数的名称,以及模板本身的名称和在其中声明的名称(成员,朋友和本地变量)”C++ 98标准在哪里指定本地声明的模板名称不相关?
这似乎是由一个事实,即下面的代码被认为是有效的(由LLVM /科莫)
template<typename T>
struct Template
{
typedef int I;
typedef Template::I Type; // 'Template' is NOT dependent
typedef Template<T>::I Type2; // 'Template<T>' is NOT dependent
Template<T>* m;
void f()
{
m->f(); // 'm' is NOT dependent
}
};
备份花一些时间阅读的C++ 98标准后,我找不到在哪里这个行为指定。我希望在'temp.nondep'下找到这个提及。
请注意,由于C++ 11现在有一堆关于“名称指当前实例*如果”涉及这种用法的语言。 –