Template arguments (C++ only)

There are three kinds of template arguments corresponding to the three types of template parameters: A template argument must match the type and form specified by the corresponding parameter declared in the template.

C++11
When a parameter declared in a template is a template parameter pack, it corresponds to zero or more template arguments. For more information, see Variadic templates (C++11)
C++11

To use the default value of a template parameter, you omit the corresponding template argument. However, even if all template parameters have defaults, you still must use the angle brackets <>. For example, the following will yield a syntax error:
template<class T = int> class X { };
X<> a;
X b;
The last declaration, X b, will yield an error.