折叠逗号

需要在参数包中的每个元素上执行特定功能是一种常见操作。使用 C++ 11,我们能做的最好的事情是:

template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
    using expander = int[];
    (void)expander{0,
        (void(os << args), 0)...
    };
}

但是使用 fold 表达式,上面简化为:

template <class... Ts>
void print_all(std::ostream& os, Ts const&... args) {
    (void(os << args), ...);
}

不需要神秘的样板。