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