¿Por qué no se puede inicializar de manera simple (con llaves) 2D std :: array?

Posible duplicado:
c ++ por qué el comportamiento de initializer_list para std :: vector y std :: array son diferentes

Definí una matriz 2D simple (3X2):

std::array<std::array,2> a { {1,2,3}, {4,5,6} }; 

Me sorprendió que esta inicialización no funcione, con el error gcc4.5: too many initializers for 'std::array<std::array, 2u>'

¿Por qué no puedo usar esta syntax?

Encontré soluciones, una muy divertida con llaves adicionales, pero me pregunto por qué el primer enfoque más fácil no es válido.

Soluciones:

  // EXTRA BRACES std::array<std::array,2> a {{ {1,2,3}, {4,5,6} }}; // EXPLICIT CASTING std::array<std::array,2> a { std::array{1,2,3}, std::array{4,5,6} }; 

[ACTUALIZAR]

Ok, gracias a KerrekSB y comentarios, me da la diferencia. Parece que hay muy pocas llaves en mi ejemplo, como en este ejemplo de C:

 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 es un agregado que contiene una matriz C. Para inicializarlo, necesita llaves externas para la clase misma y llaves internas para la matriz C:

 std::array a1 = { { 1, 2, 3 } }; 

Aplicar esta lógica a una matriz 2D le da a esto:

 std::array, 2> a2 { { { {1, 2, 3} }, { { 4, 5, 6} } } }; // ^ ^ ^ ^ ^ ^ // | | | | | | // | +-|-+------------|-+ // +-|-+-|------------+---- C++ class braces // | | // +---+--- member C array braces