Visual Studio中的std :: initializer_list歧义

时间:2015-11-19 15:31:19

标签: c++ templates constructor initializer-list

我正在尝试将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

我只是不确定我在这里做错了什么。

1 个答案:

答案 0 :(得分:4)

Test(std::initializer_list<T>& list) : V(list){}

这需要std::initializer_list非const引用,但是你尝试将临时绑定到它,这是非法的

std::initializer_list设计为轻量级,因此您可以按值传递它:

Test(std::initializer_list<T> list) : V(list){}
//                           ^ no &