Issue 1323: basic_string::replace should use const_iterator (original) (raw)
This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of C++11 status.
1323. basic_string::replace should use const_iterator
Section: 27.4.3.7.6 [string.replace] Status: C++11 Submitter: Daniel Krügler Opened: 2010-02-19 Last modified: 2016-11-12
Priority: Not Prioritized
View all other issues in [string.replace].
View all issues with C++11 status.
Discussion:
In contrast to all library usages of purely positional iterator values several overloads of std::basic_string::replace still use iterator instead ofconst_iterator arguments. The paperN3021quite nicely visualizes the purely positional responsibilities of the function arguments.
This should be fixed to make the library consistent, the proposed changes are quite mechanic.
[ Post-Rapperswil: ]
Moved to Tentatively Ready after 5 positive votes on c++std-lib.
[ Adopted at 2010-11 Batavia ]
Proposed resolution:
- In 27.4.3 [basic.string], class template
basic_stringsynopsis change as indicated:// 21.4.6 modifiers:
...
basic_string& replace(const_iterator i1, const_iterator i2,
const basic_string& str);
basic_string& replace(const_iterator i1, const_iterator i2,
const charT* s, size_type n);
basic_string& replace(const_iterator i1, const_iterator i2,
const charT* s);
basic_string& replace(const_iterator i1, const_iterator i2,
size_type n, charT c);
template
basic_string& replace(const_iterator i1, const_iterator i2,
InputIterator j1, InputIterator j2);
basic_string& replace(const_iterator, const_iterator,
initializer_list); 2. In 27.4.3.7.6 [string.replace] before p.18, change the following signatures as indicated:
basic_string& replace(const_iterator i1, const_iterator i2, const basic_string& str); 3. In 27.4.3.7.6 [string.replace] before p.21, change the following signatures as indicated:
basic_string&
replace(const_iterator i1, const_iterator i2, const charT* s, size_type n); 4. In 27.4.3.7.6 [string.replace] before p.24, change the following signatures as indicated:
basic_string& replace(const_iterator i1, const_iterator i2, const charT* s); 5. In 27.4.3.7.6 [string.replace] before p.27, change the following signatures as indicated:
basic_string& replace(const_iterator i1, const_iterator i2, size_type n,
charT c); 6. In 27.4.3.7.6 [string.replace] before p.30, change the following signatures as indicated:
template
basic_string& replace(const_iterator i1, const_iterator i2,
InputIterator j1, InputIterator j2); 7. In 27.4.3.7.6 [string.replace] before p.33, change the following signatures as indicated:
basic_string& replace(const_iterator i1, const_iterator i2,
initializer_list il);