Когда внешние скобки могут быть опущены в списке инициализатора?

Я получил ошибку C2078 в VC2010 при компиляции кода ниже.

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};

Я узнал, что правильный синтаксис дляa1 является

std::array<A, 2> a1 = 
  {{
    {0, 0.1},
    {2, 3.4}
  }};

Вопрос в том, почему дополнительные скобки требуются дляa1 но не требуется дляa2?

Update

Вопрос, кажется, не является специфическим для std :: array. Некоторые примеры:

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}}};

Я до сих пор не понимаю, почемуstruct D выдает ошибку, но B и C не 'т.

Ответы на вопрос(1)

Ваш ответ на вопрос