Sintaxis de la lista de inicializadores en la lista de inicializadores de miembros usando C ++ 11

He estado pasando por 'Un recorrido por C ++'y Bjarne usa la función de lista de inicializadores de c ++ 11 en la inicialización de miembros en un constructor, de esta manera (usando llaves):

A a;
B b;
Foo(Bar bar):
  a{bar.a}, b{bar.b}
{}

Esto, sin embargo, no se compila antes de c ++ 11. ¿Cuál es la diferencia con la lista de inicializadores de miembros antiguos (usando corchetes):

Foo(Bar bar):
  a(bar.a), b(bar.b)
{}

Entonces, ¿cuál es la diferencia y cuándo se debe preferir uno sobre el otro?

Respuestas a la pregunta(3)

Su respuesta a la pregunta