Декларативная область - 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.