Warum können wir keinen Namespace innerhalb einer Klasse deklarieren?

Die Deklaration einer Klasse innerhalb einer Klasse ist gültig. (Geschachtelte Klassen)

Das Deklarieren eines Namespaces innerhalb einer Klasse ist ungültig.

Die Frage ist: Gibt es einen guten Grund (abgesehen von C ++ - Grammatik- / Syntaxproblemen), die Deklaration eines Namespaces innerhalb einer Klasse zu verbieten?

Warum sollte ich das tun wollen, hier ist ein Beispiel:

Lassen Sie uns eine grundlegende Erklärung eines binären Baumcontainers geben

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;
};

Jetzt stelle ich fest, dass es in meiner Klasse viele Iteratoren gibt, daher möchte ich sie im gleichen Namespace wie folgt neu gruppieren:

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;
};

Dies würde eine einfache Verwendung ermöglichen:

void  function()
{
  binary_tree::iterator::left_depth   it;

  ...stuff...
}

Dies funktioniert, wenn ich eine Klasse anstelle eines Namespaces verwende, dann aber gezwungen bin, eine Klasse zu deklarieren, die niemals instanziiert wird, was ein ziemlicher Namespace ist.

Warum verschachtelte Klassen zulassen und verschachtelte Namespaces innerhalb von Klassen verbieten? ist es eine Erblast?

Antworten mit semantischen Gründen, die nicht nur einen Teil des Standards (insbesondere Syntaxteile) zitieren, werden geschätzt :)

Antworten auf die Frage(5)

Ihre Antwort auf die Frage