std::initializer_list Visual Studio 中的歧义
std::initializer_list ambiguity in Visual Studio
我正在尝试将 std::initializer_list 接受到通用构造函数中,如下所示:
template<typename T>
class Test{
std::vector<T> V;
Test(std::initializer_list<T>& list) : V(list){}
};
使用
Test<int> test{ 1, 2, 3, 4 };
但我收到错误:
error C2440: 'initializing' : cannot convert from 'initializer-list' to 'Test<int>' No constructor could take the source type, or constructor overload resolution was ambiguous
我只是不确定我做错了什么。
Test(std::initializer_list<T>& list) : V(list){}
这通过非 const 引用获取 std::initializer_list
,但您随后尝试将临时绑定到它,这是非法的
std::initializer_list
被设计成轻量级的,所以你可以按值传递它:
Test(std::initializer_list<T> list) : V(list){}
// ^ no &
我正在尝试将 std::initializer_list 接受到通用构造函数中,如下所示:
template<typename T>
class Test{
std::vector<T> V;
Test(std::initializer_list<T>& list) : V(list){}
};
使用
Test<int> test{ 1, 2, 3, 4 };
但我收到错误:
error C2440: 'initializing' : cannot convert from 'initializer-list' to 'Test<int>' No constructor could take the source type, or constructor overload resolution was ambiguous
我只是不确定我做错了什么。
Test(std::initializer_list<T>& list) : V(list){}
这通过非 const 引用获取 std::initializer_list
,但您随后尝试将临时绑定到它,这是非法的
std::initializer_list
被设计成轻量级的,所以你可以按值传递它:
Test(std::initializer_list<T> list) : V(list){}
// ^ no &