Its a explicit template specialization.
There are two types of template specialization
1. Explicit
template<> void sort<char*>(Array<char*>&);
2. Partial
template<class T1, class T2, int I>
class A { };
We can specialize this for the case when T2 is a T1*:
template<class T, int I>
class A<T, T*, I> { };
Or for the case when T1 is any pointer:
template<class T1, class T2, int I>
class A<T1*, T2, I> { };
Or for the case when T1 is int and T2 is any pointer and I is 5:
template<class T>
class A<int, T*, 5> { };
Or for the case when T2 is any pointer:
template<class T1, class T2, int I>
class A<T1, T2*, I> { };
Declarations 2 to 5 declare partial specializations of the primary template.
[edit]Fixed so that all the angle brackets show[/edit]
[edit:rjm]added <pre> tags[/edit]