From e4dd5b691d56f11c225e1e1847be3800854634b6 Mon Sep 17 00:00:00 2001
From: Bernd Edlinger <bernd.edlinger@hotmail.de>
Date: Fri, 2 Jan 2015 21:12:54 +0000
Subject: [PATCH] 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
---
 libstdc++-v3/ChangeLog                        | 11 +++++
 libstdc++-v3/src/c++98/misc-inst.cc           | 16 ++++++
 .../basic_string/modifiers/64422.cc           | 49 +++++++++++++++++++
 3 files changed, 76 insertions(+)
 create mode 100644 libstdc++-v3/testsuite/21_strings/basic_string/modifiers/64422.cc

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 99d37d1fa662..121ac771e64d 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 989218f6e7ed..060dac283528 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 000000000000..4b37ba97f170
--- /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;
+}
-- 
GitLab