Полезные новации С++17. Выражения свертки (Fold expressions)
Начиная с C++11, в языке появились пакеты параметров для шаблонов с переменным количеством аргументов. Такие пакеты позволяют реализовывать функции, принимающие переменное количество параметров. Иногда эти параметры объединяются в одно выражение, чтобы на его основе можно было получить результат работы функции. Решение этой задачи значительно упростилось с выходом C++17, где появились выражения свертки. Реализуем функцию, которая принимает переменное количество параметров арифметических типов и возвращает их сумму. template <typename ... Ts> auto sum(Ts ... ts) { return (ts + ...); } Следует обратить внимание на обязательность скобок в выражении (ts + ...). Функцию можно использовать так: int the_sum {sum(1, 2, 3, 4, 0.5)}; // Значение: 10.5 Общий смысл понятен. Поработаем над деталями. Первое наше упущение - отсутствие возможности работать с пустым списком параметров. Инстанцирование sum() приводит к ошибке ...