initializer_list в списке инициализации

Я хочу инициализировать базовый класс с std::initializer_list,

struct A : public std::array<int, 4>
{
  // This constructor works fine
  A()
  : std::array<int, 4>{{ 1, 2, 3, 4 }}
  {
  }

  // THIS CONSTRUCTOR FAILS TO COMPILE
  A(std::initializer_list<int> il)
  : std::array<int, 4>{il}
  {
  }
};

Ошибка GCC для второго конструктора

ошибка: массив должен быть инициализирован инициализатором в скобках

То, что я хочу, это инициализировать новый экземпляр A с initializer_list, как это

A var{{ 1, 2, 3, 4 }}

и передать его в базовый класс.

2 ответа

Класс std::array не имеет конструктора, принимающего std::initializer_list,

Единственный способ сделать это так:

#include <array>
#include <initializer_list>

struct A : public std::array<int, 4>
{
    A()
    : std::array<int, 4>{{ 1, 2, 3, 4 }}
    {
    }

    A(std::array<int, 4> il)
    : std::array<int, 4>(il)
    {
    }
};

int main ()
{
    A a ({{ 1, 2, 3, 4 }});
}

Это говорит о том, что array может быть инициализирован "инициализатором в скобках", как в первом ctor, но не initializer_list как в твоем втором. Нет массива ctor, который принимает initializer_list. На самом деле, нет массивов для массивов, кроме неявно объявленных специальных функций-членов.

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