Неоднозначность std::initializer_list в 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

Я просто не уверен, что я делаю не так здесь.

1 ответ

Решение
Test(std::initializer_list<T>& list) : V(list){}

Это занимает std::initializer_list по неконстантной ссылке, но затем вы пытаетесь привязать к нему временный файл, что является незаконным

std::initializer_list разработан, чтобы быть легким, так что вы можете просто передать его по значению:

Test(std::initializer_list<T> list) : V(list){}
//                           ^ no &
Другие вопросы по тегам