As strange as it may seem, C++ doesn't allow you to re-open a namespace using a qualified name; you can re-open it only by using its nested name. For example, the following program defines a namespace called A that has two embedded namespaces, B and C. The attempt to re-open A::B with a qualified name and add the member d to it fails to compile. By contrast, the addition of a the member e to the same namespace succeeds because in this case the programmer used nested namespaces:
namespace A
{
namespace B
{
int a;
}
int b;
namespace C
{
int c;
}
}
namespace A::B // attempt to re-open using a qualified name
{
int d; // this won't compile
}
namespace A // re-opening namespace B in A
{
namespace B
{
int e; // fine, add a new member to namespace B in A
}
}
int main()
{
A::B::a = 1;
A::b = 2;
A::C::c = 3;
A::B::d = 4; // won't compile
A::B::e = 5;
}