Объявление класса внутри класса допустимо. (Вложенные классы)
Объявление пространства имен внутри класса недопустимо.
Вопрос заключается в следующем: есть ли веская причина (кроме проблем грамматики/синтаксиса c++) запретить объявление пространства имен внутри класса?
Что касается того, почему я хотел бы сделать это, вот пример:
Позвольте иметь базовую делькарацию контейнера двоичного дерева
template<typename Data>
class binary_tree
{
public:
... stuff ....
private:
... iterators class declaration ...
public:
typedef left_depth_iterator_impl left_depth_iterator;
typedef right_depth_iterator_impl right_depth_iterator;
typedef left_breadth_iterator_impl left_breadth_iterator;
typedef right_breadth_iterator_impl right_breadth_iterator;
... stuff ....
private:
Data data;
binary_tree* left;
binary_tree* right;
};
Теперь я заметил, что в моем классе много итераторов, поэтому я хотел бы перегруппировать их в одном и том же пространстве имен:
template<typename Data>
class binary_tree
{
public:
... stuff ....
private:
... iterators class declaration ...
public:
namespace iterator
{
typedef left_depth_iterator_impl left_depth;
typedef right_depth_iterator_impl right_depth;
typedef left_breadth_iterator_impl left_breadth;
typedef right_breadth_iterator_impl right_breadth;
}
... stuff ....
private:
Data data;
binary_tree* left;
binary_tree* right;
};
Это позволило бы простое использование:
void function()
{
binary_tree::iterator::left_depth it;
...stuff...
}
Это работает, если я использую класс вместо пространства имен, но затем я вынужден объявить класс, который никогда не будет создан, что является вполне пространством имен.
Зачем разрешать вложенные классы и запрещать вложенные пространства имен внутри классов? это наследственное бремя?
Будут оценены ответы с семантическими причинами, которые не только указывают часть стандарта (особенно части синтаксиса) :)