Как передать braced-init-list в конструктор `std::array`?

Можно ли передать точный список braced-init-list std::arrayконструктор? Это может быть необходимо, так как std::array не поддерживает присвоение списка инициализаторов.

Попытка адаптировать принятый ответ на этот вопрос: Как создать объект std:: array со списком инициализаторов? (укороченная ссылка ответа: /questions/32852529/kak-sozdat-obekt-stdarray-so-spiskom-initsializatorov/32852539#32852539) к моей проблеме я придумал следующее "решение" проблемы передачи списка фигурных скобок в конструктор std::array:

template<class T, std::size_t N> struct ArrayWrapper
{
    std::array<T,N> arr;
    ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}
}

Я надеялся, что это позволит следующий синтаксис:

int main()
{
  ArrayWrapper<int, 4> aw{{1,2,3,4}};
  std::cout << aw.arr[2] << '\n';
}

Однако мне это не удалось. Это не скомпилируется: http://ideone.com/VJVU1X

Я не уверен, в чем моя ошибка. Я надеялся, что эта линия

ArrayWrapper(T &&... init) : arr{{std::forward<T>(init)...}} {}

будет ловить точные элементы списка braced-init-list, переданного ArrayWrapperконструктор, и направить их в конструктор std::array,

Что я не понимаю?

0 ответов

Другие вопросы по тегам