diff --git a/include/string b/include/string index 61f993a95..3056a6bbe 100644 --- a/include/string +++ b/include/string @@ -200,13 +200,13 @@ public: basic_string& replace(size_type pos, size_type n1, const_pointer s, size_type n2); basic_string& replace(size_type pos, size_type n1, const_pointer s); basic_string& replace(size_type pos, size_type n1, size_type n2, value_type c); - basic_string& replace(iterator i1, iterator i2, const basic_string& str); - basic_string& replace(iterator i1, iterator i2, const_pointer s, size_type n); - basic_string& replace(iterator i1, iterator i2, const_pointer s); - basic_string& replace(iterator i1, iterator i2, size_type n, value_type c); + basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str); + basic_string& replace(const_iterator i1, const_iterator i2, const_pointer s, size_type n); + basic_string& replace(const_iterator i1, const_iterator i2, const_pointer s); + basic_string& replace(const_iterator i1, const_iterator i2, size_type n, value_type c); template - basic_string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2); - basic_string& replace(iterator i1, iterator i2, initializer_list); + basic_string& replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2); + basic_string& replace(const_iterator i1, const_iterator i2, initializer_list); size_type copy(pointer s, size_type n, size_type pos = 0) const; basic_string substr(size_type pos = 0, size_type n = npos) const; @@ -1198,19 +1198,19 @@ public: basic_string& replace(size_type __pos, size_type __n1, const_pointer __s, size_type __n2); basic_string& replace(size_type __pos, size_type __n1, const_pointer __s); basic_string& replace(size_type __pos, size_type __n1, size_type __n2, value_type __c); - basic_string& replace(iterator __i1, iterator __i2, const basic_string& __str); - basic_string& replace(iterator __i1, iterator __i2, const_pointer __s, size_type __n); - basic_string& replace(iterator __i1, iterator __i2, const_pointer __s); - basic_string& replace(iterator __i1, iterator __i2, size_type __n, value_type __c); + basic_string& replace(const_iterator __i1, const_iterator __i2, const basic_string& __str); + basic_string& replace(const_iterator __i1, const_iterator __i2, const_pointer __s, size_type __n); + basic_string& replace(const_iterator __i1, const_iterator __i2, const_pointer __s); + basic_string& replace(const_iterator __i1, const_iterator __i2, size_type __n, value_type __c); template typename enable_if < __is_input_iterator<_InputIterator>::value, basic_string& >::type - replace(iterator __i1, iterator __i2, _InputIterator __j1, _InputIterator __j2); + replace(const_iterator __i1, const_iterator __i2, _InputIterator __j1, _InputIterator __j2); _LIBCPP_INLINE_VISIBILITY - basic_string& replace(iterator __i1, iterator __i2, initializer_list __il) + basic_string& replace(const_iterator __i1, const_iterator __i2, initializer_list __il) {return replace(__i1, __i2, __il.begin(), __il.end());} size_type copy(pointer __s, size_type __n, size_type __pos = 0) const; @@ -2400,7 +2400,7 @@ typename enable_if __is_input_iterator<_InputIterator>::value, basic_string<_CharT, _Traits, _Allocator>& >::type -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, _InputIterator __j1, _InputIterator __j2) { for (; true; ++__i1, ++__j1) @@ -2416,7 +2416,7 @@ basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, erase(__i1, __i2); break; } - traits_type::assign(*__i1, *__j1); + traits_type::assign(const_cast(*__i1), *__j1); } return *this; } @@ -2453,7 +2453,7 @@ basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __ template _LIBCPP_INLINE_VISIBILITY inline basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const basic_string& __str) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const basic_string& __str) { return replace(static_cast(__i1 - begin()), static_cast(__i2 - __i1), __str.data(), __str.size()); @@ -2462,7 +2462,7 @@ basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, template _LIBCPP_INLINE_VISIBILITY inline basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const_pointer __s, size_type __n) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const_pointer __s, size_type __n) { return replace(static_cast(__i1 - begin()), static_cast(__i2 - __i1), __s, __n); } @@ -2470,7 +2470,7 @@ basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, template _LIBCPP_INLINE_VISIBILITY inline basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, const_pointer __s) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, const_pointer __s) { return replace(static_cast(__i1 - begin()), static_cast(__i2 - __i1), __s); } @@ -2478,7 +2478,7 @@ basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, template _LIBCPP_INLINE_VISIBILITY inline basic_string<_CharT, _Traits, _Allocator>& -basic_string<_CharT, _Traits, _Allocator>::replace(iterator __i1, iterator __i2, size_type __n, value_type __c) +basic_string<_CharT, _Traits, _Allocator>::replace(const_iterator __i1, const_iterator __i2, size_type __n, value_type __c) { return replace(static_cast(__i1 - begin()), static_cast(__i2 - __i1), __n, __c); } @@ -3719,12 +3719,12 @@ extern template extern template enable_if<__is_input_iterator::value, string&>::type string:: - replace(string::iterator, string::iterator, char const*, char const*); + replace(string::const_iterator, string::const_iterator, char const*, char const*); extern template enable_if<__is_input_iterator::value, wstring&>::type wstring:: - replace(wstring::iterator, wstring::iterator, wchar_t const*, wchar_t const*); + replace(wstring::const_iterator, wstring::const_iterator, wchar_t const*, wchar_t const*); extern template enable_if<__is_forward_iterator::value, wstring&>::type diff --git a/src/string.cpp b/src/string.cpp index 5eaed282e..793a58be8 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -54,12 +54,12 @@ template template enable_if<__is_input_iterator::value, string&>::type string:: - replace(string::iterator, string::iterator, char const*, char const*); + replace(string::const_iterator, string::const_iterator, char const*, char const*); template enable_if<__is_input_iterator::value, wstring&>::type wstring:: - replace(wstring::iterator, wstring::iterator, wchar_t const*, wchar_t const*); + replace(wstring::const_iterator, wstring::const_iterator, wchar_t const*, wchar_t const*); template enable_if<__is_forward_iterator::value, wstring&>::type diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp index cd968040b..83246edbb 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_initializer_list.pass.cpp @@ -9,7 +9,7 @@ // -// basic_string& replace(iterator i1, iterator i2, initializer_list il); +// basic_string& replace(const_iterator i1, const_iterator i2, initializer_list il); #include #include @@ -19,7 +19,7 @@ int main() #ifndef _LIBCPP_HAS_NO_RVALUE_REFERENCES { std::string s("123def456"); - s.replace(s.begin() + 3, s.begin() + 6, {'a', 'b', 'c'}); + s.replace(s.cbegin() + 3, s.cbegin() + 6, {'a', 'b', 'c'}); assert(s == "123abc456"); } #endif // _LIBCPP_HAS_NO_RVALUE_REFERENCES diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp index 246ee3161..be89f60fd 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_iter_iter.pass.cpp @@ -11,7 +11,7 @@ // template // basic_string& -// replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2); +// replace(const_iterator i1, const_iterator i2, InputIterator j1, InputIterator j2); #include #include @@ -24,8 +24,8 @@ void test(S s, typename S::size_type pos1, typename S::size_type n1, It f, It l, S expected) { typename S::size_type old_size = s.size(); - typename S::iterator first = s.begin() + pos1; - typename S::iterator last = s.begin() + pos1 + n1; + typename S::const_iterator first = s.begin() + pos1; + typename S::const_iterator last = s.begin() + pos1 + n1; s.replace(first, last, f, l); assert(s.__invariants()); assert(s == expected); diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp index a80b95217..c1faafc9c 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer.pass.cpp @@ -10,7 +10,7 @@ // // basic_string& -// replace(iterator i1, iterator i2, const charT* s); +// replace(const_iterator i1, const_iterator i2, const charT* s); #include @@ -24,8 +24,8 @@ void test(S s, S::size_type pos1, S::size_type n1, const S::value_type* str, S expected) { S::size_type old_size = s.size(); - S::iterator first = s.begin() + pos1; - S::iterator last = s.begin() + pos1 + n1; + S::const_iterator first = s.begin() + pos1; + S::const_iterator last = s.begin() + pos1 + n1; s.replace(first, last, str); assert(s.__invariants()); assert(s == expected); diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp index 66877d496..24beb4c4d 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_pointer_size.pass.cpp @@ -10,7 +10,7 @@ // // basic_string& -// replace(iterator i1, iterator i2, const charT* s, size_type n); +// replace(const_iterator i1, const_iterator i2, const charT* s, size_type n); #include @@ -25,8 +25,8 @@ test(S s, S::size_type pos1, S::size_type n1, const S::value_type* str, S::size_type n2, S expected) { S::size_type old_size = s.size(); - S::iterator first = s.begin() + pos1; - S::iterator last = s.begin() + pos1 + n1; + S::const_iterator first = s.begin() + pos1; + S::const_iterator last = s.begin() + pos1 + n1; s.replace(first, last, str, n2); assert(s.__invariants()); assert(s == expected); diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp index 8c6a72094..05b7d4b54 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_size_char.pass.cpp @@ -10,7 +10,7 @@ // // basic_string& -// replace(iterator i1, iterator i2, size_type n, charT c); +// replace(const_iterator i1, const_iterator i2, size_type n, charT c); #include @@ -25,8 +25,8 @@ test(S s, S::size_type pos1, S::size_type n1, S::size_type n2, S::value_type c, S expected) { S::size_type old_size = s.size(); - S::iterator first = s.begin() + pos1; - S::iterator last = s.begin() + pos1 + n1; + S::const_iterator first = s.begin() + pos1; + S::const_iterator last = s.begin() + pos1 + n1; s.replace(first, last, n2, c); assert(s.__invariants()); assert(s == expected); diff --git a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp index 2d40ef123..12df01154 100644 --- a/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp +++ b/test/strings/basic.string/string.modifiers/string_replace/iter_iter_string.pass.cpp @@ -10,7 +10,7 @@ // // basic_string& -// replace(iterator i1, iterator i2, const basic_string& str); +// replace(const_iterator i1, const_iterator i2, const basic_string& str); #include @@ -24,8 +24,8 @@ void test(S s, S::size_type pos1, S::size_type n1, S str, S expected) { S::size_type old_size = s.size(); - S::iterator first = s.begin() + pos1; - S::iterator last = s.begin() + pos1 + n1; + S::const_iterator first = s.begin() + pos1; + S::const_iterator last = s.begin() + pos1 + n1; s.replace(first, last, str); assert(s.__invariants()); assert(s == expected);