diff --git a/libcxx/include/vector b/libcxx/include/vector --- a/libcxx/include/vector +++ b/libcxx/include/vector @@ -2963,7 +2963,7 @@ __size_ = __n; else { - vector __v(__alloc()); + vector __v(get_allocator()); __v.reserve(__recommend(__n)); __v.__size_ = __n; swap(__v); @@ -3018,7 +3018,7 @@ { if (__n > capacity()) { - vector __v(this->__alloc()); + vector __v(this->get_allocator()); __v.__vallocate(__n); __v.__construct_at_end(this->begin(), this->end()); swap(__v); @@ -3088,7 +3088,7 @@ } else { - vector __v(__alloc()); + vector __v(get_allocator()); __v.reserve(__recommend(__size_ + 1)); __v.__size_ = __size_ + 1; __r = _VSTD::copy(cbegin(), __position, __v.begin()); @@ -3114,7 +3114,7 @@ } else { - vector __v(__alloc()); + vector __v(get_allocator()); __v.reserve(__recommend(__size_ + __n)); __v.__size_ = __size_ + __n; __r = _VSTD::copy(cbegin(), __position, __v.begin()); @@ -3143,7 +3143,7 @@ ++this->__size_; back() = *__first; } - vector __v(__alloc()); + vector __v(get_allocator()); if (__first != __last) { #ifndef _LIBCPP_NO_EXCEPTIONS @@ -3193,7 +3193,7 @@ } else { - vector __v(__alloc()); + vector __v(get_allocator()); __v.reserve(__recommend(__size_ + __n)); __v.__size_ = __size_ + __n; __r = _VSTD::copy(cbegin(), __position, __v.begin()); @@ -3260,7 +3260,7 @@ } else { - vector __v(__alloc()); + vector __v(get_allocator()); __v.reserve(__recommend(__size_ + __n)); __v.__size_ = __size_ + __n; __r = _VSTD::copy(cbegin(), cend(), __v.begin()); diff --git a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_iter_iter.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_iter_iter.pass.cpp --- a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_iter_iter.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_iter_iter.pass.cpp @@ -92,6 +92,22 @@ assert(v[j] == 0); } #if TEST_STD_VER >= 11 + { + std::vector> v(100); + bool a[] = {1, 0, 0, 1, 1}; + const unsigned N = sizeof(a)/sizeof(a[0]); + std::vector>::iterator i = v.insert(v.cbegin() + 10, cpp17_input_iterator(a), + cpp17_input_iterator(a+N)); + assert(v.size() == 100 + N); + assert(i == v.begin() + 10); + std::size_t j; + for (j = 0; j < 10; ++j) + assert(v[j] == 0); + for (std::size_t k = 0; k < N; ++j, ++k) + assert(v[j] == a[k]); + for (; j < v.size(); ++j) + assert(v[j] == 0); + } { std::vector> v(100); bool a[] = {1, 0, 0, 1, 1}; diff --git a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_size_value.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_size_value.pass.cpp --- a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_size_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_size_value.pass.cpp @@ -65,6 +65,13 @@ assert(v[j] == 0); } #if TEST_STD_VER >= 11 + { + std::vector> v(10); + std::vector>::iterator i + = v.insert(v.cbegin() + 10, 5, 1); + assert(v.size() == 15); + assert(i == v.begin() + 10); + } { std::vector> v(100); std::vector>::iterator i = v.insert(v.cbegin() + 10, 5, 1); diff --git a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_value.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_value.pass.cpp --- a/libcxx/test/std/containers/sequences/vector.bool/insert_iter_value.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/insert_iter_value.pass.cpp @@ -62,6 +62,14 @@ assert(v[j] == 0); } #if TEST_STD_VER >= 11 + { + std::vector> v(10); + std::vector>::iterator i + = v.insert(v.cbegin() + 10, 1); + assert(v.size() == 11); + assert(i == v.begin() + 10); + assert(*i == 1); + } { std::vector> v(100); std::vector>::iterator i = v.insert(v.cbegin() + 10, 1); diff --git a/libcxx/test/std/containers/sequences/vector.bool/reserve.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/reserve.pass.cpp --- a/libcxx/test/std/containers/sequences/vector.bool/reserve.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/reserve.pass.cpp @@ -40,6 +40,11 @@ v.reserve(10); assert(v.capacity() >= 10); } + { + std::vector> v; + v.reserve(10); + assert(v.capacity() >= 10); + } { std::vector> v(100); assert(v.capacity() >= 100); diff --git a/libcxx/test/std/containers/sequences/vector.bool/resize_size.pass.cpp b/libcxx/test/std/containers/sequences/vector.bool/resize_size.pass.cpp --- a/libcxx/test/std/containers/sequences/vector.bool/resize_size.pass.cpp +++ b/libcxx/test/std/containers/sequences/vector.bool/resize_size.pass.cpp @@ -33,6 +33,12 @@ assert(v.capacity() >= 400); } #if TEST_STD_VER >= 11 + { + std::vector> v; + v.resize(10); + assert(v.size() == 10); + assert(v.capacity() >= 10); + } { std::vector> v(100); v.resize(50);