Class Templates
//primary class template
template <class TYPE1, int sz, template<TYPE1> class TYPE2>
    class list {...}
//partial specialization
template <class TYPE1, int sz, template<TYPE1> class TYPE2>
    class list <TYPE1 *,sz,TYPE2> {...}
//partial specialization
template <int sz, template<TYPE1> class TYPE2>
    class list<list, sz,TYPE2<list>>{...}
//partial specialization
template <template<TYPE1> class TYPE2>
    class list<list,100,TYPE2<list>>{...}
//explicit specialization
template <>  class list<list,100,list<list>>{...}