Como usar a sintaxe de inicialização uniforme do C ++ 1

Não consigo entender quando e como usar a nova sintaxe de inicialização uniforme no C ++ 11.
Por exemplo, recebo o seguinte:

std::string a{"hello world"}; // OK
std::string b{a};  // NOT OK

Por que não funciona no segundo caso? O erro é:

error: no matching function for call to ‘std::basic_string<char>::basic_string(<brace enclosed initializer list>)’    

com esta versão do g ++g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2.

E com dados primitivos, que sintaxe devo usa

int i = 5;
int i{5};
int i = {5};

questionAnswers(3)

yourAnswerToTheQuestion