Переадресация классов в пространствах имен

Я был довольно удивлен, узнав, что я не мог переслать объявление класса из другой области с помощью оператора разрешения области, т.е.

class someScope::someClass;

Вместо этого полная декларация должна использоваться следующим образом:

namespace
{
    class someClass;
}

Может кто-нибудь объяснить, почему это так?

ОБНОВЛЕНИЕ. Чтобы уточнить, я задаю , почему это так.

Ответы

Ответ 1

Кажется, что ответ кроется в спецификации С++:

3.3.5 "Область пространства имен" в стандарте.

Объекты, объявленные в пространстве имен считаются членами пространство имен и имена, введенные эти объявления в декларативная область пространства имен называются именами участников Пространство имен.

Элемент пространства имен также может быть упоминается после:: scope (5.1) применяется к имя своего пространства имен или имя пространства имен, которое назначает пространства имен участников в с помощью директивы

Ответ 2

Вы не можете объявить класс вне своего пространства имен, потому что компилятор не мог знать тип someScope.

namespace {} требуется для объявления существования пространства имен, а затем объявить класс someClass в вашу область действия.

Ответ 3

Я не знаю, почему. Возможно, потому что в вашем первом фрагменте кода someScope не объявлен. Это может быть пространство имен или имя класса. Если someScope - это имя класса, вы не можете самостоятельно переслать объявление члена класса другого класса.