Возможный дубликат:
С++, почему поведение initializer_list для std::vector и std:: array различается
Я определил простой 2D-массив (3X2):
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
Я был удивлен, что эта инициализация не работает, с ошибкой gcc4.5: too many initializers for 'std::array<std::array<int, 3u>, 2u>'
Почему я не могу использовать этот синтаксис?
Я нашел обходные пути, один очень забавный с дополнительными фигурными скобками, но просто удивляюсь, почему первый, самый простой подход недействителен?
Обходные:
// EXTRA BRACES
std::array<std::array<int,3>,2> a {{
{1,2,3},
{4,5,6}
}};
// EXPLICIT CASTING
std::array<std::array<int,3>,2> a {
std::array<int,3>{1,2,3},
std::array<int,3>{4,5,6}
};
[ОБНОВЛЕНИЕ]
Хорошо, благодаря KerrekSB и комментариям я получаю разницу. Похоже, что в моем примере слишком мало фигурных скобок, как в этом примере на C:
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};