:: template class reverse_iterator { public: reverse_iterator() {} explicit reverse_iterator(Iterator x) ; template reverse_iterator( reverse_iterator const& r , typename enable_if_convertible::type* = 0 // exposition ); Iterator base() const; reference operator*() const; reverse_iterator& operator++(); private: Iterator m_iterator; // exposition }; ``reverse_iterator`` requirements ................................. The base ``Iterator`` must be a model of Bidirectional Traversal Iterator and Readable Iterator. ``reverse_iterator`` models ........................... ``reverse_iterator`` models Bidirectional Traversal Iterator and Readable Iterator. In addition, ``reverse_iterator`` models the same standard iterator access concepts that the ``Iterator`` argument models. ``reverse_iterator`` operations ............................... ``reverse_iterator();`` :Requires: ``Iterator`` must be Default Constructible. :Returns: An instance of ``reverse_iterator`` with ``m_iterator`` default constructed. ``explicit reverse_iterator(Iterator x);`` :Returns: An instance of ``reverse_iterator`` with a ``m_iterator`` constructed from ``x``. :: template reverse_iterator( reverse_iterator const& r , typename enable_if_convertible::type* = 0 // exposition ); :Requires: ``OtherIterator`` is implicitly convertible to ``Iterator``. :Returns: An instance of ``reverse_iterator`` that is a copy of ``r``. ``Iterator base() const;`` :Returns: ``m_iterator`` ``reference operator*() const;`` :Effects: :: Iterator tmp = m_iterator; return *..tmp; ``reverse_iterator& operator++();`` :Effects: ``--m_iterator`` :Returns: ``*this``