A fold expression applies an operator across the elements of a parameter pack. C++17 replaces the recursive unpacking required in C++11 with a compact expression such as (... + tail). section 9.3.1
Summing a parameter pack
template<typename... Ts> auto add(const Ts&... tail) { return (... + tail); } accepts values of potentially different deduced types. Calling add(1, 2, 3) produces ((1 + 2) + 3), while placing the dots on the other side produces (1 + (2 + 3)).
