Parameter Packs

Understand the role of parameter packs in allowing functions and classes to accept varying template arguments.

A template or function parameter pack can accept zero, one, or more arguments. The standard doesn’t specify any upper limit for the number of arguments, but in practice, compilers may have some. What the standard does is recommend minimum values for these limits, but it doesn’t require any compliance on them. These limits are as follows:

  • For a function parameter pack, the maximum number of arguments depends on the limit of arguments for a function call, which is recommended to be at least 256.

  • For a template parameter pack, the maximum number of arguments depends on the limit of template parameters, which is recommended to be at least 1,024.

The sizeof operator

The number of arguments in a parameter pack can be retrieved at compile-time with the sizeof... operator. This operator returns a constexpr value of the std::size_t type. Let’s see this at work in a couple of examples.

In the first example, the sizeof... operator is used to implement the end of the recursion pattern of the variadic function template sum with the help of a constexpr if statement. If the number of the arguments in the parameter pack is zero (meaning there’s a single argument to the function) then we’re processing the last argument, so we just return the value. Otherwise, we add the first argument to the sum of the remaining ones. The implementation looks as follows:

Get hands-on with 1200+ tech skills courses.