diff --git a/libcxx/include/string b/libcxx/include/string --- a/libcxx/include/string +++ b/libcxx/include/string @@ -3276,9 +3276,12 @@ basic_string<_CharT, _Traits, _Allocator>::resize(size_type __n, value_type __c) { size_type __sz = size(); - if (__n > __sz) + if (__n > __sz) { + #ifdef _LIBCPP_STRING_PRECISE_RESIZE + if (__n > capacity()) __shrink_or_extend(__recommend(__n)); + #endif append(__n - __sz, __c); - else + } else __erase_to_end(__n); } @@ -3288,6 +3291,9 @@ { size_type __sz = size(); if (__n > __sz) { + #ifdef _LIBCPP_STRING_PRECISE_RESIZE + if (__n > capacity()) __shrink_or_extend(__recommend(__n)); + #endif __append_default_init(__n - __sz); } else __erase_to_end(__n);