In addition, a type parameter can specify a default type argument. For example, the C++ standard’s stack
container adapter class template begins with:
template < class T, class Container = deque< T > >
which specifies that a stack
uses a deque
by default to store the stack
’s elements of type T
. The declaration
stack< int > values;
creates a stack
of int
s class-template specialization (behind the scenes) and uses it to instantiate the object named values
. The stack
’s elements are stored in a deque<int>
.
Default type parameters must be the rightmost (trailing) parameters in a template’s type-parameter list. When you instantiate a template with two or more default arguments, if an omitted argument is not the rightmost, then all type parameters to the right of it also must be omitted. As of C++11, you can now use default type arguments for template type parameters in function templates.