Consider the following function declaration:
template <typename ... Items_To_Print> void print_as_csv(std::ostream & stream, char delimiter, Items_To_Print && ... items_to_print);
Though the declaration may seem rather involved, the actual application of this function is quite simple:
print_as_csv(std::cout, ';', 2.0, 42, "hello");
The compiler knows how to create an instance of print_as_csv by a mechanism called template argument deduction. It works only for functions, because the compiler needs arguments to deduce the types from. There are, however, template functions for which not all template arguments can be deduced by the compiler.