Please note that the content of this book primarily consists of articles available from Wikipedia or other free sources online. When a function or class is instantiated from a template, a specialization of that template is created by the compiler for the set of arguments used. However, the programmer may decide to implement a special version of a function for a given set of template arguments which is called an explicit specialization. If a class template is specialized by a subset of its parameters it is called partial template specialization. If all of the parameters are specialized it is a full specialization. Function templates cannot be partially specialized. Explicit specialization is used when the behavior of a function or class for particular choices of the template parameters must deviate from the generic behavior: that is, from the code generated by the main template, or templates.