template<class Type1, class Type2>
struct Bind13
{
// Не совсем то же самое, что и выше, но в некоторых случаях поможет,
// например, для передачи SomeTemplate в качестве параметра какому-нибудь шаблону
// при зафиксированных 1 и 3 параметрах.template<class T>
struct InternSomeElseTemplate : public SomeTemplate<Type1, T, Type2>
{ };
};
// И вместо SomeElseTemplate использовать MyBind::InternSomeElseTemplate,
// при typedef Bind13<Type1,Type2> MyBind;
7. О чем невозможно говорить, о том следует молчать.
Re: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
Здравствуйте, MaximE, Вы писали:
ME>Здравствуйте, WFrag, Вы писали:
WF>>Есть код:
ME>[]
ME>Вообще, что делаешь? Пока то, что ты пишешь похоже на то, что есть в boost::mpl.
Книжку читаю, тренируюсь
7. О чем невозможно говорить, о том следует молчать.
Re[2]: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
ME>Почему? Потому, что InternLess не argument dependent?
Да. А вообще никак не поборю лень и не решу проблему с dependent names раз и навсегда (решается старательным чтением стандарта)
Of course, the code must be complete enough to compile and link.
Re[2]: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
ПК>template и typename в данном виде употребляются только внутри шаблонов.
Я не силен в цитировании святых писаний, но разве не так:
14.2 Names of template specializations
[4] When the name of a member template specialization appears after . or > in a postfix expression,
or after nested name specifier in a qualified id, and the postfix expression or qualified id explicitly depends on a template parameter (14.6.2), the member template name must be prefixed by the keyword template. Otherwise the name is assumed to name a nontemplate.
class X
{
public:
template<size_t> X* alloc();
template<size_t> static X* adjust();
};
template<class T> void f(T* p)
{
T* p1 = p->alloc<200>(); // illformed: < means less than
T* p2 = p->template alloc<200>(); // OK: < starts template argument list
T::adjust<100>(); // illformed: < means less than
T::template adjust<100>(); // OK: < starts explicit qualification
}
Re[4]: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
Здравствуйте, MaximE, Вы писали:
ПК>> template и typename в данном виде употребляются только внутри шаблонов.
M>
M> When <...> the postfix expression or qualified id explicitly
M> depends on a template parameter (14.6.2), the member template name
M> must be prefixed by the keyword template.
Обрати внимание на выделенное. Имена могут зависеть от параметра шаблона
только в определении последнего. template после зависимых имен
нужно именно для того, чтобы корректно компилировать определение шаблона.
Когда шаблон уже инстанциирован, что имеет место при обращении к любому
из его членов вне определения шаблона, никакой надобности в добавлении
префикса template нет: компилятор и без того знает, какие члены есть
в шаблоне, и какие из них, в свою очередь, являются шаблонами.
Posted via RSDN NNTP Server 1.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
ПК>> template и typename в данном виде употребляются только внутри шаблонов.
M> Возможно, я ошибаюсь, но template здесь применен правильно. Если нет, то почему?
template употребляется только для квалификации членов специализаций шаблонов,
заданных именами, зависимыми от параметров шаблона. В данном случае имена
Test<Less> и Test<Outer::InternLess> от параметров шаблона зависеть не могут,
т.к. main() шаблоном не является. Например, Comeau на приведенный код выдает ошибку.
Posted via RSDN NNTP Server 1.5 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[5]: Вложенные шаблоны как параметры шаблона - VC7.1 (ICE)
Здравствуйте, Павел Кузнецов, Вы писали:
ПК>Здравствуйте, MaximE, Вы писали:
ПК>>> template и typename в данном виде употребляются только внутри шаблонов.
M>>
M>> When <...> the postfix expression or qualified id explicitly
M>> depends on a template parameter (14.6.2), the member template name
M>> must be prefixed by the keyword template.
Какой я чайник. Мне так лень вчитываться в этот стандарт...