Создание копии std :: array с использованием фигурных скобок

Почему следующий код не компилируется:

#include <array>

struct A
{
std::array<size_t, 5> i_;

A() {}

A( A const& a)
: i_{ a.i_ } {}
};

int main()
{
A a1;
A a2 = a1;

return 0;
}

GCC 4.8.1 говорит

ошибка: невозможно преобразовать const std :: array в long unsigned int при инициализации
: i_ {a.i_}

3

Решение

Проблема в том, что std::array является агрегатом, поэтому вы не можете использовать фигурные скобки для вызова copy-ctor. Вам нужно будет указать элементы. Это также объясняет ваше сообщение об ошибке, оно пытается преобразовать a.i_ к элементу массива, который является size_t, Поскольку вы не можете сделать это, вы должен использование i_(a.i_) создать копию.

4

Другие решения

так должно быть

A( A const& a )
: i_( a.i_ ) {}
2