[PATCH] libstdc++: Ensure that std::vector<bool> allocator has bool value_type
Tomasz Kaminski
tkaminsk@redhat.com
Mon Mar 24 08:47:48 GMT 2025
On Sat, Mar 22, 2025 at 9:35 PM Jonathan Wakely <jwakely@redhat.com> wrote:
> This is the subject of LWG 4228 which notes that libstdc++ doesn't
> enforce this requirement. That's just a bug because I forgot to add it
> to vector<bool> when adding it elsewhere.
>
> For consistency with the other containers we should not allow incorrect
> allocator types for strict -std=c++NN modes, but it is very late to make
> that change for GCC 15 so this only enables the assertion for C++20
> (where it's required). For GCC 16 we can enable it for strict modes too.
>
> libstdc++-v3/ChangeLog:
>
> * include/bits/stl_bvector.h (vector<bool, A>): Enforce the
> C++20 requirement that the allocator's value_type matches the
> container.
> * testsuite/23_containers/vector/bool/cons/from_range.cc: Fix
> incorrect allocator type.
> ---
>
> Tested x86_64-linux.
>
LGTM
>
> libstdc++-v3/include/bits/stl_bvector.h | 4 ++++
> .../testsuite/23_containers/vector/bool/cons/from_range.cc | 2 +-
> 2 files changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/libstdc++-v3/include/bits/stl_bvector.h
> b/libstdc++-v3/include/bits/stl_bvector.h
> index 14a0b0fdbb6..3e4831b1cb5 100644
> --- a/libstdc++-v3/include/bits/stl_bvector.h
> +++ b/libstdc++-v3/include/bits/stl_bvector.h
> @@ -751,6 +751,10 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
>
> #if __cplusplus >= 201103L
> friend struct std::hash<vector>;
> +# if __cplusplus > 201703L // || defined __STRICT_ANSI__
> + static_assert(is_same<typename _Alloc::value_type, bool>::value,
> + "std::vector must have the same value_type as its allocator");
> +# endif
> #endif
>
> public:
> diff --git
> a/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc
> b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc
> index f531e7f5039..37f0ecf32ad 100644
> --- a/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc
> +++ b/libstdc++-v3/testsuite/23_containers/vector/bool/cons/from_range.cc
> @@ -71,7 +71,7 @@ test_ranges()
> bool val;
> };
> using rvalue_input_range = test_range<C, input_iterator_wrapper_rval>;
> - do_test<rvalue_input_range>(std::allocator<int>());
> + do_test<rvalue_input_range>(std::allocator<bool>());
>
> return true;
> }
> --
> 2.49.0
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://gcc.gnu.org/pipermail/libstdc++/attachments/20250324/c9b025a9/attachment.htm>
More information about the Libstdc++
mailing list