Согласно этой странице:
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
}
};
Потратив некоторое время на чтение стандарта C ++ 98, я не могу найти, где указано это поведение. Я ожидаю найти упоминание об этом в разделе «temp.nondep».
Стандарт C ++ 98 не определяет, что именно подразумевается под «независимыми», «независимыми» или «независимыми» именами (вы можете найти все три формы в стандартных текстах).
Вместо этого он выбирает, какие имена и типы зависят от аргументов шаблона в 14.6 [temp.res] и его подразделах. Применяется простая логика … все, что не называется зависимым, не зависит. Только чтение 14.6.3 [temp.nondep] не помогает.
Других решений пока нет …