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();