6 Basic concepts [basic]

6.3 Scope [basic.scope]

6.3.6 Namespace scope [basic.scope.namespace]

Декларативная область - namespace-definitionэто его namespace-body. Объекты, объявленные в a, namespace-bodyназываются members принадлежащими пространству имен, а имена, введенные этими объявлениями в декларативную область пространства имен, называются member names принадлежащими пространству имен. Имя члена пространства имен имеет область пространства имен. Его потенциальная область действия включает пространство имен, начиная с имени point of declaration ; и для каждого, using-directiveкоторый назначает пространство имен члена, потенциальная область действия члена включает ту часть потенциальной области видимости, using-directiveкоторая следует за точкой объявления члена. [Example:

namespace N {
  int i;
  int g(int a) { return a; }
  int j();
  void q();
}
namespace { int l=1; }
// the potential scope of l is from its point of declaration to the end of the translation unit

namespace N {
  int g(char a) {   // overloads N​::​g(int)
    return l+a;     // l is from unnamed namespace
  }

  int i;            // error: duplicate definition
  int j();          // OK: duplicate function declaration

  int j() {         // OK: definition of N​::​j()
    return g(i);    // calls N​::​g(int)
  }
  int q();          // error: different return type
}

end example]

На член пространства имен также можно ссылаться после того, как ​::​ оператор разрешения области видимости ([expr.prim]) применен к имени его пространства имен или имени пространства имен, которое назначает пространство имен члена в using-directive; см [namespace.qual].

Самая внешняя декларативная область единицы перевода - это также пространство имен, называемое global namespace. Имя, объявленное в глобальном пространстве имен, имеет global namespace scope (также называется global scope). Потенциальная область видимости такого имени начинается point of declaration и заканчивается в конце единицы трансляции, которая является ее декларативной областью. Имя с глобальной областью пространства имен называется global name.