Если вы внимательно прочитаете предоставленную вами кодовую ссылку, вы увидите это в комментариях @ line 112 -
// Нет явного построения / копирования / уничтожения для агрегатного типа.
std :: array - это агрегатный тип, который (элементы которого по отдельности) могут быть инициализированы с использованием списка инициализированных фигурных скобок, как обычный массив.
Код @ lines 109, 110
typedef _GLIBCXX_STD_C::__array_traits<_Tp, _Nm> _AT_Type;
typename _AT_Type::_Type _M_elems;
определяет регулярный массив в стеке с размером _Nm, который в вашем случае равен 2.
Таким образом, когда вы присваиваете arr список фигурных инициализаторов, список инициализаторов используется для создания временного std::array<int,2>
, который затем копируется в ваш массив с помощью оператора присваивания по умолчанию.Эта операция была бы успешной, только если размер списка инициализаторов меньше или равен 2. Когда вы передаете список фигурных инициализаторов с размером больше 2, он помечается как ошибка, поскольку невозможно создать std::array<int,2>
из списка в скобках размером больше 2.