PR libstdc++/15002 (partial)
authorPaolo Carlini <pcarlini@suse.de>
Mon, 19 Apr 2004 11:30:20 +0000 (11:30 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 19 Apr 2004 11:30:20 +0000 (11:30 +0000)
2004-04-19  Paolo Carlini  <pcarlini@suse.de>

PR libstdc++/15002 (partial)
* include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
Special case __n2 == 1, not calling traits_type::assign/copy.

From-SVN: r80847

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/basic_string.h

index cbae3127aa50e306d430d9d3a20652976f8d9d58..0654d76f201622c640d041853be168968c426b08 100644 (file)
@@ -1,3 +1,9 @@
+2004-04-19  Paolo Carlini  <pcarlini@suse.de>
+
+       PR libstdc++/15002 (partial)
+       * include/bits/basic_string.h (_M_replace_aux, _M_replace_safe):
+       Special case __n2 == 1, not calling traits_type::assign/copy. 
+
 2004-04-17  Benjamin Kosnik  <bkoz@redhat.com>
 
        * include/bits/stl_bvector.h: Use _M_impl._M_start.
index a33cdefdb5360237a680b5ac402ce5b8790c072c..6837e013fbbd9ac9782690abc4c4da5e99095660 100644 (file)
@@ -1342,7 +1342,9 @@ namespace std
        if (this->max_size() - (this->size() - __n1) < __n2)
          __throw_length_error(__N("basic_string::_M_replace_aux"));
        _M_mutate(__pos1, __n1, __n2);
-       if (__n2)
+       if (__n2 == 1)
+         _M_data()[__pos1] = __c;
+       else if (__n2)
          traits_type::assign(_M_data() + __pos1, __n2, __c);
        return *this;
       }
@@ -1352,7 +1354,9 @@ namespace std
                      size_type __n2)
       {
        _M_mutate(__pos1, __n1, __n2);
-       if (__n2)
+       if (__n2 == 1)
+         _M_data()[__pos1] = *__s;
+       else if (__n2)
          traits_type::copy(_M_data() + __pos1, __s, __n2);
        return *this;
       }
@@ -1960,7 +1964,7 @@ namespace std
    *  @param rhs  Last string.
    *  @return  New string with value of @a lhs followed by @a rhs.
    */
- template<typename _CharT, typename _Traits, typename _Alloc>
 template<typename _CharT, typename _Traits, typename _Alloc>
     basic_string<_CharT, _Traits, _Alloc>
     operator+(const basic_string<_CharT, _Traits, _Alloc>& __lhs,
              const basic_string<_CharT, _Traits, _Alloc>& __rhs)