Kiedy można pominąć nawiasy zewnętrzne na liście inicjatorów?
Mam błąd C2078 w VC2010 podczas kompilowania poniższego kodu.
struct A
{
int foo;
double bar;
};
std::array<A, 2> a1 =
// error C2078: too many initializers
{
{0, 0.1},
{2, 3.4}
};
// OK
std::array<double, 2> a2 = {0.1, 2.3};
Dowiedziałem się, że poprawna składnia dlaa1
jest
std::array<A, 2> a1 =
{{
{0, 0.1},
{2, 3.4}
}};
Pytanie brzmi: dlaczego wymagane są dodatkowe szelkia1
ale nie jest wymaganea2
?
Aktualizacja
Pytanie wydaje się nie być specyficzne dla std :: array. Kilka przykładów:
struct B
{
int foo[2];
};
// OK
B meow1 = {1,2};
B bark1 = {{1,2}};
struct C
{
struct
{
int a, b;
} foo;
};
// OK
C meow2 = {1,2};
C bark2 = {{1,2}};
struct D
{
struct
{
int a, b;
} foo[2];
};
D meow3 = {{1,2},{3,4}}; // error C2078: too many initializers
D bark3 = {{{1,2},{3,4}}};
Nadal nie rozumiem dlaczegostruct D
daje błąd, ale B i C nie.