Вопрос к знатокам шаблонов и Стандарта :)
От: __LP  
Дата: 17.10.05 20:56
Оценка:
Здравствуйте. Буду очень признателен, если мне кто-нибудь разъяснит такой момент:
Вот пример из книги "Шаблоны С++" Вандевурд, Джосаттис.

9.2.3

template<template<typename> class TT> class X { 
}; 

template<typename T> class C { 
   C a;       // Верно: то же, что и "C<T> a;" 
   C<void> b; // Верно 
   X<C> c;    // Ошибка: C без списка аргументов 
              //        не определяет шаблон
   X<::C> d;  // Ошибка: <: - диаграф [ 
   X< ::C> e; // Верно: требуется пропуск между < и ::
};

Вопрос заключается вот в чем:
template<template<typename> class TT> class X { 
}; 

template<typename T> class C { 
   C a;       // Верно: то же, что и "C<T> a;" 
//? Почему "Верно"? ведь C еще не определен полностью.
   C<void> b; // Верно 
//то же самое...
   X<C> c;    // Ошибка: C без списка аргументов 
              //        не определяет шаблон           
   X<::C> d;  // Ошибка: <: - диаграф [ 
   X< ::C> e; // Верно: требуется пропуск между < и ::
//Почему внутри треугольных скобок писать 'просто С' нельзя,
   //а надо именно ::С? Собственно в этом и основной вопрос!!
};

В общем, почему использование имени С внутри <> и вне отличается? :???:
C++ можно выучить за 21 день! ...если дни — полярные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.