Si hacemos varias definiciones de un espacio de nombres en un mismo o diferentes ficheros y se compilan todas juntas, el compilador las fusionará en una sola definición cuyos miembros serán la concatenación de los de definición realizada. Por ejemplo:
namespace A // (1){ class B1 {}}namespace A // (2){ class B2 {}}
namespace A // (1){ class B1 {}}
namespace A // (2){ class B2 {}}
Una definición como la anterior es tratada por el compilador exactamente igual que:
namespace A{ class B1 {} class B2 {}}
Hay que tener en cuenta que las sentencias using, ya sean de importación de espacios de nombres o de definición de alias, no son consideradas miembros de los espacios de nombres y por tanto no participan en sus fusiones. Así, el siguiente código es inválido:
namespace A{ class ClaseA {}}namespace B{ using A;}namespace B{ // using A; class Principal: ClaseA {}}
namespace A{ class ClaseA {}}
namespace B{ using A;}
namespace B{ // using A; class Principal: ClaseA {}}
Este código no es correcto porque aunque se importa el espacio de nombres A al principio de una definición del espacio de nombres donde se ha definido Principal, no se importa en la misma definición donde se deriva Principal de A.ClaseA. Para que el código compilase habría que descomentar la línea comentada.
Para preguntar utiliza los foros.