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()
{
}
всё ОК.
Здравствуйте, 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>всё ОК.
ЕМНИП, я читал про такое у Страуса, так что все ОК
Люди! Люди, смотрите, я сошел с ума! Люди! Возлюбите друг друга! (вы чувствуете, какой бред?)
Здравствуйте, nen777w, Вы писали:
N>но если:
N>N>template< template<typename, typename> class tree_type >
N>inline void foo()
N>{
N>}
N>
N>всё ОК.
typename, конечно, хорошо. Но class, как показывает практика, срабатывает значительно чаще!

Один знакомый компилятор вообще шлангом прикидывается, когда видит элементарный template <typename>.
Здравствуйте, 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. Читайте Вандервуда.
Здравствуйте, 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