diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2024-07-10 10:29:52 +0100 |
---|---|---|
committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-07-10 22:05:22 +0100 |
commit | c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a (patch) | |
tree | fe988dbbe222495378317a536125a0aa1582041b | |
parent | cda469a59e222496248025e0834a15d466f79d4a (diff) | |
download | gcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.zip gcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.tar.gz gcc-c5efc6eca8e3eee7038ae218cf7e2dbe9ed9d82a.tar.bz2 |
libstdc++: Use direct-initialization for std::vector<bool>'s allocator [PR115854]
The consensus in the standard committee is that this change shouldn't be
necessary, and the Allocator requirements should require conversions
between rebound allocators to be implicit. But we can make it work for
now anyway.
libstdc++-v3/ChangeLog:
PR libstdc++/115854
* include/bits/stl_bvector.h (_Bvector_base): Convert allocator
to rebound type explicitly.
* testsuite/23_containers/vector/allocator/115854.cc: New test.
* testsuite/23_containers/vector/bool/allocator/115854.cc: New test.
3 files changed, 21 insertions, 1 deletions
diff --git a/libstdc++-v3/include/bits/stl_bvector.h b/libstdc++-v3/include/bits/stl_bvector.h index 8685cc6..245e1c3 100644 --- a/libstdc++-v3/include/bits/stl_bvector.h +++ b/libstdc++-v3/include/bits/stl_bvector.h @@ -654,7 +654,7 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER _GLIBCXX20_CONSTEXPR _Bvector_base(const allocator_type& __a) - : _M_impl(__a) { } + : _M_impl(_Bit_alloc_type(__a)) { } #if __cplusplus >= 201103L _Bvector_base(_Bvector_base&&) = default; diff --git a/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc b/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc new file mode 100644 index 0000000..6c9016b --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/allocator/115854.cc @@ -0,0 +1,10 @@ +// { dg-do compile { target c++11 } } + +#include <vector> +#include <testsuite_allocator.h> + +__gnu_test::ExplicitConsAlloc<int> alloc; +std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v; +std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v1(alloc); +std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v2(v1, alloc); +std::vector<int, __gnu_test::ExplicitConsAlloc<int>> v3(std::move(v1), alloc); diff --git a/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc b/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc new file mode 100644 index 0000000..14b28cc --- /dev/null +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/allocator/115854.cc @@ -0,0 +1,10 @@ +// { dg-do compile { target c++11 } } + +#include <vector> +#include <testsuite_allocator.h> + +__gnu_test::ExplicitConsAlloc<bool> alloc; +std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v; +std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v1(alloc); +std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v2(v1, alloc); +std::vector<bool, __gnu_test::ExplicitConsAlloc<bool>> v3(std::move(v1), alloc); |