From 47c3a4743eda479b46e0fd436a33128b7be616d4 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Fri, 11 Mar 2016 15:26:06 +0000 Subject: [PATCH] Revert r263036, it's ABI-breaking. llvm-svn: 263246 --- libcxx/include/string | 22 ++------------- .../basic.string/string.cons/substr.pass.cpp | 27 ++----------------- libcxx/www/cxx1z_status.html | 2 +- 3 files changed, 5 insertions(+), 46 deletions(-) diff --git a/libcxx/include/string b/libcxx/include/string index b937d295b844..06cbf9d87009 100644 --- a/libcxx/include/string +++ b/libcxx/include/string @@ -98,10 +98,8 @@ public: basic_string(const basic_string& str); basic_string(basic_string&& str) noexcept(is_nothrow_move_constructible::value); - basic_string(const basic_string& str, size_type pos, // LWG#2583 + basic_string(const basic_string& str, size_type pos, size_type n = npos, const allocator_type& a = allocator_type()); - basic_string(const basic_string& str, size_type pos, size_type n, // LWG#2583 - const Allocator& a = Allocator()); basic_string(const value_type* s, const allocator_type& a = allocator_type()); basic_string(const value_type* s, size_type n, const allocator_type& a = allocator_type()); basic_string(size_type n, value_type c, const allocator_type& a = allocator_type()); @@ -1399,9 +1397,7 @@ public: basic_string(size_type __n, value_type __c); _LIBCPP_INLINE_VISIBILITY basic_string(size_type __n, value_type __c, const allocator_type& __a); - basic_string(const basic_string& __str, size_type __pos, size_type __n, - const allocator_type& __a = allocator_type()); - basic_string(const basic_string& __str, size_type __pos, + basic_string(const basic_string& __str, size_type __pos, size_type __n = npos, const allocator_type& __a = allocator_type()); template _LIBCPP_INLINE_VISIBILITY @@ -2226,20 +2222,6 @@ basic_string<_CharT, _Traits, _Allocator>::basic_string(const basic_string& __st #endif } -template -basic_string<_CharT, _Traits, _Allocator>::basic_string(const basic_string& __str, size_type __pos, - const allocator_type& __a) - : __r_(__a) -{ - size_type __str_sz = __str.size(); - if (__pos > __str_sz) - this->__throw_out_of_range(); - __init(__str.data() + __pos, __str_sz - __pos); -#if _LIBCPP_DEBUG_LEVEL >= 2 - __get_db()->__insert_c(this); -#endif -} - template template typename enable_if diff --git a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp index 3eaf009dfe33..2e42be13a842 100644 --- a/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp +++ b/libcxx/test/std/strings/basic.string/string.cons/substr.pass.cpp @@ -11,21 +11,14 @@ // // basic_string(const basic_string& str, -// size_type pos, size_type n, -// const Allocator& a = Allocator()); -// -// basic_string(const basic_string& str, -// size_type pos, +// size_type pos, size_type n = npos, // const Allocator& a = Allocator()); #include #include #include -#include -#include #include -#include "test_macros.h" #include "test_allocator.h" #include "min_allocator.h" @@ -98,20 +91,6 @@ test(S str, unsigned pos, unsigned n, const typename S::allocator_type& a) } } -#if TEST_STD_VER >= 11 -void test2583() -{ // LWG #2583 - typedef std::basic_string, test_allocator > StringA; - std::vector>> vs; - StringA s{"1234"}; - vs.emplace_back(s, 2); - - try { vs.emplace_back(s, 5); } - catch (const std::out_of_range&) { return; } - assert(false); -} -#endif - int main() { { @@ -152,7 +131,7 @@ int main() test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 10, A(8)); test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A(7)), 50, 100, A(8)); } -#if TEST_STD_VER >= 11 +#if __cplusplus >= 201103L { typedef min_allocator A; typedef std::basic_string, A> S; @@ -191,7 +170,5 @@ int main() test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 10, A()); test(S("1234567890123456789012345678901234567890123456789012345678901234567890", A()), 50, 100, A()); } - - test2583(); #endif } diff --git a/libcxx/www/cxx1z_status.html b/libcxx/www/cxx1z_status.html index 8d7ea7da73ee..9c53cd9ab311 100644 --- a/libcxx/www/cxx1z_status.html +++ b/libcxx/www/cxx1z_status.html @@ -227,7 +227,7 @@ 2579Inconsistency wrt Allocators in basic_string assignment vs. basic_string::assignJacksonvilleComplete 2581Specialization of <type_traits> variable templates should be prohibitedJacksonvilleComplete 2582§[res.on.functions]/2's prohibition against incomplete types shouldn't apply to type traitsJacksonville - 2583There is no way to supply an allocator for basic_string(str, pos)JacksonvilleComplete + 2583There is no way to supply an allocator for basic_string(str, pos)Jacksonville 2585forward_list::resize(size_type, const value_type&) effects incorrectJacksonville 2586Wrong value category used in scoped_allocator_adaptor::construct()Jacksonville 2590Aggregate initialization for std::arrayJacksonvilleComplete