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

Why is this C++ fold expression valid?

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

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

第 * 行中 "pack"、"op" 和 "init" 的值是多少?

这个例子来自 Bjarne Stroustrup 的 A Tour of C++ 书的第 244 页,似乎在这个例子中忘记了一个逗号,因此我感到困惑。

语法无效。它缺少一个逗号(很可能是错字):

(vec.push_back(ts), ...)
//                ^

所以是 "unary right fold":

( pack op ... )

其中 op 是逗号。