Почему reverse_iterator вдвойне определяет свои вложенные типы?

Похоже, что адаптер итератораreverse_iterator вдвойне определяет большинство его вложенных типов. В частности, оно наследуется публично отstd::iterator который выставляетiterator_category, value_type, difference_type, pointer а такжеreference, За исключениемiterator_category а такжеvalue_typeвсе это явноtypedef'снова в определении класса.

24.5.1.1 Шаблон класса reverse_iterator [reverse.iterator]

namespace std {
template <class Iterator>
class reverse_iterator : public
     iterator<typename iterator_traits<Iterator>::iterator_category,
     typename iterator_traits<Iterator>::value_type,
     typename iterator_traits<Iterator>::difference_type,
     typename iterator_traits<Iterator>::pointer,
     typename iterator_traits<Iterator>::reference> {
public:
  typedef Iterator                                            iterator_type;
  typedef typename iterator_traits<Iterator>::difference_type difference_type;
  typedef typename iterator_traits<Iterator>::reference       reference;
  typedef typename iterator_traits<Iterator>::pointer         pointer;
  // ... rest of the class
};

Вопрос: почему повторное определение? Это только для целей изложения или есть что-то еще? И почему бы не переопределитьiterator_category а такжеvalue_type?

Ответы на вопрос(2)

Ваш ответ на вопрос