Possible Duplicate:
c++ why initializer_list behavior for std::vector and std::array are different
I defined simple 2D array (3X2):
std::array<std::array<int,3>,2> a {
{1,2,3},
{4,5,6}
};
I was surprised this initialization does not work, with gcc4.5 error: too many initializers for 'std::array<std::array<int, 3u>, 2u>'
Why can't I use this syntax?
I found workarounds, one very funny with extra braces, but just wonder why the first, easiest approach is not valid?
Workarounds:
// 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}
};
[UPDATE]
Ok, thanks to KerrekSB and comments I get the difference. So it seems that there is too little braces in my example, like in this C example:
struct B {
int array[3];
};
struct A {
B array[2];
};
B b = {{1,2,3}};
A a = {{
{{1,2,3}},
{{4,5,6}}
}};
std::array
is an aggregate. – Steckstd::array<int, 2> a{1,2};
is ill-formed as well (gcc 4.7.2 will incorrectly accept such code; clang 3.1 will not). See the duplicate to which I linked above. The short answer is: this is a known defect in the C++11 language standard. – Inhospitality