Где стандарт C++ 98 указывает, что локально объявленные имена шаблонов не зависят?
Согласно этой странице: http://womble.decadent.org.uk/c++/template-faq.html"Независимыми именами являются те имена, которые, как считается, не зависят от параметров шаблона, плюс имя самого шаблона и объявленных в нем имен (члены, друзья и локальные переменные)"
Это подтверждается тем фактом, что следующий код считается действительным (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".
1 ответ
Стандарт C++98 не определяет, что именно подразумевается под "независимыми", "независимыми" или "независимыми" именами (вы можете найти все три формы в стандартных текстах).
Вместо этого он выбирает, какие имена и типы зависят от аргументов шаблона в 14.6 [temp.res] и его подразделах. Применяется простая логика... все, что не называется зависимым, не зависит. Только чтение 14.6.3 [temp.nondep] не помогает.