template template parameters
От: nen777w  
Дата: 14.12.10 11:15
Оценка: 4 (1) :))
MSVC 9.0
Не могу понять это бага или как?
template< template<typename, typename> typename tree_type >
inline void    foo()
{
}
foo<tree::basic_tree>();

//C2988: unrecognizable template declaration/definition
//C2059: syntax error : '<L_TEMPLATEDECL>'


но если:

template< template<typename, typename> class tree_type >
inline void    foo()
{
}


всё ОК.
Re: template template parameters
От: slava_phirsov Россия  
Дата: 14.12.10 11:40
Оценка:
Здравствуйте, nen777w, Вы писали:

N>MSVC 9.0

N>Не могу понять это бага или как?
N>
N>template< template<typename, typename> typename tree_type >
N>inline void    foo()
N>{
N>}
N>foo<tree::basic_tree>();

N>//C2988: unrecognizable template declaration/definition
N>//C2059: syntax error : '<L_TEMPLATEDECL>'
N>


N>но если:


N>
N>template< template<typename, typename> class tree_type >
N>inline void    foo()
N>{
N>}
N>


N>всё ОК.


ЕМНИП, я читал про такое у Страуса, так что все ОК
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Re: template template parameters
От: d.4 Россия  
Дата: 14.12.10 12:21
Оценка:
Здравствуйте, nen777w, Вы писали:

N>но если:


N>
N>template< template<typename, typename> class tree_type >
N>inline void    foo()
N>{
N>}
N>


N>всё ОК.


typename, конечно, хорошо. Но class, как показывает практика, срабатывает значительно чаще!
Один знакомый компилятор вообще шлангом прикидывается, когда видит элементарный template <typename>.
Re: template template parameters
От: alexsy Россия  
Дата: 14.12.10 13:21
Оценка:
Здравствуйте, nen777w, Вы писали:

N>MSVC 9.0

N>Не могу понять это бага или как?
N>
N>template< template<typename, typename> typename tree_type >
N>inline void    foo()
N>{
N>}
N>foo<tree::basic_tree>();

N>//C2988: unrecognizable template declaration/definition
N>//C2059: syntax error : '<L_TEMPLATEDECL>'
N>


N>но если:


N>
N>template< template<typename, typename> class tree_type >
N>inline void    foo()
N>{
N>}
N>


N>всё ОК.

Когда используется шаблонный параметр шаблона нужно писать class. Читайте Вандервуда.
Re: template template parameters
От: npak Россия  
Дата: 14.12.10 13:47
Оценка: 2 (1)
Здравствуйте, nen777w, Вы писали:

N>MSVC 9.0

N>Не могу понять это бага или как?
N>
N>template< template<typename, typename> typename tree_type >
N>inline void    foo()
N>{
N>}
N>foo<tree::basic_tree>();

N>//C2988: unrecognizable template declaration/definition
N>//C2059: syntax error : '<L_TEMPLATEDECL>'
N>


N>но если:


N>
N>template< template<typename, typename> class tree_type >
N>inline void    foo()
N>{
N>}
N>


N>всё ОК.


Правильно. Стандарт С++, раздел 14.1 Template parameters

type-parameter:
class identifier_opt
class identifier_opt = type-id
typename identifier_opt
typename identifier_opt = type-id
template < template-parameter-list > class identifier_opt
template < template-parameter-list > class identifier_opt = id-expression

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.