为什么不能将此参数包直接解包到向量初始值设定项列表中?

Why can't this argument pack be unpacked directly into a vector initializer list?

我不明白为什么代码片段中注释掉的行不起作用。另外,vec 的实际类型是什么?看起来它也可以匹配 std::list 的初始化格式。

我仔细查看了 this and 是最终给了我工作解决方案的东西,但现在我不明白为什么它有效而注释行不起作用,或者你如何知道实际类型(因此 time/memory 的复杂性)vec.

#include <iostream>
#include <vector>


template <class ...T>
void func(T... arg_name) {
    // std::vector<T> vec{arg_name...};
    auto vec{arg_name...};
    for (auto i : vec) {
        std::cout << i << std::endl; 
    }
}


int main()
{
    func(1, 2, 3, 4);
}

当我取消注释 std::vector<T> vec{arg_name...} 并注释掉 auto vec{arg_name...} 时收到的错误消息是

In function 'void func(T ...)':
8:20: error: parameter packs not expanded with '...':
8:20: note:         'T'
10:19: error: range-based 'for' expression of type 'auto' has incomplete type

T是参数包,而vector取一个类型参数作为元素的类型,可以用common_type到select它:

std::vector<std::common_type_t<T...>> vec{arg_name...};