diff --git a/include/string b/include/string index c98e22f01..234eb6ba8 100644 --- a/include/string +++ b/include/string @@ -3047,9 +3047,9 @@ basic_string<_CharT, _Traits, _Allocator>::max_size() const _NOEXCEPT { size_type __m = __alloc_traits::max_size(__alloc()); #if _LIBCPP_BIG_ENDIAN - return (__m <= ~__long_mask ? __m : __m/2) - 1; + return (__m <= ~__long_mask ? __m : __m/2) - __alignment; #else - return __m - 1; + return __m - __alignment; #endif } diff --git a/test/strings/basic.string/string.capacity/max_size.pass.cpp b/test/strings/basic.string/string.capacity/max_size.pass.cpp index e016bba56..f9b228412 100644 --- a/test/strings/basic.string/string.capacity/max_size.pass.cpp +++ b/test/strings/basic.string/string.capacity/max_size.pass.cpp @@ -21,6 +21,12 @@ void test(const S& s) { assert(s.max_size() >= s.size()); + { + S s2; + try { s2.resize(s2.max_size() - 1, 'x'); } + catch ( const std::bad_alloc & ) { return ; } + assert ( false ); + } } int main()