Index: libstdc++-v3/src/c++98/misc-inst.cc =================================================================== --- libstdc++-v3/src/c++98/misc-inst.cc (Revision 219147) +++ libstdc++-v3/src/c++98/misc-inst.cc (Arbeitskopie) @@ -68,10 +68,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION // C++98 members that are not instantiated by src/c++11/string-inst.cc // because they changed in C++11 to take const_iterator parameters. template string::iterator string::erase(iterator); + template string::iterator string::erase(iterator, iterator); + template void string::insert(iterator, size_type, char); template void string::insert(iterator, iterator, iterator); template string::iterator string::insert(iterator, char); + template string& string::replace(iterator, iterator, const string&); + template string& + string::replace(iterator, iterator, const char*, size_type); + template string& string::replace(iterator, iterator, const char*); template string& string::replace(iterator, iterator, size_type, char); template string& string::replace(iterator, iterator, char*, char*); + template string& + string::replace(iterator, iterator, const char*, const char*); template string& string::replace(iterator, iterator, iterator, iterator); template string& string::replace(iterator, iterator, const_iterator, const_iterator); @@ -78,10 +86,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION #ifdef _GLIBCXX_USE_WCHAR_T template wstring::iterator wstring::erase(iterator); + template wstring::iterator wstring::erase(iterator, iterator); + template void wstring::insert(iterator, size_type, wchar_t); template void wstring::insert(iterator, iterator, iterator); template wstring::iterator wstring::insert(iterator, wchar_t); + template wstring& wstring::replace(iterator, iterator, const wstring&); + template wstring& + wstring::replace(iterator, iterator, const wchar_t*, size_type); + template wstring& wstring::replace(iterator, iterator, const wchar_t*); template wstring& wstring::replace(iterator, iterator, size_type, wchar_t); template wstring& wstring::replace(iterator, iterator, wchar_t*, wchar_t*); + template wstring& + wstring::replace(iterator, iterator, const wchar_t*, const wchar_t*); template wstring& wstring::replace(iterator, iterator, iterator, iterator); template wstring& wstring::replace(iterator, iterator, const_iterator, const_iterator); Index: libstdc++-v3/testsuite/21_strings/basic_string/types/64422.cc =================================================================== --- libstdc++-v3/testsuite/21_strings/basic_string/types/64422.cc (Revision 0) +++ libstdc++-v3/testsuite/21_strings/basic_string/types/64422.cc (Arbeitskopie) @@ -0,0 +1,29 @@ +/* { dg-do link } */ +/* { dg-options "-O0" } */ +#include + +int +main () +{ + std::string x; + x.insert (x.begin (), 10, 'x'); + const char test[] = "test"; + x.replace (x.begin (), x.end (), test, 4); + x.replace (x.begin (), x.end (), test); + char best[] = "best"; + x.replace (x.begin (), x.end (), best, best + 4); + x.replace (x.begin (), x.end (), x); + x.erase (x.begin (), x.end ()); +#ifdef _GLIBCXX_USE_WCHAR_T + std::wstring w; + w.insert (w.begin (), 10, L'x'); + const wchar_t west[] = L"west"; + w.replace (w.begin (), w.end (), west, 4); + w.replace (w.begin (), w.end (), west); + wchar_t rest[] = L"rest"; + w.replace (w.begin (), w.end (), rest, rest + 4); + w.replace (w.begin (), w.end (), w); + w.erase (w.begin (), w.end ()); +#endif + return 0; +}