Go to the first, previous, next, last section, table of contents.


5.2.3.2 Class and Namespace Names

The syntax of a complete-class-name, class-name, and a complete-namespace-name, is as in the proposed C++ standard [ANSI95]. The nonterminals original-class-name, original-namespace-name, and namespace-alias-name are all previously-declared identifiers (see section 4.9 Context-Dependent Keywords).

complete-class-name ::= [ :: ] [ nested-name-specifier ] class-name
complete-namespace-name ::= [ :: ] [ nested-name-specifier ] namespace-name
nested-name-specifier ::= class-name :: | namespace-name ::
        | nested-name-specifier class-name ::
        | nested-name-specifier namespace-name ::
        | nested-name-specifier template template-class-instance ::
class-name ::= original-class-name | typedef-class-name | template-class-instance
namespace-name ::= original-namespace-name | namespace-alias-name

The scope resolution operator, ::, has the same meaning as in C++ (see Section r.3.2 of [Stroustrup91]).

For example, if TerminalUtilities is a original-namespace-name containing the declarations of TerminalControllerClass and TermControl, if TerminalControllerClass is an original-class-name, if TermControl is a typedef-class-name, and if Set<int> is a template-class-instance, then each line of the following is a complete-class-name.

Set<int>
::Set<int>
TerminalUtilities::TermControl
::TerminalUtilities::TermControl
TerminalUtilities::TerminalControllerClass

However, TermControl is not a complete-class-name except with in the scope of the declaration of TerminalUtilities.

Continuing the above example, each line of the following is a complete-namespace-name.

TerminalUtilities
::TerminalUtilities

Continuing the above example, each line of the following is a nested-name-specifier.

Set<int>::
TerminalUtilities::
TerminalUtilities::TermControl::
TerminalUtilities::TerminalControllerClass::


Go to the first, previous, next, last section, table of contents.