Это означает, что упоминаемое пространство имен testing
относится к пространству глобальных имен, а не к другому вложенному пространству имен с именем testing
.
.
Рассмотрим следующий угловой случай и, возможно, пример плохого дизайна:
namespace foo
{
struct gizmo{int n_;};
namespace bar
{
namespace foo
{
float f_;
};
};
};
int main()
{
using namespace foo::bar;
::foo::gizmo g;
g.n_;
}
Есть 2 пространства имен с именем foo
. Одним из них является свисание верхнего уровня с «глобального» пространства имен, а другое вложено в foo::bar
. затем мы переходим к using namespace foo::bar
, что означает, что любая безусловная ссылка на gizmo
подберет такую же в foo::bar::foo
. Если мы действительно хотим получить значение в foo
, то мы можем использовать для этого явную квалификацию:
::foo::gizmo