Согласно этой странице: http://womble.decadent.org.uk/c++/template-faq.html#non-dependent «Независимые имена — это те имена, которые считаются не зависящими от параметров шаблона, плюс имя самого шаблона и имена, объявленные в нем (члены , друзья и локальные переменные)"
Похоже, это подтверждается тем фактом, что следующий код считается действительным (LLVM/Comeau)
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
}
};
Потратив некоторое время на чтение стандарта С++ 98, я не могу найти, где указано это поведение. Я ожидаю найти упоминание об этом в разделе «temp.nondep».