686 Часть IV. Новые возможности C++
неясным вопрос: как все же обеспечить доступ к версии i, определенной в анонимном пространстве. Ответ достаточно прост — такой доступ невозможен, если только данное анонимное пространство не вложено в другое, именованное.
Подведем краткий итог: все объявления в не вложенных анонимных пространствах рассматриваются как глобальные, но компилятор отличает их от других, действительно глобальных определений. Совпадения имен допускаются, но при этом только "действительно" глобальные определения оказываются доступными и только с помощью операции разрешения области видимости без имени.
Рассмотрим, что происходит при вложении анонимных пространств. Листинг 24.13 описывает пример такой ситуации.
ftinclude <iostream.h>
namespace Outer {
// Анонимное пространство имен
namespace
(
int i = 8;
}
namespace Inner t
int i = 10;
void AFunc()
{
cout « "Inner::AFunc\n";
cout « i « "\n";
cout « Inner::! « "\n";
} }
void AFunc()
{
cout « "Outer::AFunc\n";
cout « i « "\n";
cout « Inner::! « "\n";
// Ошибка — Outer::! не существует // cout « Outer::! « "\n";
void main() (
Outer::Inner::AFunc();