Es bastante molesto para conseguir un error del compilador que no hay tal namespace como std ... ¿Qué está pensando el compilador? ¡Por supuesto que existe!
Bueno, sí, pero al igual que con las características de la biblioteca, debe declararse primero. Eso es lo que está haciendo la primera línea.
Con el cambio de nombre de __std_alias, les permite dar un nuevo alias a un espacio de nombres. Puede decidir hacer esto en su propio código algún día.
Quizás desee utilizar shared_ptr en su código, pero no desea dedicar el código al uso de namespace boost o std. Por lo tanto, puede crear un alias y "señalarlo" en boost o std. Lo mismo con otras características que están en las bibliotecas de impulso que luego se convirtieron en estándar.
Esto no lo vincula con el uso de este espacio de nombres para todo, ya que puede tener más de un alias y puede tener más de un apuntando al mismo espacio de nombres real.
Digamos que queremos llamar a nuestra biblioteca de punteros inteligentes sml. Podemos hacer
namespace sml = boost; // or std
en un solo lugar en el código y #include <boost/shared_ptr.hpp>
desde ese punto en el código (misma cabecera).
En cualquier parte de nuestro código utilizamos sml::shared_ptr
. Si alguna vez cambiamos de boost a std, simplemente cambie el encabezado, no todo su código.
'namespace std {}' no anularía 'std', simplemente no le agregaría nada :) Y, por supuesto, ponga el nombre en el alcance. –
Ok, solo es para ponerlo en el alcance del archivo y el contenido del espacio de nombres sigue siendo el mismo. Las llaves '{}' están ahí solo por el hecho de estar allí. No agregan nada al espacio de nombres ni se llevan nada. ¡Gracias! – Nav