Рассмотрим следующий код:
#include <array>
struct A
{
int a;
int b;
};
static std::array<A, 4> x1 =
{
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
};
static std::array<A, 4> x2 =
{
{
{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
}
};
static std::array<A, 4> x3 =
{
A{ 1, 2 },
A{ 3, 4 },
A{ 5, 6 },
A{ 7, 8 }
};
static std::array<A, 4> x4 =
{
A{ 1, 2 },
{ 3, 4 },
{ 5, 6 },
{ 7, 8 }
};
Компиляция с помощью gcc:
$ gcc -c --std=c++11 array.cpp
array.cpp:15:1: error: too many initializers for ‘std::array<A, 4ul>’
};
^
$
NB1: комментируя первый оператор инициализации, код компилируется без ошибок.
NB2: Преобразование всех инициализаций в вызовы конструктора дает одинаковые результаты.
NB3: MSVC2015 ведет себя одинаково.
Я вижу, почему первая инициализация не скомпилируется, и почему вторая и третья в порядке. (например, см. С++ 11: Исправить инициализацию std:: array?.)
Мой вопрос: зачем именно компилируется окончательная инициализация?