diff options
author | Jonathan Wakely <jwakely@redhat.com> | 2021-06-04 15:59:37 +0100 |
---|---|---|
committer | Jonathan Wakely <jwakely@redhat.com> | 2021-06-04 15:59:37 +0100 |
commit | f78f25f43864f38ae5a6a9fcce8f26c94fe45bcd (patch) | |
tree | 7546d834d06dc0567bd6ce1b8119ebd890999895 | |
parent | ad3f0ad4bafe377072a53ded468fd9948e659f46 (diff) | |
download | gcc-f78f25f43864f38ae5a6a9fcce8f26c94fe45bcd.zip gcc-f78f25f43864f38ae5a6a9fcce8f26c94fe45bcd.tar.gz gcc-f78f25f43864f38ae5a6a9fcce8f26c94fe45bcd.tar.bz2 |
libstdc++: Add feature test macro for heterogeneous lookup in unordered containers
Also update the C++20 status docs.
Signed-off-by: Jonathan Wakely <jwakely@redhat.com>
libstdc++-v3/ChangeLog:
* doc/xml/manual/status_cxx2020.xml:
* doc/html/*: Regenerate.
* include/bits/hashtable.h (__cpp_lib_generic_unordered_lookup):
Define.
* include/std/version (__cpp_lib_generic_unordered_lookup):
Define.
* testsuite/23_containers/unordered_map/operations/1.cc: Check
feature test macro.
* testsuite/23_containers/unordered_set/operations/1.cc:
Likewise.
-rw-r--r-- | libstdc++-v3/doc/html/manual/status.html | 11 | ||||
-rw-r--r-- | libstdc++-v3/doc/xml/manual/status_cxx2020.xml | 16 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/hashtable.h | 6 | ||||
-rw-r--r-- | libstdc++-v3/include/std/version | 3 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc | 7 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc | 7 |
6 files changed, 39 insertions, 11 deletions
diff --git a/libstdc++-v3/doc/html/manual/status.html b/libstdc++-v3/doc/html/manual/status.html index dee6c3a..75ac9e7 100644 --- a/libstdc++-v3/doc/html/manual/status.html +++ b/libstdc++-v3/doc/html/manual/status.html @@ -1364,10 +1364,10 @@ or any notes about the implementation. </td><td align="center"> 10.1 </td><td align="left"> <code class="code">__cpp_lib_jthread >= 201907L</code> </td></tr><tr><td align="left"> Rename <code class="code">condition_variable_any</code> interruptible wait methods </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1869r1.html" target="_top"> P1869R1 </a> - </td><td align="center"> 10.1 </td><td align="left"> <code class="code">__cpp_lib_jthread >= 201911L</code> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Atomic waiting and notifying, std::semaphore, std::latch and std::barrier </td><td align="left"> + </td><td align="center"> 10.1 </td><td align="left"> <code class="code">__cpp_lib_jthread >= 201911L</code> </td></tr><tr><td align="left"> Atomic waiting and notifying, std::semaphore, std::latch and std::barrier </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1135r6.html" target="_top"> P1135R6 </a> - </td><td align="center"> </td><td align="left"> + </td><td align="center"> 11.1 </td><td align="left"> <div class="informaltable"><table class="informaltable" border="0"><colgroup><col /></colgroup><tbody><tr><td> <code class="code">__cpp_lib_atomic_lock_free_type_aliases >= 201907L</code> </td></tr><tr><td> <code class="code">__cpp_lib_atomic_flag_test >= 201907L</code> </td></tr><tr><td> <code class="code">__cpp_lib_atomic_wait >= 201907L</code> </td></tr><tr><td> <code class="code">__cpp_lib_semaphore >= 201907L</code> </td></tr><tr><td> <code class="code">__cpp_lib_latch >= 201907L</code> </td></tr><tr><td> <code class="code">__cpp_lib_barrier >= 201907L</code> </td></tr></tbody></table></div> </td></tr><tr><td align="left"> Fixing Atomic Initialization </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0883r2.pdf" target="_top"> @@ -1479,10 +1479,13 @@ or any notes about the implementation. </td><td align="center"> 9.1 </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Comparing Unordered Containers </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf" target="_top"> P0809R0 </a> - </td><td align="center"> </td><td align="left"> </td></tr><tr bgcolor="#C8B0B0"><td align="left"> Heterogeneous lookup for unordered containers </td><td align="left"> + </td><td align="center"> </td><td align="left"> </td></tr><tr><td align="left"> Heterogeneous lookup for unordered containers </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html" target="_top"> P0919R3 </a> - </td><td align="center"> </td><td align="left"> <code class="code">__cpp_lib_generic_unordered_lookup >= 201811</code> </td></tr><tr><td align="left"> Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 </td><td align="left"> + </td><td align="center"> 11.1 </td><td align="left"> <code class="code">__cpp_lib_generic_unordered_lookup >= 201811</code> </td></tr><tr><td align="left"> Refinement Proposal for P0919 </td><td align="left"> + <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1690r1.html" target="_top"> + P1690R1 </a> + </td><td align="center"> 11.1 </td><td align="left"> </td></tr><tr><td align="left"> Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 </td><td align="left"> <a class="link" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html" target="_top"> P1209R0 </a> </td><td align="center"> 9.1 </td><td align="left"> <code class="code">__cpp_lib_erase_if >= 201811L</code> </td></tr><tr><td align="left"> Improving the Return Value of Erase-Like Algorithms </td><td align="left"> diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml index b62a432..ca12d80 100644 --- a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml +++ b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml @@ -429,13 +429,12 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> <entry> Atomic waiting and notifying, std::semaphore, std::latch and std::barrier </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1135r6.html"> P1135R6 </link> </entry> - <entry align="center"> </entry> + <entry align="center"> 11.1 </entry> <entry> <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> <row><entry> <code>__cpp_lib_atomic_lock_free_type_aliases >= 201907L</code> </entry></row> @@ -803,17 +802,26 @@ or any notes about the implementation. </row> <row> - <?dbhtml bgcolor="#C8B0B0" ?> <entry> Heterogeneous lookup for unordered containers </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html"> P0919R3 </link> </entry> - <entry align="center"> </entry> + <entry align="center"> 11.1 </entry> <entry> <code>__cpp_lib_generic_unordered_lookup >= 201811</code> </entry> </row> <row> + <entry> Refinement Proposal for P0919 </entry> + <entry> + <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1690r1.html"> + P1690R1 </link> + </entry> + <entry align="center"> 11.1 </entry> + <entry/> + </row> + + <row> <entry> Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 </entry> <entry> <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html"> diff --git a/libstdc++-v3/include/bits/hashtable.h b/libstdc++-v3/include/bits/hashtable.h index 4bdbe7d..dfc2a2a 100644 --- a/libstdc++-v3/include/bits/hashtable.h +++ b/libstdc++-v3/include/bits/hashtable.h @@ -735,7 +735,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION std::pair<const_iterator, const_iterator> equal_range(const key_type& __k) const; -#if __cplusplus > 201702L +#if __cplusplus >= 202002L +#define __cpp_lib_generic_unordered_lookup 201811L + template<typename _Kt, typename = __has_is_transparent_t<_Hash, _Kt>, typename = __has_is_transparent_t<_Equal, _Kt>> @@ -765,7 +767,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION typename = __has_is_transparent_t<_Equal, _Kt>> pair<const_iterator, const_iterator> _M_equal_range_tr(const _Kt& __k) const; -#endif +#endif // C++20 private: // Bucket index computation helpers. diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version index ea0e18a..8d0b2b9 100644 --- a/libstdc++-v3/include/std/version +++ b/libstdc++-v3/include/std/version @@ -169,7 +169,7 @@ #define __cpp_lib_variant 201606L #endif -#if __cplusplus > 201703L +#if __cplusplus >= 202002L // c++20 #define __cpp_lib_atomic_flag_test 201907L #define __cpp_lib_atomic_float 201711L @@ -225,6 +225,7 @@ #define __cpp_lib_constexpr_tuple 201811L #define __cpp_lib_constexpr_utility 201811L #define __cpp_lib_erase_if 202002L +#define __cpp_lib_generic_unordered_lookup 201811L #define __cpp_lib_interpolate 201902L #ifdef _GLIBCXX_HAS_GTHREADS # define __cpp_lib_jthread 201911L diff --git a/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc index 4f2df728..f310a8a 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_map/operations/1.cc @@ -18,6 +18,13 @@ // { dg-do run { target c++20 } } #include <unordered_map> + +#ifndef __cpp_lib_generic_unordered_lookup +# error "Feature-test macro for generic lookup missing in <unordered_map>" +#elif __cpp_lib_generic_unordered_lookup < 201811L +# error "Feature-test macro for generic lookup has wrong value in <unordered_map>" +#endif + #include <testsuite_hooks.h> struct Equal diff --git a/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc index 34414d2..66826dc 100644 --- a/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc +++ b/libstdc++-v3/testsuite/23_containers/unordered_set/operations/1.cc @@ -18,6 +18,13 @@ // { dg-do run { target c++20 } } #include <unordered_set> + +#ifndef __cpp_lib_generic_unordered_lookup +# error "Feature-test macro for generic lookup missing in <unordered_set>" +#elif __cpp_lib_generic_unordered_lookup < 201811L +# error "Feature-test macro for generic lookup has wrong value in <unordered_set>" +#endif + #include <testsuite_hooks.h> struct Equal |