Non type argument and default type argument only define one template
body(only one recipe). But Specialization need to define a generic template
body(one recipe), For another type, It need to define a different template
body(another recipe), because the code will be different with generic
one.
Instantiation is different with specialization. For instantiation, it
will use template function to produce function body, but
for specializaiton, you have to redefine you own function
body
Template<typename T> void sortedArrary (T) {...}; template void sortedArray<Person>(Person) // instantiation template<> void sortedArray<Person>(Person){ // specialization. .... //give you own definition of fun body. };