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.

questionAnswers(1)

yourAnswerToTheQuestion