Где стандарт С++ 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
    }
};

Потратив некоторое время на чтение стандарта С++ 98, я не могу найти, где указано это поведение. Я ожидаю найти упоминание об этом в разделе «temp.nondep».


person willj    schedule 22.09.2012    source источник
comment
Обратите внимание, что с C++11 теперь существует множество формулировок, касающихся имени. Имя относится к текущему экземпляру, если оно задействовано в таком использовании.   -  person Ben Voigt    schedule 14.01.2015


Ответы (1)


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

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

person Öö Tiib    schedule 22.09.2012
comment
Перечитывание 14.6 [temp.res] отвечает на мой вопрос: в определении шаблона можно использовать три типа имен: - имя самого шаблона и имена, объявленные в самом шаблоне - имена, зависящие от параметра-шаблона - Имена из областей, которые видны в определении шаблона. Это означает, что имя шаблона исключено из набора «Имена, зависящие от параметра шаблона». - person willj; 22.09.2012
comment
@willj Да, вы ответили на свой вопрос более четко, чем я. :) - person Öö Tiib; 22.09.2012