From 3fdbbd2a6fabd404639fb3cece67a71be34677b2 Mon Sep 17 00:00:00 2001 From: Howard Hinnant Date: Wed, 17 Aug 2011 20:36:18 +0000 Subject: Don't move assign string::allocator_type when propagate_on_container_move_assignment is false. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@137862 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/string | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/string b/include/string index 7fdf0d890..a1dba310b 100644 --- a/include/string +++ b/include/string @@ -1591,6 +1591,27 @@ private: _NOEXCEPT_(is_nothrow_move_assignable::value); #endif + _LIBCPP_INLINE_VISIBILITY + void + __move_assign_alloc(const basic_string& __str) + _NOEXCEPT_( + !__alloc_traits::propagate_on_container_move_assignment::value || + is_nothrow_move_assignable::value) + {__move_assign_alloc(__str, integral_constant());} + + _LIBCPP_INLINE_VISIBILITY + void __move_assign_alloc(const basic_string& __c, true_type) + _NOEXCEPT_(is_nothrow_move_assignable::value) + { + __alloc() = _VSTD::move(__c.__alloc()); + } + + _LIBCPP_INLINE_VISIBILITY + void __move_assign_alloc(const basic_string& __c, false_type) + _NOEXCEPT + {} + _LIBCPP_INLINE_VISIBILITY static void __swap_alloc(allocator_type& __x, allocator_type& __y) _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || @@ -2138,7 +2159,8 @@ basic_string<_CharT, _Traits, _Allocator>::__move_assign(basic_string& __str, tr { clear(); shrink_to_fit(); - __r_ = _VSTD::move(__str.__r_); + __r_.first() = __str.__r_.first(); + __move_assign_alloc(__str); __str.__zero(); } -- cgit v1.2.3