Где стандарт 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 3

1 ответ:

Стандарт C++98 не определяет, что именно подразумевается под" несамостоятельными"," несамостоятельными "или" несамостоятельными " именами (вы можете найти все три формы в стандартных текстах).

Вместо этого он решает определить, какие имена и типы зависят от аргументов шаблона в 14.6 [temp.res] и его подразделы. Применялась простая логика ... все, что не называется зависимым, не является зависимым. Только чтение 14.6.3 [темп.nondep] не помогает.