...

/

Fold Expressions

Fold Expressions

Get to know the types of fold expressions added in C++17 and their benefits in this lesson.

Implementing 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’ll look at several examples. Earlier in this section, we implemented a variable function template called sum that returned the sum of all its supplied arguments.

For convenience, we’ll 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...);
}
A variable function template that returns the sum of all its supplied arguments

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);
}
Implementation of the sum function template using fold expression

There’s no need for overloaded functions anymore. The expression (... + args) represents the fold expression, which upon evaluation becomes ((((arg0 + arg1) + arg2) + ... ) + argN). The enclosing parentheses are part of the fold expression. We can use this new implementation, just as we would use the initial one, as ...