A namespace-declaration consists of the keyword namespace
, followed by a namespace name and body, optionally followed by a semicolon.
A namespace-declaration may occur as a top-level declaration in a compilation-unit or as a member declaration within another namespace-declaration. When a namespace-declaration occurs as a top-level declaration in a compilation-unit, the namespace becomes a member of the global namespace. When a namespace-declaration occurs within another namespace-declaration, the inner namespace becomes a member of the outer namespace. In either case, the name of a namespace must be unique within the containing namespace.
Namespaces are implicitly public
and the declaration of a namespace cannot include any access modifiers.
Within a namespace-body, the optional using-directives import the names of other namespaces and types, allowing them to be referenced directly instead of through qualified names. The optional namespace-member-declarations contribute members to the declaration space of the namespace. Note that all using-directives must appear before any member declarations.
The qualified-identifier of a namespace-declaration may be single identifier or a sequence of identifiers separated by ".
" tokens. The latter form permits a program to define a nested namespace without lexically nesting several namespace declarations. For example,
namespace N1.N2 { class A {} class B {} }
is semantically equivalent to
namespace N1 { namespace N2 { class A {} class B {} } }
Namespaces are open-ended, and two namespace declarations with the same fully qualified name contribute to the same declaration space (§3.1). In the example
namespace N1.N2 { class A {} } namespace N1.N2 { class B {} }
the two namespace declarations above contribute to the same declaration space, in this case declaring two classes with the fully qualified names N1.N2.A
and N1.N2.B
. Because the two declarations contribute to the same declaration space, it would have been an error if each contained a declaration of a member with the same name.