Por que reverse_iterator define duplamente seus tipos aninhados?

Parece que o adaptador iteradorreverse_iterator duplamente define a maioria de seus tipos aninhados. Em particular, herda publicamente destd::iterator que expõeiterator_category, value_type, difference_type, pointer ereference. Exceto poriterator_category evalue_type, todos esses são explicitamentetypedefed novamente na definição de classe.

24.5.1.1 Modelo de classe 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
};

Pergunta, questão: por que a definição repetitiva? Isso é apenas para fins de exposição ou existe mais? E por que não redefiniriterator_category evalue_type?

questionAnswers(2)

yourAnswerToTheQuestion