Fold expressions
A fold expression is an expression involving a parameter pack that folds (or reduces) the elements of the parameter pack over a binary operator. To understand how this works, we will look at several examples. Earlier in this chapter, we implemented a variable function template called sum
that returned the sum of all its supplied arguments. For convenience, we will show it again here:
template <typename T> T sum(T a) { return a; } template <typename T, typename... Args> T sum(T a, Args... args) { return a + sum(args...); }
With fold expressions, this implementation that requires two overloads can be reduced to the following form:
template <typename... T> int sum(T... args) { return (... + args); }
There is no need for overloaded functions anymore. The expression (... + args)
represents the fold expression, which upon evaluation becomes ((((arg0 + arg1) + arg2) + … ) + argN...