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-specifiertemplate
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.