Где стандарт 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] не помогает.

Другие вопросы по тегам