Шаблоны: Разрешение имен: Зависимые аргументы шаблона: -> Кто-нибудь может рассказать еще несколько примеров для этого утверждения? - PullRequest
2 голосов
/ 25 сентября 2010

Это утверждение из стандарта ISO C ++ 14.6.2.4: Зависимые аргументы шаблона:

  1. Тип-аргумент шаблона является зависимым, если указанный тип является зависимым.

  2. Интегральный шаблонный аргумент нетипового типа зависит, если заданное им константное выражение зависит от значения.

  3. Неинтегральный не типаргумент шаблона является зависимым, если его тип является зависимым, или он имеет одну из следующих форм и содержит спецификатор вложенного имени, который указывает имя класса с именем зависимого типа.

  4. Шаблонный аргумент шаблона является зависимым, если он называет параметр шаблона или является квалифицированным идентификатором с указателем вложенного имени, который содержит имя класса, которое именует зависимый тип.

Я не могу понять эти моменты?

Кто-нибудь может привести примеры для этих утверждений?

1 Ответ

1 голос
/ 25 сентября 2010

Это то, что я понимаю. Я выделил отдельные фрагменты кода в строке кода, помеченной в соответствии с номерами строк в OP.

struct A{
    void f(){}
};

template<class T> struct B{};

// The template argument B<T> is TYPE depdent on the template parameter T                      (1)
template<class T, class U = B<T> > struct T1{};

// The template argument c is VALUE dependent on the template non type parameter 'c'        (2)
template<class T, char c, int d = c> struct T2{};

// The 2nd template argument is TYPE depdent on the template parameter T                    (3)
template<class T, void (T::*p)(void) = &T::f> struct T3{};

// The template template argument B is TYPE depdent on the template parameter T             (4)
template<class T, template<class U = T> class V = B> struct T4{};


int main(){
    T1<int> t1;
    T2<int, 'A', 2> t2;
    T3<A> t3;
    T4<A> t4; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...