Почему запрещено открывать несколько пространств имен подряд? - PullRequest
16 голосов
/ 12 июня 2011

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

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

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

Ответы [ 2 ]

4 голосов
/ 12 июня 2011

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

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

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

0 голосов
/ 12 июня 2011

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

namespace foo { namespace bar {

}}
...