Fix PR32642 - string::insert and string::append don't work with move_iterator.

llvm-svn: 300397
Cr-Mirrored-From: sso://chromium.googlesource.com/_direct/external/github.com/llvm/llvm-project
Cr-Mirrored-Commit: e84fcb5f3d49761076b99c08ba9e13a519dfac4b
diff --git a/include/string b/include/string
index 6f9c19f..1bc91ed 100644
--- a/include/string
+++ b/include/string
@@ -2276,7 +2276,9 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n)
     {
-        if ( __ptr_in_range(&*__first, data(), data() + size()))
+        typedef typename iterator_traits<_ForwardIterator>::reference _CharRef;
+        _CharRef __tmp_ref = *__first;
+        if (__ptr_in_range(_VSTD::addressof(__tmp_ref), data(), data() + size()))
         {
             const basic_string __temp (__first, __last, __alloc());
             append(__temp.data(), __temp.size());
@@ -2440,7 +2442,9 @@
     size_type __n = static_cast<size_type>(_VSTD::distance(__first, __last));
     if (__n)
     {
-        if ( __ptr_in_range(&*__first, data(), data() + size()))
+        typedef typename iterator_traits<_ForwardIterator>::reference _CharRef;
+        _CharRef __tmp_char = *__first;
+        if (__ptr_in_range(_VSTD::addressof(__tmp_char), data(), data() + size()))
         {
             const basic_string __temp(__first, __last, __alloc());
             return insert(__pos, __temp.data(), __temp.data() + __temp.size());