2002-11-05 Paolo Carlini <pcarlini@unitus.it>
authorpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Nov 2002 23:28:15 +0000 (23:28 +0000)
committerpaolo <paolo@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 5 Nov 2002 23:28:15 +0000 (23:28 +0000)
PR libstdc++/8466
* include/std/std_sstream.h
(basic_stringbuf::str(const __string_type&)):
Cannot use simple assignment since the COW-nature of v3
basic_string is not taken into account in basic_stringbuf.
* testsuite/27_io/stringstream_members.cc: Add test04 from PR.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58838 138bc75d-0d04-0410-961f-82ee72b054a4

libstdc++-v3/ChangeLog
libstdc++-v3/include/std/std_sstream.h
libstdc++-v3/testsuite/27_io/stringstream_members.cc

index 43908df..12ae0f0 100644 (file)
@@ -1,3 +1,12 @@
+2002-11-05  Paolo Carlini  <pcarlini@unitus.it>
+
+       PR libstdc++/8466
+       * include/std/std_sstream.h
+       (basic_stringbuf::str(const __string_type&)):
+       Cannot use simple assignment since the COW-nature of v3
+       basic_string is not taken into account in basic_stringbuf.
+       * testsuite/27_io/stringstream_members.cc: Add test04 from PR.
+
 2002-11-05  John David Anglin  <dave@hiauly1.hia.nrc.ca>
 
        * configure.target (hppa*): Define cpu_include_dir.
index 07e47b5..5eb43d0 100644 (file)
@@ -105,7 +105,8 @@ namespace std
       void
       str(const __string_type& __s)
       {
-       _M_string = __s;
+       // Cannot use _M_string = __s, since v3 strings are COW.
+       _M_string.assign(__s.c_str(), __s.size());
        _M_stringbuf_init(_M_mode);
       }
 
index 91ee79b..51635f7 100644 (file)
@@ -177,10 +177,26 @@ test03()
   std::stringstream ss2(str3, std::ios_base::in|std::ios_base::out);
 }
 
+// libstdc++/8466
+void test04()
+{
+  bool test = true;
+
+  const char* strlit00 = "orvieto";
+  const std::string str00 = strlit00;
+
+  std::ostringstream oss;
+
+  oss.str(str00);
+  oss << "cortona";
+  VERIFY( str00 == strlit00 );
+}
+
 int main()
 {
   test01();
   test02();
   test03();
+  test04();
   return 0;
 }