[PATCH] Enforce allocator::value_type consistency for containers in C++2a

Jonathan Wakely jwakely@redhat.com
Thu Jun 6 13:36:00 GMT 2019


On 03/06/19 14:23 +0100, Jonathan Wakely wrote:
>In previous standards it is undefined for a container and its allocator
>to have a different value_type. Libstdc++ has traditionally allowed it
>as an extension, automatically rebinding the allocator to the
>container's value_type. Since GCC 8.1 that extension has been disabled
>for C++11 and later when __STRICT_ANSI__ is defined (i.e. for
>-std=c++11, -std=c++14, -std=c++17 and -std=c++2a).
>
>Since the acceptance of P1463R1 into the C++2a draft an incorrect
>allocator::value_type now requires a diagnostic. This patch implements
>that by enabling the static_assert for -std=gnu++2a as well.
>
>	* doc/xml/manual/status_cxx2020.xml: Document P1463R1 status.
>	* include/bits/forward_list.h [__cplusplus > 201703]: Enable
>	allocator::value_type assertion for C++2a.
>	* include/bits/hashtable.h: Likewise.
>	* include/bits/stl_deque.h: Likewise.
>	* include/bits/stl_list.h: Likewise.
>	* include/bits/stl_map.h: Likewise.
>	* include/bits/stl_multimap.h: Likewise.
>	* include/bits/stl_multiset.h: Likewise.
>	* include/bits/stl_set.h: Likewise.
>	* include/bits/stl_vector.h: Likewise.
>	* testsuite/23_containers/deque/48101-3_neg.cc: New test.
>	* testsuite/23_containers/forward_list/48101-3_neg.cc: New test.
>	* testsuite/23_containers/list/48101-3_neg.cc: New test.
>	* testsuite/23_containers/map/48101-3_neg.cc: New test.
>	* testsuite/23_containers/multimap/48101-3_neg.cc: New test.
>	* testsuite/23_containers/multiset/48101-3_neg.cc: New test.
>	* testsuite/23_containers/set/48101-3_neg.cc: New test.
>	* testsuite/23_containers/unordered_map/48101-3_neg.cc: New test.
>	* testsuite/23_containers/unordered_multimap/48101-3_neg.cc: New test.
>	* testsuite/23_containers/unordered_multiset/48101-3_neg.cc: New test.
>	* testsuite/23_containers/unordered_set/48101-3_neg.cc: New test.
>	* testsuite/23_containers/vector/48101-3_neg.cc: New test.

The tests for this extension now fail when run with -std=gnu++2a. This
fixes them. Tested x86_64-linux with various -std options. Committed
to trunk.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: patch.txt
Type: text/x-patch
Size: 33690 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/libstdc++/attachments/20190606/08247b01/attachment.bin>


More information about the Libstdc++ mailing list