Почему следующий код не компилируется:
#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_}
Проблема в том, что std::array
является агрегатом, поэтому вы не можете использовать фигурные скобки для вызова copy-ctor. Вам нужно будет указать элементы. Это также объясняет ваше сообщение об ошибке, оно пытается преобразовать a.i_
к элементу массива, который является size_t
, Поскольку вы не можете сделать это, вы должен использование i_(a.i_)
создать копию.
так должно быть
A( A const& a )
: i_( a.i_ ) {}