typename class, ยง14.1 [temp.param] p1:
-:
- opt
- opt= type-id
- typename opt
- typename opt= type-id
- template < template-parameter-list > class opt
- template < template-parameter-list > class opt= id-expression
:
template<class T>
class Check;
template<
template<typename,typename> class C,
typename A, typename B
>
struct Check<C<A,B> >{
};
Hello , Hello TemplatedClass, :
Check<Hello> c; // nope, 'Hello' is not a template
typedef Hello:
class Hello
: TemplatedClass<int,float>
{
public:
typedef TemplatedClass<int,float> base_type;
};
:
c;//
C Check template TemplatedClass, Hello. , . , :
template<class T>
class CheckInternal;
template<
template<typename,typename> class C,
typename A, typename B
>
class CheckInternal<C<A,B> >{
public:
typedef A type_A;
typedef B type_B;
};
template<class T>
class Check{
typedef typename T::base_type T_base_type;
typedef typename CheckInternal<T_base_type>::type_A type_A;
typedef typename CheckInternal<T_base_type>::type_B type_B;
void foo(type_A a, type_B b){
}
};
C<Hello> c;