Por que não podemos declarar um namespace dentro de uma classe?
Declarar uma classe dentro de uma classe é válido. (Aulas aninhadas)
Declarar um namespace dentro de uma classe é inválido.
A questão é: existe algum bom motivo (além de problemas gramaticais / sintáticos de c ++) para proibir a declaração de um namespace dentro de uma classe?
Quanto a por que eu quero fazer isso, aqui está um exemplo:
Vamos ter um delcaration básico de um container de árvore binária
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;
};
Agora eu noto que existem muitos iteradores na minha classe, então eu gostaria de reagrupá-los dentro do mesmo espaço de nomes como este:
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;
};
Isso permitiria um uso simples:
void function()
{
binary_tree::iterator::left_depth it;
...stuff...
}
Isso funciona se eu usar uma classe em vez de um namespace, mas sou forçado a declarar uma classe que nunca será instanciada, o que é um namespace.
Por que permitir classes aninhadas e proibir namespaces aninhados em classes? é um fardo legado?
Respostas com motivos semânticos que não citem apenas parte do padrão (especialmente partes da sintaxe) serão apreciadas :)