Rework reverse_iterator::operator[] so as not to use the base iterators operator [], which can cause constness problems. Fixes PR17883

llvm-svn: 231375
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: 10b33a266258e1075a45df445f5b8f71b7ea514d
diff --git a/include/iterator b/include/iterator
index 04ff4c1..7f7e9ee 100644
--- a/include/iterator
+++ b/include/iterator
@@ -575,7 +575,7 @@
     _LIBCPP_INLINE_VISIBILITY reverse_iterator& operator-=(difference_type __n)
         {current += __n; return *this;}
     _LIBCPP_INLINE_VISIBILITY reference         operator[](difference_type __n) const
-        {return current[-__n-1];}
+        {return *(*this + __n);}
 };
 
 template <class _Iter1, class _Iter2>