Line 35 outputs the value of variable doubleInUnnamed
, which is directly accessible as part of the unnamed namespace. Line 38 outputs the value of global variable integer1
. For both of these variables, the compiler first attempts to locate a local declaration of the variables in main
. Since there are no local declarations, the compiler assumes those variables are in the global namespace
.
Lines 41–43 output the values of PI
, E
, integer1
and FISCAL3
from namespace Example
. Notice that each must be qualified with Example::
because the program does not provide any using
directive or declarations indicating that it will use members of namespace Example
. In addition, member integer1
must be qualified, because a global variable has the same name. Otherwise, the global variable’s value is output. FISCAL3
is a member of nested namespace Inner
, so it must be qualified with Example::Inner::
.
Function printValues
(defined in lines 49–55) is a member of Example
, so it can access other members of the Example namespace
directly without using a namespace qualifier. The output statement in lines 51–54 outputs integer1
, PI
, E
, doubleInUnnamed
, global variable integer1
and FISCAL3
. Notice that PI
and E
are not qualified with Example
. Variable doubleInUnnamed
is still accessible, because it’s in the unnamed namespace and the variable name does not conflict with any other members of namespace Example
. The global version of integer1
must be qualified with the scope resolution operator (::
), because its name conflicts with a member of namespace Example
. Also, FISCAL3
must be qualified with Inner::
. When accessing members of a nested namespace
, the members must be qualified with the namespace
name (unless the member is being used inside the nested namespace
).
Common Programming Error 21.1
Placing main in a namespace is a compilation error.
3.15.168.211