Как передать 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
,
Что я не понимаю?