Подтвердить что ты не робот

Почему запрещается открывать несколько пространств имен?

Можно сделать using namespace foo::bar; (т.е. используя внутреннее пространство имен без использования внешнего пространства имен вначале/вообще), почему стандарт запрещает делать следующее?

namespace foo::bar {
  // open nested namespace bar in foo and extend it...
}

Я не ищу обходного пути, просто возможное обоснование того, почему это не разрешено.

4b9b3361

Ответ 1

Я не уверен, что "запрещено" - это правильное слово - возможно, это был просто недосмотр. Это довольно малое удовольствие, которое не имеет большого значения.

Вы также можете счесть точку зрения, что пространство имен foo еще не создано при написании foo::bar, поэтому включение этого синтаксиса делает его похожим на то, что foo уже был создан, когда он не был.

Вы также можете пойти дальше и запросить возможность писать class Foo::MyClass {... для определения MyClass в пространстве имен foo, а также для функций, переменных и т.д. Но эта функция действительно необходима и решает любую конкретную проблему

Ответ 2

Зачем компиляторы реализовать это, когда вы могли просто сделать

namespace foo { namespace bar {

}}