Довольно неприятно получить ошибку компилятора, что нет такого пространства имен, как std ... Что думает компилятор? Конечно, он существует!
Что ж, да, но как и в случае с библиотечными функциями, оно должно быть объявлено первым. Это то, что делает первая строка.
С переименованием __std_alias это позволяет им дать новый псевдоним пространству имен. Вы можете решить сделать это когда-нибудь в своем собственном коде.
Возможно, вы хотите использовать shared_ptr в своем коде, но не хотите выделять свой код для использования увеличения пространства имен или std. Таким образом, вы можете создать псевдоним и указать его на boost или std. То же самое с другими функциями, которые есть в библиотеках boost, которые позже стали стандартными.
Это не связывает вас с использованием этого пространства имен для всего, поскольку вы можете иметь более одного псевдонима, и вы можете иметь более одного, указывающего на одно и то же реальное пространство имен.
Допустим, мы хотим вызвать нашу библиотеку умных указателей sml. Мы можем сделать
namespace sml = boost; // or std
в одном месте кода и #include <boost/shared_ptr.hpp>
с этой точки в коде (тот же заголовок).
В любом другом месте нашего кода мы используем sml::shared_ptr
. Если мы когда-нибудь переключимся с boost на std, просто измените один заголовок, а не весь код.