Dlaczego nie możemy zadeklarować przestrzeni nazw w klasie?

Deklarowanie klasy w klasie jest ważne. (Klasy zagnieżdżone)

Deklarowanie przestrzeni nazw w klasie jest nieprawidłowe.

Pytanie brzmi: czy istnieje jakiś dobry powód (poza problemami gramatycznymi / składniowymi c ++), aby zabronić deklarowania przestrzeni nazw w klasie?

Jeśli chodzi o to, dlaczego chciałbym to zrobić, oto przykład:

Miejmy podstawową delarację binarnego kontenera drzewa

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

Teraz zauważam, że w mojej klasie jest wiele iteratorów, więc chciałbym je przegrupować w tej samej przestrzeni nazw, jak ta:

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

Pozwoliłoby to na proste użycie:

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

  ...stuff...
}

Działa to, gdy używam klasy zamiast przestrzeni nazw, ale wtedy zmuszony jestem zadeklarować klasę, która nigdy nie zostanie utworzona, co jest dość przestrzenią nazw.

Po co zezwalać na zagnieżdżone klasy i zabraniać zagnieżdżonych przestrzeni nazw w obrębie klas? czy jest to ciężar spuścizny?

Odpowiedzi z semantycznymi powodami, które nie tylko cytują część standardu (szczególnie części składniowe) zostaną docenione :)

questionAnswers(5)

yourAnswerToTheQuestion