aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Edlinger <bernd.edlinger@hotmail.de>2015-01-02 21:12:54 +0000
committerBernd Edlinger <edlinger@gcc.gnu.org>2015-01-02 21:12:54 +0000
commite4dd5b691d56f11c225e1e1847be3800854634b6 (patch)
tree15aa7e10212e38b0a9ab0f9367b26bda33ceec98
parent09de7c25785ff59931aee011b79a67e209db27bb (diff)
downloadgcc-e4dd5b691d56f11c225e1e1847be3800854634b6.zip
gcc-e4dd5b691d56f11c225e1e1847be3800854634b6.tar.gz
gcc-e4dd5b691d56f11c225e1e1847be3800854634b6.tar.bz2
re PR c++/64422 (basic_string::erase is unresloved)
2015-01-02 Bernd Edlinger <bernd.edlinger@hotmail.de> PR libstdc++/64422 * src/c++98/misc-inst.cc (string::erase): Add missing overloads. (string::insert): Likewise. (string::replace): Likewise. (wstring::erase): Likewise. (wstring::insert): Likewise. (wstring::replace): Likewise. * testsuite/21_strings/basic_string/modifiers/64422.cc: New testcase. From-SVN: r219149
-rw-r--r--libstdc++-v3/ChangeLog11
-rw-r--r--libstdc++-v3/src/c++98/misc-inst.cc16
-rw-r--r--libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc49
3 files changed, 76 insertions, 0 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 99d37d1..121ac77 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,3 +1,14 @@
+2015-01-02 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+ PR libstdc++/64422
+ * src/c++98/misc-inst.cc (string::erase): Add missing overloads.
+ (string::insert): Likewise.
+ (string::replace): Likewise.
+ (wstring::erase): Likewise.
+ (wstring::insert): Likewise.
+ (wstring::replace): Likewise.
+ * testsuite/21_strings/basic_string/modifiers/64422.cc: New testcase.
+
2015-01-02 Jonathan Wakely <jwakely@redhat.com>
PR libstdc++/64468
diff --git a/libstdc++-v3/src/c++98/misc-inst.cc b/libstdc++-v3/src/c++98/misc-inst.cc
index 989218f..060dac2 100644
--- a/libstdc++-v3/src/c++98/misc-inst.cc
+++ b/libstdc++-v3/src/c++98/misc-inst.cc
@@ -68,20 +68,36 @@ _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);
#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);
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
new file mode 100644
index 0000000..4b37ba9
--- /dev/null
+++ b/libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc
@@ -0,0 +1,49 @@
+// 2015-01-02 Bernd Edlinger <bernd.edlinger@hotmail.de>
+
+// Copyright (C) 2005-2015 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library. This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3. If not see
+// <http://www.gnu.org/licenses/>.
+
+/* { dg-do link } */
+/* { dg-options "-O0" } */
+
+#include <string>
+
+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;
+}