When a programmer uses a vector, one instantiates it with a specific data type, for example, int, string or double.
The following is an example of a class that defines an explicit full template specialization of KeyValuePair by pairing integers with strings.
The next example class KeyStringPair is derived from the original KeyValuePair with a new name, and defines a partial template specialization.
For instance, the following is also a valid example of a partial specialization of the original KeyValuePair class.
In the example listed above, note that while the last two definitions of the function Foo are legal C++, they are considered ill-formed according to the standard because they are non-overloadable declarations.
[4] However, these functions can still be called by explicitly indicating the signature to the compiler, as demonstrated by the following program.