Анонимное пространство имен - PullRequest
4 голосов
/ 09 сентября 2010

A последний поток на SO вызвал это.

Анонимное пространство имен считается эквивалентным

  namespace unique { /* empty body */ } 
  using namespace unique; 
  namespace unique { namespace-body }

Я не могу вспомнить точную причину относительнопочему это не эквивалентно

  namespace unique { namespace-body } 
  using namespace unique;

Также попытался поиск (в том числе Google), но тщетно.Пожалуйста, поделитесь любой информацией, которая у вас есть в этом отношении.

1 Ответ

4 голосов
/ 09 сентября 2010

Существующая в настоящее время спецификация была введена в 1995 году в N0783 для исправления углового случая.Процитируем эту статью (стр. 9):

WP определяет семантику безымянного пространства имен как эквивалентную:

namespace UNIQUE {
    // namespace body
}
using namespace UNIQUE;

Это неверно, потому что делает код вбезымянное пространство имен, зависящее от того, находится ли код в исходном пространстве имен или в расширении пространства имен.

namespace {} // If you remove this line, the
             // use of ::f below is invalid

namespace {
    void f()
    {
        using ::f;
    }
}

WP следует изменить, чтобы определить безымянное пространство имен как эквивалентное:

namespace UNIQUE {}
using namespace UNIQUE;
namespace UNIQUE {
    // namespace body
}
...