为什么此C ++折叠表达式有效?

Sas*_*yal 7 c++ syntax fold-expression

cppreference上,我看到折叠表达式有四种类型,一元右,一元左,二进制右和二进制左。这种折叠表达式的类型是什么?我很难理解它为什么有效。

    template <typename Res, typename... Ts>
    vector<Res> to_vector(Ts&&... ts) {
        vector<Res> vec;
        (vec.push_back(ts) ...); // *
        return vec;
    }
Run Code Online (Sandbox Code Playgroud)

*行中的“ pack”,“ op”和“ init”的值是什么(如果有)?

该示例摘自Bjarne Stroustrup的A C C ++书的第244页,并且似乎在示例中忘记了逗号,因此引起了我的困惑。

bol*_*lov 11

语法无效。它缺少逗号(很可能是拼写错误):

(vec.push_back(ts), ...)
//                ^
Run Code Online (Sandbox Code Playgroud)

这样就是“一元对折”:

( pack op ... )
Run Code Online (Sandbox Code Playgroud)

op是一个逗号。