Как использовать унифицированный синтаксис C ++ 11?

Я не могу понять, когда и как использовать новый унифицированный синтаксис инициализации в C ++ 11.
Например, я получаю это:

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

Почему это не работает во втором случае? Ошибка:

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

с этой версией g ++g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2.

И с примитивными данными, какой синтаксис я должен использовать?

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

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

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