public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
* [committed 0/8] libstdc++: Add/update/fix feature test macros
@ 2020-04-22 21:57 Jonathan Wakely
  2020-04-22 21:58 ` [committed 1/8] libstdc++: Update value of __cpp_lib_jthread macro Jonathan Wakely
                   ` (10 more replies)
  0 siblings, 11 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:57 UTC (permalink / raw)
  To: libstdc++, gcc-patches

This series of patches fixes a number of omissions and errors in the
feature test macros we define.

Tested powerpc64le-linux, committed to master.

Jonathan Wakely (8):
  libstdc++: Update value of __cpp_lib_jthread macro
  libstdc++: Remove non-standard feature test macros
  libstdc++: Add missing feature test macros
  libstdc++: Rename __cpp_lib_constexpr_invoke macro
  libstdc++: Update __cpp_lib_concepts value
  libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility>
  libstdc++: Update (and revert) value of __cpp_lib_array_constexpr
  libstdc++: Define __cpp_lib_execution feature test macro

 libstdc++-v3/ChangeLog                        | 87 +++++++++++++++++++
 libstdc++-v3/include/bits/ptr_traits.h        |  3 +
 libstdc++-v3/include/bits/range_access.h      |  1 +
 libstdc++-v3/include/bits/ranges_algo.h       |  1 +
 libstdc++-v3/include/bits/stl_iterator.h      |  6 +-
 libstdc++-v3/include/bits/stl_map.h           |  1 -
 libstdc++-v3/include/bits/unordered_map.h     |  1 -
 libstdc++-v3/include/std/atomic               |  1 +
 libstdc++-v3/include/std/concepts             |  2 +-
 libstdc++-v3/include/std/condition_variable   |  3 +-
 libstdc++-v3/include/std/execution            |  1 +
 libstdc++-v3/include/std/functional           |  2 +-
 libstdc++-v3/include/std/memory               |  1 +
 libstdc++-v3/include/std/memory_resource      |  1 +
 libstdc++-v3/include/std/stop_token           |  2 +-
 libstdc++-v3/include/std/string_view          |  1 +
 libstdc++-v3/include/std/type_traits          |  4 +
 libstdc++-v3/include/std/utility              |  8 +-
 libstdc++-v3/include/std/version              | 26 ++++--
 .../testsuite/20_util/exchange/constexpr.cc   |  6 --
 .../function_objects/invoke/constexpr.cc      |  4 +-
 .../testsuite/20_util/to_address/1_neg.cc     |  2 +-
 .../array/comparison_operators/constexpr.cc   |  6 ++
 .../array/element_access/constexpr_c++17.cc   | 57 ++++++++++++
 .../array/requirements/constexpr_fill.cc      |  6 ++
 .../array/requirements/constexpr_iter.cc      | 12 ++-
 .../25_algorithms/pstl/feature_test-2.cc      | 27 ++++++
 .../25_algorithms/pstl/feature_test-3.cc      | 34 ++++++++
 .../25_algorithms/pstl/feature_test-4.cc      | 33 +++++++
 .../25_algorithms/pstl/feature_test-5.cc      | 28 ++++++
 .../25_algorithms/pstl/feature_test.cc        | 27 +-----
 .../condition_variable_any/stop_token/1.cc    |  2 +-
 .../condition_variable_any/stop_token/2.cc    |  2 +-
 .../testsuite/30_threads/jthread/1.cc         |  2 +-
 .../testsuite/30_threads/jthread/2.cc         |  2 +-
 .../testsuite/30_threads/stop_token/1.cc      |  2 +-
 .../testsuite/30_threads/stop_token/2.cc      |  2 +-
 libstdc++-v3/testsuite/std/concepts/1.cc      |  2 +-
 libstdc++-v3/testsuite/std/concepts/2.cc      |  2 +-
 39 files changed, 345 insertions(+), 65 deletions(-)
 create mode 100644 libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc

-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 1/8] libstdc++: Update value of __cpp_lib_jthread macro
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
@ 2020-04-22 21:58 ` Jonathan Wakely
  2020-04-22 21:58 ` [committed 2/8] libstdc++: Remove non-standard feature test macros Jonathan Wakely
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:58 UTC (permalink / raw)
  To: libstdc++, gcc-patches

	* include/std/condition_variable (__cpp_lib_jthread): Remove
	redundant definition.
	* include/std/stop_token (__cpp_lib_jthread): Update macro value to
	indicate P1869R1 support.
	* include/std/version (__cpp_lib_jthread): Update value.
	* testsuite/30_threads/condition_variable_any/stop_token/1.cc: Check
	for updated macro value.
	* testsuite/30_threads/condition_variable_any/stop_token/2.cc:
	Likewise.
	* testsuite/30_threads/jthread/1.cc: Likewise.
	* testsuite/30_threads/jthread/2.cc: Likewise.
	* testsuite/30_threads/stop_token/1.cc: Likewise.
	* testsuite/30_threads/stop_token/2.cc: Likewise.
---
 libstdc++-v3/ChangeLog                             | 14 ++++++++++++++
 libstdc++-v3/include/std/condition_variable        |  3 +--
 libstdc++-v3/include/std/stop_token                |  2 +-
 libstdc++-v3/include/std/version                   |  2 +-
 .../condition_variable_any/stop_token/1.cc         |  2 +-
 .../condition_variable_any/stop_token/2.cc         |  2 +-
 libstdc++-v3/testsuite/30_threads/jthread/1.cc     |  2 +-
 libstdc++-v3/testsuite/30_threads/jthread/2.cc     |  2 +-
 libstdc++-v3/testsuite/30_threads/stop_token/1.cc  |  2 +-
 libstdc++-v3/testsuite/30_threads/stop_token/2.cc  |  2 +-
 10 files changed, 23 insertions(+), 10 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 2e1484fefb5..dc0b1eecfb0 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,19 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/std/condition_variable (__cpp_lib_jthread): Remove
+	redundant definition.
+	* include/std/stop_token (__cpp_lib_jthread): Update macro value to
+	indicate P1869R1 support.
+	* include/std/version (__cpp_lib_jthread): Update value.
+	* testsuite/30_threads/condition_variable_any/stop_token/1.cc: Check
+	for updated macro value.
+	* testsuite/30_threads/condition_variable_any/stop_token/2.cc:
+	Likewise.
+	* testsuite/30_threads/jthread/1.cc: Likewise.
+	* testsuite/30_threads/jthread/2.cc: Likewise.
+	* testsuite/30_threads/stop_token/1.cc: Likewise.
+	* testsuite/30_threads/stop_token/2.cc: Likewise.
+
 	* testsuite/21_strings/basic_string/erasure.cc: Check for
 	__cpp_lib_erase_if macro.
 	* testsuite/23_containers/deque/erasure.cc: Add header name to #error
diff --git a/libstdc++-v3/include/std/condition_variable b/libstdc++-v3/include/std/condition_variable
index cc7f99f6921..2db9dff6c31 100644
--- a/libstdc++-v3/include/std/condition_variable
+++ b/libstdc++-v3/include/std/condition_variable
@@ -47,8 +47,7 @@
 #include <bits/cxxabi_forced.h>
 
 #if __cplusplus > 201703L
-#define __cpp_lib_jthread 201907L
-#include <stop_token>
+# include <stop_token>
 #endif
 
 #if defined(_GLIBCXX_HAS_GTHREADS)
diff --git a/libstdc++-v3/include/std/stop_token b/libstdc++-v3/include/std/stop_token
index 87beb08c71d..847d12f7454 100644
--- a/libstdc++-v3/include/std/stop_token
+++ b/libstdc++-v3/include/std/stop_token
@@ -34,7 +34,7 @@
 #include <atomic>
 
 #ifdef _GLIBCXX_HAS_GTHREADS
-# define __cpp_lib_jthread 201907L
+# define __cpp_lib_jthread 201911L
 # include <bits/gthr.h>
 # if __has_include(<semaphore>)
 #  include <semaphore>
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 6d7dcc46023..dafb09f982a 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -191,7 +191,7 @@
 #define __cpp_lib_erase_if 202002L
 #define __cpp_lib_interpolate 201902L
 #ifdef _GLIBCXX_HAS_GTHREADS
-# define __cpp_lib_jthread 201907L
+# define __cpp_lib_jthread 201911L
 #endif
 #define __cpp_lib_list_remove_return_type 201806L
 #define __cpp_lib_math_constants 201907L
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc
index 59dafeb2d86..5b71cfb979f 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/1.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <condition_variable>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <condition_variable>"
 #endif
diff --git a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc
index 7254024bbb3..0f017e43996 100644
--- a/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/condition_variable_any/stop_token/2.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <version>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <version>"
 #endif
diff --git a/libstdc++-v3/testsuite/30_threads/jthread/1.cc b/libstdc++-v3/testsuite/30_threads/jthread/1.cc
index dc47df9d205..d7c0a836b8b 100644
--- a/libstdc++-v3/testsuite/30_threads/jthread/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/jthread/1.cc
@@ -23,6 +23,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <thread>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <thread>"
 #endif
diff --git a/libstdc++-v3/testsuite/30_threads/jthread/2.cc b/libstdc++-v3/testsuite/30_threads/jthread/2.cc
index 9a0abbe8f70..4c196c3fe92 100644
--- a/libstdc++-v3/testsuite/30_threads/jthread/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/jthread/2.cc
@@ -23,6 +23,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <version>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <version>"
 #endif
diff --git a/libstdc++-v3/testsuite/30_threads/stop_token/1.cc b/libstdc++-v3/testsuite/30_threads/stop_token/1.cc
index 19294552fce..fffff3740c5 100644
--- a/libstdc++-v3/testsuite/30_threads/stop_token/1.cc
+++ b/libstdc++-v3/testsuite/30_threads/stop_token/1.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <stop_token>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <stop_token>"
 #endif
diff --git a/libstdc++-v3/testsuite/30_threads/stop_token/2.cc b/libstdc++-v3/testsuite/30_threads/stop_token/2.cc
index 7254024bbb3..0f017e43996 100644
--- a/libstdc++-v3/testsuite/30_threads/stop_token/2.cc
+++ b/libstdc++-v3/testsuite/30_threads/stop_token/2.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_jthread
 # error "Feature-test macro for jthread missing in <version>"
-#elif __cpp_lib_jthread != 201907L
+#elif __cpp_lib_jthread != 201911L
 # error "Feature-test macro for jthread has wrong value in <version>"
 #endif
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 2/8] libstdc++: Remove non-standard feature test macros
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
  2020-04-22 21:58 ` [committed 1/8] libstdc++: Update value of __cpp_lib_jthread macro Jonathan Wakely
@ 2020-04-22 21:58 ` Jonathan Wakely
  2020-04-22 21:58 ` [committed 3/8] libstdc++: Add missing " Jonathan Wakely
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:58 UTC (permalink / raw)
  To: libstdc++, gcc-patches

These macros were replaced by __cpp_lib_map_try_emplace and
__cpp_lib_unordered_map_try_emplace, because those names are more
descriptive. We've kept both old and new names so far, but I think we
can remove the old ones now.

	* include/bits/stl_map.h (__cpp_lib_map_insertion): Remove old
	macro.
	* include/bits/unordered_map.h (__cpp_lib_unordered_map_insertion):
	Likewise.
	* include/std/version (__cpp_lib_map_insertion)
	(__cpp_lib_unordered_map_insertion): Remove.
---
 libstdc++-v3/ChangeLog                    | 7 +++++++
 libstdc++-v3/include/bits/stl_map.h       | 1 -
 libstdc++-v3/include/bits/unordered_map.h | 1 -
 libstdc++-v3/include/std/version          | 2 --
 4 files changed, 7 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index dc0b1eecfb0..4fd72daa942 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,12 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/bits/stl_map.h (__cpp_lib_map_insertion): Remove old
+	macro.
+	* include/bits/unordered_map.h (__cpp_lib_unordered_map_insertion):
+	Likewise.
+	* include/std/version (__cpp_lib_map_insertion)
+	(__cpp_lib_unordered_map_insertion): Remove.
+
 	* include/std/condition_variable (__cpp_lib_jthread): Remove
 	redundant definition.
 	* include/std/stop_token (__cpp_lib_jthread): Update macro value to
diff --git a/libstdc++-v3/include/bits/stl_map.h b/libstdc++-v3/include/bits/stl_map.h
index 5039efd86b7..2772d11462e 100644
--- a/libstdc++-v3/include/bits/stl_map.h
+++ b/libstdc++-v3/include/bits/stl_map.h
@@ -894,7 +894,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 	{ _M_t._M_insert_range_unique(__first, __last); }
 
 #if __cplusplus > 201402L
-#define __cpp_lib_map_insertion 201411
       /**
        *  @brief Attempts to insert or assign a std::pair into the %map.
        *  @param __k    Key to use for finding a possibly existing pair in
diff --git a/libstdc++-v3/include/bits/unordered_map.h b/libstdc++-v3/include/bits/unordered_map.h
index ab1b1d52442..0071d62e462 100644
--- a/libstdc++-v3/include/bits/unordered_map.h
+++ b/libstdc++-v3/include/bits/unordered_map.h
@@ -657,7 +657,6 @@ _GLIBCXX_BEGIN_NAMESPACE_CONTAINER
 
 
 #if __cplusplus > 201402L
-#define __cpp_lib_unordered_map_insertion 201411
       /**
        *  @brief Attempts to insert a std::pair into the %unordered_map.
        *  @param __k    Key to use for finding a possibly existing pair in
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index dafb09f982a..48547c63014 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -134,7 +134,6 @@
 #define __cpp_lib_invoke 201411L
 #define __cpp_lib_lcm 201606
 #define __cpp_lib_make_from_tuple 201606
-#define __cpp_lib_map_insertion 201411
 #define __cpp_lib_map_try_emplace 201411
 #define __cpp_lib_math_special_functions 201603L
 #ifdef _GLIBCXX_HAS_GTHREADS
@@ -156,7 +155,6 @@
 #define __cpp_lib_shared_ptr_weak_type 201606
 #define __cpp_lib_string_view 201803
 // #define __cpp_lib_to_chars 201611L
-#define __cpp_lib_unordered_map_insertion 201411
 #define __cpp_lib_unordered_map_try_emplace 201411
 #define __cpp_lib_variant 201606L
 #endif
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 3/8] libstdc++: Add missing feature test macros
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
  2020-04-22 21:58 ` [committed 1/8] libstdc++: Update value of __cpp_lib_jthread macro Jonathan Wakely
  2020-04-22 21:58 ` [committed 2/8] libstdc++: Remove non-standard feature test macros Jonathan Wakely
@ 2020-04-22 21:58 ` Jonathan Wakely
  2020-04-22 21:58 ` [committed 4/8] libstdc++: Rename __cpp_lib_constexpr_invoke macro Jonathan Wakely
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:58 UTC (permalink / raw)
  To: libstdc++, gcc-patches

These macros all correspond to features that are already supported, but
the macro was not defined when the feature was implemented.

	* include/bits/ptr_traits.h (__cpp_lib_constexpr_memory): Define to
	indicate P1006R1 support.
	(__cpp_lib_to_address): Define to indicate P0653R2 support.
	* include/bits/range_access.h (__cpp_lib_ssize): Define to indicate
	P1227R2 support.
	* include/bits/ranges_algo.h (__cpp_lib_shift): Define to indicate
	P0769R2 support.
	* include/std/atomic (__cpp_lib_atomic_float): Define to indicate
	P0020R6 support.
	* include/std/memory (__cpp_lib_assume_aligned): Define to indicate
	P1007R3 support.
	* include/std/memory_resource (__cpp_lib_polymorphic_allocator):
	Define to indicate P0339R6 support.
	* include/std/string_view (__cpp_lib_starts_ends_with): Define to
	indicate P0457R2 support.
	* include/std/type_traits (__cpp_lib_is_nothrow_convertible): Define
	to indicate P0758R1 support.
	(__cpp_lib_remove_cvref): Define to indicate P0550R2 support.
	(__cpp_lib_type_identity): Define to indicate P0887R1 support.
	* include/std/version (__cpp_lib_atomic_float)
	(__cpp_lib_is_nothrow_convertible, __cpp_lib_remove_cvref)
	(__cpp_lib_type_identity, __cpp_lib_assume_aligned)
	(__cpp_lib_constexpr_memory, __cpp_lib_polymorphic_allocator)
	(__cpp_lib_shift, __cpp_lib_ssize, __cpp_lib_starts_ends_with)
	(__cpp_lib_to_address): Define.
	* testsuite/20_util/to_address/1_neg.cc: Adjust dg-error line number.
---
 libstdc++-v3/ChangeLog                        | 27 +++++++++++++++++++
 libstdc++-v3/include/bits/ptr_traits.h        |  3 +++
 libstdc++-v3/include/bits/range_access.h      |  1 +
 libstdc++-v3/include/bits/ranges_algo.h       |  1 +
 libstdc++-v3/include/std/atomic               |  1 +
 libstdc++-v3/include/std/memory               |  1 +
 libstdc++-v3/include/std/memory_resource      |  1 +
 libstdc++-v3/include/std/string_view          |  1 +
 libstdc++-v3/include/std/type_traits          |  4 +++
 libstdc++-v3/include/std/version              | 12 +++++++++
 .../testsuite/20_util/to_address/1_neg.cc     |  2 +-
 11 files changed, 53 insertions(+), 1 deletion(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4fd72daa942..182f5dc4b7e 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,32 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/bits/ptr_traits.h (__cpp_lib_constexpr_memory): Define to
+	indicate P1006R1 support.
+	(__cpp_lib_to_address): Define to indicate P0653R2 support.
+	* include/bits/range_access.h (__cpp_lib_ssize): Define to indicate
+	P1227R2 support.
+	* include/bits/ranges_algo.h (__cpp_lib_shift): Define to indicate
+	P0769R2 support.
+	* include/std/atomic (__cpp_lib_atomic_float): Define to indicate
+	P0020R6 support.
+	* include/std/memory (__cpp_lib_assume_aligned): Define to indicate
+	P1007R3 support.
+	* include/std/memory_resource (__cpp_lib_polymorphic_allocator):
+	Define to indicate P0339R6 support.
+	* include/std/string_view (__cpp_lib_starts_ends_with): Define to
+	indicate P0457R2 support.
+	* include/std/type_traits (__cpp_lib_is_nothrow_convertible): Define
+	to indicate P0758R1 support.
+	(__cpp_lib_remove_cvref): Define to indicate P0550R2 support.
+	(__cpp_lib_type_identity): Define to indicate P0887R1 support.
+	* include/std/version (__cpp_lib_atomic_float)
+	(__cpp_lib_is_nothrow_convertible, __cpp_lib_remove_cvref)
+	(__cpp_lib_type_identity, __cpp_lib_assume_aligned)
+	(__cpp_lib_constexpr_memory, __cpp_lib_polymorphic_allocator)
+	(__cpp_lib_shift, __cpp_lib_ssize, __cpp_lib_starts_ends_with)
+	(__cpp_lib_to_address): Define.
+	* testsuite/20_util/to_address/1_neg.cc: Adjust dg-error line number.
+
 	* include/bits/stl_map.h (__cpp_lib_map_insertion): Remove old
 	macro.
 	* include/bits/unordered_map.h (__cpp_lib_unordered_map_insertion):
diff --git a/libstdc++-v3/include/bits/ptr_traits.h b/libstdc++-v3/include/bits/ptr_traits.h
index 8fd91bf7bf2..541abab29e1 100644
--- a/libstdc++-v3/include/bits/ptr_traits.h
+++ b/libstdc++-v3/include/bits/ptr_traits.h
@@ -35,6 +35,7 @@
 #include <bits/move.h>
 
 #if __cplusplus > 201703L
+#define __cpp_lib_constexpr_memory 201811L
 namespace __gnu_debug { struct _Safe_iterator_base; }
 #endif
 
@@ -180,6 +181,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 	return std::__to_address(__ptr.operator->());
     }
 
+#define __cpp_lib_to_address 201711L
+
   /**
    * @brief Obtain address referenced by a pointer to an object
    * @param __ptr A pointer to an object
diff --git a/libstdc++-v3/include/bits/range_access.h b/libstdc++-v3/include/bits/range_access.h
index acd701e1385..82d9e2180c5 100644
--- a/libstdc++-v3/include/bits/range_access.h
+++ b/libstdc++-v3/include/bits/range_access.h
@@ -322,6 +322,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #endif // C++17
 
 #if __cplusplus > 201703L
+#define __cpp_lib_ssize 201902L
   template<typename _Container>
     constexpr auto
     ssize(const _Container& __cont)
diff --git a/libstdc++-v3/include/bits/ranges_algo.h b/libstdc++-v3/include/bits/ranges_algo.h
index 56fbd50ce8e..aa07cb97ea6 100644
--- a/libstdc++-v3/include/bits/ranges_algo.h
+++ b/libstdc++-v3/include/bits/ranges_algo.h
@@ -3691,6 +3691,7 @@ namespace ranges
 
 } // namespace ranges
 
+#define __cpp_lib_shift 201806L
   template<class ForwardIterator>
     constexpr ForwardIterator
     shift_left(ForwardIterator __first, ForwardIterator __last,
diff --git a/libstdc++-v3/include/std/atomic b/libstdc++-v3/include/std/atomic
index 40f23bdfc96..a455286a784 100644
--- a/libstdc++-v3/include/std/atomic
+++ b/libstdc++-v3/include/std/atomic
@@ -1477,6 +1477,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { return atomic_fetch_xor_explicit(__a, __i, memory_order_seq_cst); }
 
 #if __cplusplus > 201703L
+#define __cpp_lib_atomic_float 201711L
   template<>
     struct atomic<float> : __atomic_float<float>
     {
diff --git a/libstdc++-v3/include/std/memory b/libstdc++-v3/include/std/memory
index aaee6e42c1a..1e8eebd731c 100644
--- a/libstdc++-v3/include/std/memory
+++ b/libstdc++-v3/include/std/memory
@@ -180,6 +180,7 @@ get_pointer_safety() noexcept { return pointer_safety::relaxed; }
 // @}
 
 #if __cplusplus > 201703L
+#define __cpp_lib_assume_aligned 201811L
   /** @brief Inform the compiler that a pointer is aligned.
    *
    *  @tparam _Align An alignment value (i.e. a power of two)
diff --git a/libstdc++-v3/include/std/memory_resource b/libstdc++-v3/include/std/memory_resource
index f87ef9688f3..514c9888e7a 100644
--- a/libstdc++-v3/include/std/memory_resource
+++ b/libstdc++-v3/include/std/memory_resource
@@ -61,6 +61,7 @@ namespace pmr
   template<typename _Tp>
     class polymorphic_allocator;
 #else // C++20
+# define __cpp_lib_polymorphic_allocator 201902L
   template<typename _Tp = std::byte>
     class polymorphic_allocator;
 #endif
diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view
index b5d8eab2f33..289d4743548 100644
--- a/libstdc++-v3/include/std/string_view
+++ b/libstdc++-v3/include/std/string_view
@@ -322,6 +322,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       }
 
 #if __cplusplus > 201703L
+#define __cpp_lib_starts_ends_with 201711L
       constexpr bool
       starts_with(basic_string_view __x) const noexcept
       { return this->substr(0, __x.size()) == __x; }
diff --git a/libstdc++-v3/include/std/type_traits b/libstdc++-v3/include/std/type_traits
index f96b5297b83..75a98e38c0a 100644
--- a/libstdc++-v3/include/std/type_traits
+++ b/libstdc++-v3/include/std/type_traits
@@ -1489,6 +1489,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     { };
 
 #if __cplusplus > 201703L
+#define __cpp_lib_is_nothrow_convertible 201806L
   /// is_nothrow_convertible
   template<typename _From, typename _To>
     struct is_nothrow_convertible
@@ -3221,6 +3222,8 @@ template <typename _From, typename _To>
 #endif // C++17
 
 #if __cplusplus > 201703L
+#define __cpp_lib_remove_cvref 201711L
+
   /// Remove references and cv-qualifiers.
   template<typename _Tp>
     struct remove_cvref
@@ -3231,6 +3234,7 @@ template <typename _From, typename _To>
   template<typename _Tp>
     using remove_cvref_t = __remove_cvref_t<_Tp>;
 
+#define __cpp_lib_type_identity 201806L
   /// Identity metafunction.
   template<typename _Tp>
     struct type_identity { using type = _Tp; };
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 48547c63014..3b1fd700069 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -161,10 +161,12 @@
 
 #if __cplusplus > 201703L
 // c++2a
+#define __cpp_lib_atomic_float 201711L
 #define __cpp_lib_atomic_ref 201806L
 #define __cpp_lib_atomic_value_initialization 201911L
 #define __cpp_lib_bitops 201907L
 #define __cpp_lib_bounded_array_traits 201902L
+// __cpp_lib_char8_t is defined in <bits/c++config.h>
 #if __cpp_concepts >= 201907L
 # define __cpp_lib_concepts 201806L
 #endif
@@ -176,15 +178,20 @@
 #ifdef _GLIBCXX_HAVE_BUILTIN_IS_CONSTANT_EVALUATED
 # define __cpp_lib_is_constant_evaluated 201811L
 #endif
+#define __cpp_lib_is_nothrow_convertible 201806L
+#define __cpp_lib_remove_cvref 201711L
+#define __cpp_lib_type_identity 201806L
 #define __cpp_lib_unwrap_ref 201811L
 
 #if _GLIBCXX_HOSTED
+#define __cpp_lib_assume_aligned 201811L
 #define __cpp_lib_bind_front 201907L
 #define __cpp_lib_integer_comparison_functions 202002L
 #define __cpp_lib_constexpr_algorithms 201806L
 #define __cpp_lib_constexpr_complex 201711L
 #define __cpp_lib_constexpr_dynamic_alloc 201907L
 #define __cpp_lib_constexpr_invoke 201907L
+#define __cpp_lib_constexpr_memory 201811L
 #define __cpp_lib_constexpr_numeric 201911L
 #define __cpp_lib_erase_if 202002L
 #define __cpp_lib_interpolate 201902L
@@ -193,13 +200,18 @@
 #endif
 #define __cpp_lib_list_remove_return_type 201806L
 #define __cpp_lib_math_constants 201907L
+#define __cpp_lib_polymorphic_allocator 201902L
 #if __cpp_lib_concepts
 # define __cpp_lib_ranges 201911L
 #endif
+#define __cpp_lib_shift 201806L
 #define __cpp_lib_span 202002L
+#define __cpp_lib_ssize 201902L
+#define __cpp_lib_starts_ends_with 201711L
 #if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts
 # define __cpp_lib_three_way_comparison 201907L
 #endif
+#define __cpp_lib_to_address 201711L
 #define __cpp_lib_to_array 201907L
 #endif
 #endif // C++2a
diff --git a/libstdc++-v3/testsuite/20_util/to_address/1_neg.cc b/libstdc++-v3/testsuite/20_util/to_address/1_neg.cc
index ee64a2281fb..cb9f8dc0681 100644
--- a/libstdc++-v3/testsuite/20_util/to_address/1_neg.cc
+++ b/libstdc++-v3/testsuite/20_util/to_address/1_neg.cc
@@ -17,7 +17,7 @@
 
 // { dg-options "-std=gnu++2a" }
 // { dg-do compile { target c++2a } }
-// { dg-error "not a function pointer" "" { target *-*-* } 157 }
+// { dg-error "not a function pointer" "" { target *-*-* } 158 }
 
 #include <memory>
 
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 4/8] libstdc++: Rename __cpp_lib_constexpr_invoke macro
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (2 preceding siblings ...)
  2020-04-22 21:58 ` [committed 3/8] libstdc++: Add missing " Jonathan Wakely
@ 2020-04-22 21:58 ` Jonathan Wakely
  2020-04-22 21:59 ` [committed 5/8] libstdc++: Update __cpp_lib_concepts value Jonathan Wakely
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:58 UTC (permalink / raw)
  To: libstdc++, gcc-patches

This macro was renamed after it was added to the working draft, but we
never renamed it  in libstdc++. We haven't made a release with the old
macro name, so I see no need to keep it around.

	* include/std/functional (__cpp_lib_constexpr_invoke): Rename to
	__cpp_lib_constexpr_functional.
	* include/std/version (__cpp_lib_constexpr_invoke): Likewise.
	* testsuite/20_util/function_objects/invoke/constexpr.cc: Adjust.
---
 libstdc++-v3/ChangeLog                                       | 5 +++++
 libstdc++-v3/include/std/functional                          | 2 +-
 libstdc++-v3/include/std/version                             | 2 +-
 .../testsuite/20_util/function_objects/invoke/constexpr.cc   | 4 ++--
 4 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 182f5dc4b7e..7053a63ee91 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,10 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/std/functional (__cpp_lib_constexpr_invoke): Rename to
+	__cpp_lib_constexpr_functional.
+	* include/std/version (__cpp_lib_constexpr_invoke): Likewise.
+	* testsuite/20_util/function_objects/invoke/constexpr.cc: Adjust.
+
 	* include/bits/ptr_traits.h (__cpp_lib_constexpr_memory): Define to
 	indicate P1006R1 support.
 	(__cpp_lib_to_address): Define to indicate P0653R2 support.
diff --git a/libstdc++-v3/include/std/functional b/libstdc++-v3/include/std/functional
index faa7e85c114..2a9b2a003db 100644
--- a/libstdc++-v3/include/std/functional
+++ b/libstdc++-v3/include/std/functional
@@ -76,7 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 #if __cplusplus >= 201703L
 # define __cpp_lib_invoke 201411L
 # if __cplusplus > 201703L
-#  define __cpp_lib_constexpr_invoke 201907L
+#  define __cpp_lib_constexpr_functional 201907L
 # endif
 
   /// Invoke a callable object.
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 3b1fd700069..77255915c4d 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -190,7 +190,7 @@
 #define __cpp_lib_constexpr_algorithms 201806L
 #define __cpp_lib_constexpr_complex 201711L
 #define __cpp_lib_constexpr_dynamic_alloc 201907L
-#define __cpp_lib_constexpr_invoke 201907L
+#define __cpp_lib_constexpr_functional 201907L
 #define __cpp_lib_constexpr_memory 201811L
 #define __cpp_lib_constexpr_numeric 201911L
 #define __cpp_lib_erase_if 202002L
diff --git a/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc b/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc
index 89cb9ca0fcc..3df48d44f49 100644
--- a/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc
+++ b/libstdc++-v3/testsuite/20_util/function_objects/invoke/constexpr.cc
@@ -20,9 +20,9 @@
 
 #include <functional>
 
-#ifndef __cpp_lib_constexpr_invoke
+#ifndef __cpp_lib_constexpr_functional
 # error "Feature test macro for constexpr invoke is missing"
-#elif __cpp_lib_constexpr_invoke < 201907L
+#elif __cpp_lib_constexpr_functional < 201907L
 # error "Feature test macro for constexpr invoke has wrong value"
 #endif
 
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 5/8] libstdc++: Update __cpp_lib_concepts value
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (3 preceding siblings ...)
  2020-04-22 21:58 ` [committed 4/8] libstdc++: Rename __cpp_lib_constexpr_invoke macro Jonathan Wakely
@ 2020-04-22 21:59 ` Jonathan Wakely
  2020-04-22 21:59 ` [committed 6/8] libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility> Jonathan Wakely
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:59 UTC (permalink / raw)
  To: libstdc++, gcc-patches

	* include/std/functional (__cpp_lib_concepts): Update macro value to
	indicate P1964R2 support.
	* include/std/version (__cpp_lib_concepts): Likewise.
	* testsuite/std/concepts/1.cc: Adjust expected value.
	* testsuite/std/concepts/2.cc: Likewise.
---
 libstdc++-v3/ChangeLog                   | 6 ++++++
 libstdc++-v3/include/std/concepts        | 2 +-
 libstdc++-v3/include/std/version         | 2 +-
 libstdc++-v3/testsuite/std/concepts/1.cc | 2 +-
 libstdc++-v3/testsuite/std/concepts/2.cc | 2 +-
 5 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 7053a63ee91..4e86ec188a5 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,11 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/std/functional (__cpp_lib_concepts): Update macro value to
+	indicate P1964R2 support.
+	* include/std/version (__cpp_lib_concepts): Likewise.
+	* testsuite/std/concepts/1.cc: Adjust expected value.
+	* testsuite/std/concepts/2.cc: Likewise.
+
 	* include/std/functional (__cpp_lib_constexpr_invoke): Rename to
 	__cpp_lib_constexpr_functional.
 	* include/std/version (__cpp_lib_constexpr_invoke): Likewise.
diff --git a/libstdc++-v3/include/std/concepts b/libstdc++-v3/include/std/concepts
index e8ce1adc93a..9ffed7007d9 100644
--- a/libstdc++-v3/include/std/concepts
+++ b/libstdc++-v3/include/std/concepts
@@ -47,7 +47,7 @@ namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
-#define __cpp_lib_concepts 201806L
+#define __cpp_lib_concepts 202002L
 
   // [concepts.lang], language-related concepts
 
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 77255915c4d..85bc142bc38 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -168,7 +168,7 @@
 #define __cpp_lib_bounded_array_traits 201902L
 // __cpp_lib_char8_t is defined in <bits/c++config.h>
 #if __cpp_concepts >= 201907L
-# define __cpp_lib_concepts 201806L
+# define __cpp_lib_concepts 202002L
 #endif
 #if __cpp_impl_destroying_delete
 # define __cpp_lib_destroying_delete 201806L
diff --git a/libstdc++-v3/testsuite/std/concepts/1.cc b/libstdc++-v3/testsuite/std/concepts/1.cc
index 41726faa731..4f5812ce121 100644
--- a/libstdc++-v3/testsuite/std/concepts/1.cc
+++ b/libstdc++-v3/testsuite/std/concepts/1.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_concepts
 # error "Feature test macro for concepts is missing in <concepts>"
-#elif __cpp_lib_concepts < 201806L
+#elif __cpp_lib_concepts < 202002L
 # error "Feature test macro for concepts has wrong value in <concepts>"
 #endif
diff --git a/libstdc++-v3/testsuite/std/concepts/2.cc b/libstdc++-v3/testsuite/std/concepts/2.cc
index 706de7dd913..6967c8454a9 100644
--- a/libstdc++-v3/testsuite/std/concepts/2.cc
+++ b/libstdc++-v3/testsuite/std/concepts/2.cc
@@ -22,6 +22,6 @@
 
 #ifndef __cpp_lib_concepts
 # error "Feature test macro for concepts is missing in <version>"
-#elif __cpp_lib_concepts < 201806L
+#elif __cpp_lib_concepts < 202002L
 # error "Feature test macro for concepts has wrong value in <version>"
 #endif
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 6/8] libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility>
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (4 preceding siblings ...)
  2020-04-22 21:59 ` [committed 5/8] libstdc++: Update __cpp_lib_concepts value Jonathan Wakely
@ 2020-04-22 21:59 ` Jonathan Wakely
  2020-04-22 21:59 ` [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr Jonathan Wakely
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:59 UTC (permalink / raw)
  To: libstdc++, gcc-patches

The C++20 draft and SD-6 both say this should only be in <version> and
<algorithm>, not in <utility>.

	* include/std/utility (__cpp_lib_constexpr_algorithms): Do not define
	here.
	* testsuite/20_util/exchange/constexpr.cc: Do not expect macro to be
	defined by <utility>.
---
 libstdc++-v3/ChangeLog                               | 5 +++++
 libstdc++-v3/include/std/utility                     | 8 ++------
 libstdc++-v3/testsuite/20_util/exchange/constexpr.cc | 6 ------
 3 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4e86ec188a5..4fec7b21029 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,10 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/std/utility (__cpp_lib_constexpr_algorithms): Do not define
+	here.
+	* testsuite/20_util/exchange/constexpr.cc: Do not expect macro to be
+	defined by <utility>.
+
 	* include/std/functional (__cpp_lib_concepts): Update macro value to
 	indicate P1964R2 support.
 	* include/std/version (__cpp_lib_concepts): Likewise.
diff --git a/libstdc++-v3/include/std/utility b/libstdc++-v3/include/std/utility
index dc6e8468af5..5f1675a7679 100644
--- a/libstdc++-v3/include/std/utility
+++ b/libstdc++-v3/include/std/utility
@@ -238,7 +238,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     get(const std::pair<_Tp1, _Tp2>&& __in) noexcept
     { return __pair_get<_Int>::__const_move_get(std::move(__in)); }
 
-#if __cplusplus > 201103L
+#if __cplusplus >= 201402L
 
 #define __cpp_lib_tuples_by_type 201304
 
@@ -284,10 +284,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
 #define __cpp_lib_exchange_function 201304
 
-#if __cplusplus > 201703L
-#  define __cpp_lib_constexpr_algorithms 201806L
-#endif
-
   /// Assign @p __new_val to @p __obj and return its previous value.
   template <typename _Tp, typename _Up = _Tp>
     _GLIBCXX20_CONSTEXPR
@@ -295,7 +291,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     exchange(_Tp& __obj, _Up&& __new_val)
     { return std::__exchange(__obj, std::forward<_Up>(__new_val)); }
 
-#endif
+#endif // C++14
 
   // Stores a tuple of indices.  Used by tuple and pair, and by bind() to
   // extract the elements in a tuple.
diff --git a/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc b/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc
index 3673772ea4b..ee6cbaebdee 100644
--- a/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc
+++ b/libstdc++-v3/testsuite/20_util/exchange/constexpr.cc
@@ -20,12 +20,6 @@
 
 #include <utility>
 
-#ifndef __cpp_lib_constexpr_algorithms
-# error "Feature-test macro for constexpr algorithms missing"
-#elif __cpp_lib_constexpr_algorithms < 201806L
-# error "Feature-test macro for constexpr algorithms has wrong value"
-#endif
-
 constexpr bool
 test()
 {
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (5 preceding siblings ...)
  2020-04-22 21:59 ` [committed 6/8] libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility> Jonathan Wakely
@ 2020-04-22 21:59 ` Jonathan Wakely
  2020-04-23 20:44   ` Jonathan Wakely
  2020-04-22 21:59 ` [committed 8/8] libstdc++: Define __cpp_lib_execution feature test macro Jonathan Wakely
                   ` (3 subsequent siblings)
  10 siblings, 1 reply; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:59 UTC (permalink / raw)
  To: libstdc++, gcc-patches

This macro should have been updated to 201811 when the last C++20
changes were implemented. However those changes are not enabled for
C++17 mode, so the macro should only have the new value in C++20 mode.

This change ensures that the macro is defined to 201603 for C++17 and
201811 for C++20.

	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Define
	different values for C++17 and C++20, to indicate different feature
	sets. Update value for C++20 to indicate P1032R1 support.
	* include/std/version (__cpp_lib_array_constexpr): Likewise.
	* testsuite/23_containers/array/comparison_operators/constexpr.cc:
	Check feature test macro.
	* testsuite/23_containers/array/element_access/constexpr_c++17.cc:
	New test.
	* testsuite/23_containers/array/requirements/constexpr_fill.cc: Check
	feature test macro.
	* testsuite/23_containers/array/requirements/constexpr_iter.cc: Test
	in C++17 mode and check feature test macro.
---
 libstdc++-v3/ChangeLog                        | 13 +++++
 libstdc++-v3/include/bits/stl_iterator.h      |  6 +-
 libstdc++-v3/include/std/version              |  4 +-
 .../array/comparison_operators/constexpr.cc   |  6 ++
 .../array/element_access/constexpr_c++17.cc   | 57 +++++++++++++++++++
 .../array/requirements/constexpr_fill.cc      |  6 ++
 .../array/requirements/constexpr_iter.cc      | 12 +++-
 7 files changed, 99 insertions(+), 5 deletions(-)
 create mode 100644 libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index 4fec7b21029..cce254968fb 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,18 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Define
+	different values for C++17 and C++20, to indicate different feature
+	sets. Update value for C++20 to indicate P1032R1 support.
+	* include/std/version (__cpp_lib_array_constexpr): Likewise.
+	* testsuite/23_containers/array/comparison_operators/constexpr.cc:
+	Check feature test macro.
+	* testsuite/23_containers/array/element_access/constexpr_c++17.cc:
+	New test.
+	* testsuite/23_containers/array/requirements/constexpr_fill.cc: Check
+	feature test macro.
+	* testsuite/23_containers/array/requirements/constexpr_iter.cc: Test
+	in C++17 mode and check feature test macro.
+
 	* include/std/utility (__cpp_lib_constexpr_algorithms): Do not define
 	here.
 	* testsuite/20_util/exchange/constexpr.cc: Do not expect macro to be
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index 652f51c6e7f..d7e85b84041 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -69,8 +69,10 @@
 # include <type_traits>
 #endif
 
-#if __cplusplus > 201402L
-# define __cpp_lib_array_constexpr 201803
+#if __cplusplus > 201703L
+# define __cpp_lib_array_constexpr 201811L
+#elif __cplusplus == 201703L
+# define __cpp_lib_array_constexpr 201603L
 #endif
 
 #if __cplusplus > 201703L
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 85bc142bc38..57a05259d98 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -120,7 +120,7 @@
 #if _GLIBCXX_HOSTED
 #define __cpp_lib_any 201606L
 #define __cpp_lib_apply 201603
-#define __cpp_lib_array_constexpr 201803
+#define __cpp_lib_array_constexpr 201603L
 #define __cpp_lib_as_const 201510
 #define __cpp_lib_boyer_moore_searcher 201603
 #define __cpp_lib_chrono 201611
@@ -184,6 +184,8 @@
 #define __cpp_lib_unwrap_ref 201811L
 
 #if _GLIBCXX_HOSTED
+#undef __cpp_lib_array_constexpr
+#define __cpp_lib_array_constexpr 201811L
 #define __cpp_lib_assume_aligned 201811L
 #define __cpp_lib_bind_front 201907L
 #define __cpp_lib_integer_comparison_functions 202002L
diff --git a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
index fd6029b159e..0f3a4159dea 100644
--- a/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/comparison_operators/constexpr.cc
@@ -20,6 +20,12 @@
 
 #include <array>
 
+#ifndef __cpp_lib_array_constexpr
+# error "Feature test macro for array constexpr is missing in <array>"
+#elif __cpp_lib_array_constexpr < 201806L
+# error "Feature test macro for array constexpr has wrong value in <array>"
+#endif
+
 constexpr std::array<int, 3> a1{{1, 2, 3}};
 constexpr std::array<int, 3> a2{{4, 5, 6}};
 constexpr std::array<int, 3> a3{{1, 2, 4}};
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
new file mode 100644
index 00000000000..56d1cf256be
--- /dev/null
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
@@ -0,0 +1,57 @@
+// { dg-options "-std=gnu++17" }
+// { dg-do compile { target c++17 } }
+
+// Copyright (C) 2011-2020 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+#include <array>
+
+#ifndef __cpp_lib_array_constexpr
+# error "Feature test macro for array constexpr is missing in <array>"
+#elif __cpp_lib_array_constexpr < 201603L
+# error "Feature test macro for array constexpr has wrong value in <array>"
+#elif __cpp_lib_array_constexpr > 201603L && __cplusplus == 201703
+# error "Feature test macro for array constexpr has wrong value for C++17"
+#endif
+
+constexpr std::size_t test01()
+{
+  // array
+  typedef std::array<std::size_t, 6> array_type;
+  array_type a = { { 0, 55, 66, 99, 4115, 2 } };
+  auto v1  = a[1];
+  auto v2  = a.at(2);
+  auto v3  = a.front();
+  auto v4  = a.back();
+  return v1 + v2 + v3 + v4;
+}
+
+static_assert( test01() == (55 + 66 + 0 + 2) );
+
+constexpr std::size_t test02()
+{
+  // array
+  typedef std::array<std::size_t, 6> array_type;
+  const array_type a = { { 0, 55, 66, 99, 4115, 2 } };
+  auto v1  = a[1];
+  auto v2  = a.at(2);
+  auto v3  = a.front();
+  auto v4  = a.back();
+  return v1 + v2 + v3 + v4;
+}
+
+static_assert( test02() == (55 + 66 + 0 + 2) );
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc
index c7f9dd7b7b5..bb696346537 100644
--- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_fill.cc
@@ -20,6 +20,12 @@
 
 #include <array>
 
+#ifndef __cpp_lib_array_constexpr
+# error "Feature test macro for array constexpr is missing in <array>"
+#elif __cpp_lib_array_constexpr < 201811L
+# error "Feature test macro for array constexpr has wrong value in <array>"
+#endif
+
 constexpr bool
 test_array()
 {
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
index f3f9ae6ea41..a119937f773 100644
--- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
@@ -1,5 +1,5 @@
-// { dg-options "-std=gnu++2a" }
-// { dg-do compile { target c++2a } }
+// { dg-options "-std=gnu++17" }
+// { dg-do compile { target c++17 } }
 //
 // Copyright (C) 2019-2020 Free Software Foundation, Inc.
 //
@@ -20,6 +20,14 @@
 
 #include <array>
 
+#ifndef __cpp_lib_array_constexpr
+# error "Feature test macro for array constexpr is missing in <array>"
+#elif __cpp_lib_array_constexpr < 201603L
+# error "Feature test macro for array constexpr has wrong value in <array>"
+#elif __cpp_lib_array_constexpr > 201603L && __cplusplus == 201703
+# error "Feature test macro for array constexpr has wrong value for C++17"
+#endif
+
 constexpr int
 test()
 {
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 8/8] libstdc++: Define __cpp_lib_execution feature test macro
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (6 preceding siblings ...)
  2020-04-22 21:59 ` [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr Jonathan Wakely
@ 2020-04-22 21:59 ` Jonathan Wakely
  2020-04-23 20:41 ` [committed 9/8] libstdc++: Define __cpp_lib_three_way_comparison for freestanding Jonathan Wakely
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-22 21:59 UTC (permalink / raw)
  To: libstdc++, gcc-patches

This macro has never been defined by libstdc++, despite supporting the
parallel algorithms. It should have a different value for C++17 and
C++20, because P1001R2 should not be supported in C++17, but
unsequenced_policy is defined for C++17 (see PR p4702).

	* include/std/execution (__cpp_lib_execution): Define to indicate
	support for P0024R2 and P1001R2.
	* include/std/version (__cpp_lib_execution): Define.
	* testsuite/25_algorithms/pstl/feature_test.cc: Only test macro
	defined by <algorithm>, move other tests to new tests ...
	* testsuite/25_algorithms/pstl/feature_test-2.cc: New test.
	* testsuite/25_algorithms/pstl/feature_test-3.cc: New test.
	* testsuite/25_algorithms/pstl/feature_test-4.cc: New test.
	* testsuite/25_algorithms/pstl/feature_test-5.cc: New test.
---
 libstdc++-v3/ChangeLog                        | 10 ++++++
 libstdc++-v3/include/std/execution            |  1 +
 libstdc++-v3/include/std/version              |  2 ++
 .../25_algorithms/pstl/feature_test-2.cc      | 27 +++++++++++++++
 .../25_algorithms/pstl/feature_test-3.cc      | 34 +++++++++++++++++++
 .../25_algorithms/pstl/feature_test-4.cc      | 33 ++++++++++++++++++
 .../25_algorithms/pstl/feature_test-5.cc      | 28 +++++++++++++++
 .../25_algorithms/pstl/feature_test.cc        | 27 ++-------------
 8 files changed, 137 insertions(+), 25 deletions(-)
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
 create mode 100644 libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc

diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog
index cce254968fb..fb0c1acd268 100644
--- a/libstdc++-v3/ChangeLog
+++ b/libstdc++-v3/ChangeLog
@@ -1,5 +1,15 @@
 2020-04-22  Jonathan Wakely  <jwakely@redhat.com>
 
+	* include/std/execution (__cpp_lib_execution): Define to indicate
+	support for P0024R2 and P1001R2.
+	* include/std/version (__cpp_lib_execution): Define.
+	* testsuite/25_algorithms/pstl/feature_test.cc: Only test macro
+	defined by <algorithm>, move other tests to new tests ...
+	* testsuite/25_algorithms/pstl/feature_test-2.cc: New test.
+	* testsuite/25_algorithms/pstl/feature_test-3.cc: New test.
+	* testsuite/25_algorithms/pstl/feature_test-4.cc: New test.
+	* testsuite/25_algorithms/pstl/feature_test-5.cc: New test.
+
 	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Define
 	different values for C++17 and C++20, to indicate different feature
 	sets. Update value for C++20 to indicate P1032R1 support.
diff --git a/libstdc++-v3/include/std/execution b/libstdc++-v3/include/std/execution
index ac78af8eac3..cdd852deb14 100644
--- a/libstdc++-v3/include/std/execution
+++ b/libstdc++-v3/include/std/execution
@@ -50,6 +50,7 @@
 
 // Feature test macro for parallel algorithms
 # define __cpp_lib_parallel_algorithm 201603L
+# define __cpp_lib_execution 201902L
 
 #endif // C++17
 
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 57a05259d98..3024f1caf8b 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -127,6 +127,7 @@
 #define __cpp_lib_clamp 201603
 #define __cpp_lib_constexpr_char_traits 201611
 #define __cpp_lib_enable_shared_from_this 201603
+#define __cpp_lib_execution 201902L // FIXME: should be 201603L
 #define __cpp_lib_filesystem 201703
 #define __cpp_lib_gcd 201606
 #define __cpp_lib_gcd_lcm 201606
@@ -188,6 +189,7 @@
 #define __cpp_lib_array_constexpr 201811L
 #define __cpp_lib_assume_aligned 201811L
 #define __cpp_lib_bind_front 201907L
+// FIXME: #define __cpp_lib_execution 201902L
 #define __cpp_lib_integer_comparison_functions 202002L
 #define __cpp_lib_constexpr_algorithms 201806L
 #define __cpp_lib_constexpr_complex 201711L
diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
new file mode 100644
index 00000000000..3e74f89bc41
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-2.cc
@@ -0,0 +1,27 @@
+// Copyright (C) 2020 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do preprocess { target c++17 } }
+
+#include <numeric>
+
+#ifndef __cpp_lib_parallel_algorithm
+# error "Feature-test macro for parallel algorithms missing in <numeric>"
+#elif __cpp_lib_parallel_algorithm != 201603L
+# error "Feature-test macro for parallel algorithms has wrong value in <numeric>"
+#endif
diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
new file mode 100644
index 00000000000..7693fe03548
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-3.cc
@@ -0,0 +1,34 @@
+// Copyright (C) 2020 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do preprocess { target c++17 } }
+
+#include <execution>
+
+#ifndef __cpp_lib_execution
+# error "Feature-test macro for execution policies is missing in <execution>"
+#elif __cpp_lib_execution != 201902L
+# error "Feature-test macro for parallel algorithms has wrong value in <execution>"
+#endif
+
+// Neither SD-6 nor C++20 requires this macro to be defined in <execution>.
+#ifndef __cpp_lib_parallel_algorithm
+# error "Feature-test macro for parallel algorithms missing in <execution>"
+#elif __cpp_lib_parallel_algorithm != 201603L
+# error "Feature-test macro for parallel algorithms has wrong value in <execution>"
+#endif
diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
new file mode 100644
index 00000000000..e7bbf920499
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-4.cc
@@ -0,0 +1,33 @@
+// Copyright (C) 2020 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do preprocess { target c++17 } }
+
+#include <version>
+
+#ifndef __cpp_lib_parallel_algorithm
+# error "Feature-test macro for parallel algorithms missing in <version>"
+#elif __cpp_lib_parallel_algorithm != 201603L
+# error "Feature-test macro for parallel algorithms has wrong value in <version>"
+#endif
+
+#ifndef __cpp_lib_execution
+# error "Feature-test macro for execution policies is missing in <version>"
+#elif __cpp_lib_execution != 201902L
+# error "Feature-test macro for parallel algorithms has wrong value in <version>"
+#endif
diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc
new file mode 100644
index 00000000000..2d991958e75
--- /dev/null
+++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test-5.cc
@@ -0,0 +1,28 @@
+// Copyright (C) 2020 Free Software Foundation, Inc.
+//
+// This file is part of the GNU ISO C++ Library.  This library is free
+// software; you can redistribute it and/or modify it under the
+// terms of the GNU General Public License as published by the
+// Free Software Foundation; either version 3, or (at your option)
+// any later version.
+
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+
+// You should have received a copy of the GNU General Public License along
+// with this library; see the file COPYING3.  If not see
+// <http://www.gnu.org/licenses/>.
+
+// { dg-options "-std=gnu++17" }
+// { dg-do preprocess { target c++17 } }
+
+#include <memory>
+
+// Neither SD-6 nor C++20 requires this macro to be defined in <memory>.
+#ifndef __cpp_lib_parallel_algorithm
+# error "Feature-test macro for parallel algorithms missing in <memory>"
+#elif __cpp_lib_parallel_algorithm != 201603L
+# error "Feature-test macro for parallel algorithms has wrong value in <memory>"
+#endif
diff --git a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc
index ce41f538c83..c3a9be5e45a 100644
--- a/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc
+++ b/libstdc++-v3/testsuite/25_algorithms/pstl/feature_test.cc
@@ -19,32 +19,9 @@
 // { dg-do preprocess { target c++17 } }
 
 #include <algorithm>
+
 #ifndef __cpp_lib_parallel_algorithm
-# error "Feature-test macro for parallel algorithms missing"
+# error "Feature-test macro for parallel algorithms missing in <algorithm>"
 #elif __cpp_lib_parallel_algorithm != 201603L
 # error "Feature-test macro for parallel algorithms has wrong value in <algorithm>"
 #endif
-
-#include <numeric>
-#if __cpp_lib_parallel_algorithm != 201603L
-# error "Feature-test macro for parallel algorithms has wrong value in <numeric>"
-#endif
-
-#include <version>
-#if __cpp_lib_parallel_algorithm != 201603L
-# error "Feature-test macro for parallel algorithms has wrong value in <version>"
-#endif
-
-// The N4810 draft does not require the macro to be defined in <execution>.
-#include <memory>
-#if __cpp_lib_parallel_algorithm != 201603L
-# error "Feature-test macro for parallel algorithms has wrong value in <memory>"
-#endif
-
-// The N4810 draft does not require the macro to be defined in <execution>.
-// Include this last, because it will trigger the inclusion of TBB headers,
-// which then include <memory>, so we need to have already checked <memory>.
-#include <execution>
-#if __cpp_lib_parallel_algorithm != 201603L
-# error "Feature-test macro for parallel algorithms has wrong value in <execution>"
-#endif
-- 
2.25.3


^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 9/8] libstdc++: Define __cpp_lib_three_way_comparison for freestanding
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (7 preceding siblings ...)
  2020-04-22 21:59 ` [committed 8/8] libstdc++: Define __cpp_lib_execution feature test macro Jonathan Wakely
@ 2020-04-23 20:41 ` Jonathan Wakely
  2020-04-23 20:46 ` [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
  2020-04-28 22:52 ` [committed 10/8] libstdc++: Fixes for feature test macros (PR 91480) Jonathan Wakely
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-23 20:41 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 220 bytes --]

The <compare> header is always supported, not only for hosted configs.

	* include/std/version (__cpp_lib_three_way_comparison): Define for
	freestanding builds.

Tested powerpc64le-linux, committed to master.



[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 1297 bytes --]

commit a2dcb56c9443d1211e14889bd0c2c21360d54cdb
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Apr 23 21:39:33 2020 +0100

    libstdc++: Define __cpp_lib_three_way_comparison for freestanding
    
    The <compare> header is always supported, not only for hosted configs.
    
            * include/std/version (__cpp_lib_three_way_comparison): Define for
            freestanding builds.

diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index d06d60c9106..1beb9aa938e 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -184,6 +184,9 @@
 #endif
 #define __cpp_lib_is_nothrow_convertible 201806L
 #define __cpp_lib_remove_cvref 201711L
+#if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts
+# define __cpp_lib_three_way_comparison 201907L
+#endif
 #define __cpp_lib_type_identity 201806L
 #define __cpp_lib_unwrap_ref 201811L
 
@@ -215,9 +218,6 @@
 #define __cpp_lib_span 202002L
 #define __cpp_lib_ssize 201902L
 #define __cpp_lib_starts_ends_with 201711L
-#if __cpp_impl_three_way_comparison >= 201907L && __cpp_lib_concepts
-# define __cpp_lib_three_way_comparison 201907L
-#endif
 #define __cpp_lib_to_address 201711L
 #define __cpp_lib_to_array 201907L
 #endif

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr
  2020-04-22 21:59 ` [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr Jonathan Wakely
@ 2020-04-23 20:44   ` Jonathan Wakely
  0 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-23 20:44 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1420 bytes --]

On 22/04/20 22:59 +0100, Jonathan Wakely wrote:
>This macro should have been updated to 201811 when the last C++20
>changes were implemented. However those changes are not enabled for
>C++17 mode, so the macro should only have the new value in C++20 mode.
>
>This change ensures that the macro is defined to 201603 for C++17 and
>201811 for C++20.
>
>	* include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Define
>	different values for C++17 and C++20, to indicate different feature
>	sets. Update value for C++20 to indicate P1032R1 support.
>	* include/std/version (__cpp_lib_array_constexpr): Likewise.
>	* testsuite/23_containers/array/comparison_operators/constexpr.cc:
>	Check feature test macro.
>	* testsuite/23_containers/array/element_access/constexpr_c++17.cc:
>	New test.
>	* testsuite/23_containers/array/requirements/constexpr_fill.cc: Check
>	feature test macro.
>	* testsuite/23_containers/array/requirements/constexpr_iter.cc: Test
>	in C++17 mode and check feature test macro.

On second thoughts, changing __cpp_lib_array_constexpr for C++17 was
wrong, it should have been left at 201803.

This partially reverts my previous change related to this macro. The
C++20 constexpr iterator requirements are always met by array:iterator,
because it's just a pointer. So the macro can be set to 201803 even in
C++17 mode.

Tested powerpc64le-linux, committed to master.



[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 3799 bytes --]

commit 40541efe1c063e9ce894b5f11ff727e4aec56e8b
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Apr 23 21:39:33 2020 +0100

    libstdc++: Change __cpp_lib_array_constexpr for C++17 again
    
    This partially reverts my previous change related to this macro. The
    C++20 constexpr iterator requirements are always met by array:iterator,
    because it's just a pointer. So the macro can be set to 201803 even in
    C++17 mode.
    
            * include/bits/stl_iterator.h (__cpp_lib_array_constexpr): Revert
            value for C++17 to 201803L because P0858R0 is supported for C++17.
            * include/std/version (__cpp_lib_array_constexpr): Likewise.
            * testsuite/23_containers/array/element_access/constexpr_c++17.cc:
            Check for value corresponding to P0031R0 features being tested.
            * testsuite/23_containers/array/requirements/constexpr_iter.cc:
            Check for value corresponding to P0858R0 features being tested.

diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index d7e85b84041..cc0b3e0a766 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -72,7 +72,7 @@
 #if __cplusplus > 201703L
 # define __cpp_lib_array_constexpr 201811L
 #elif __cplusplus == 201703L
-# define __cpp_lib_array_constexpr 201603L
+# define __cpp_lib_array_constexpr 201803L
 #endif
 
 #if __cplusplus > 201703L
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index 1beb9aa938e..fa505f25e98 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -123,7 +123,7 @@
 #if _GLIBCXX_HOSTED
 #define __cpp_lib_any 201606L
 #define __cpp_lib_apply 201603
-#define __cpp_lib_array_constexpr 201603L
+#define __cpp_lib_array_constexpr 201803L
 #define __cpp_lib_as_const 201510
 #define __cpp_lib_boyer_moore_searcher 201603
 #define __cpp_lib_chrono 201611
diff --git a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
index 56d1cf256be..dd69645833f 100644
--- a/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/element_access/constexpr_c++17.cc
@@ -24,8 +24,6 @@
 # error "Feature test macro for array constexpr is missing in <array>"
 #elif __cpp_lib_array_constexpr < 201603L
 # error "Feature test macro for array constexpr has wrong value in <array>"
-#elif __cpp_lib_array_constexpr > 201603L && __cplusplus == 201703
-# error "Feature test macro for array constexpr has wrong value for C++17"
 #endif
 
 constexpr std::size_t test01()
diff --git a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
index a119937f773..566388405b6 100644
--- a/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
+++ b/libstdc++-v3/testsuite/23_containers/array/requirements/constexpr_iter.cc
@@ -22,12 +22,13 @@
 
 #ifndef __cpp_lib_array_constexpr
 # error "Feature test macro for array constexpr is missing in <array>"
-#elif __cpp_lib_array_constexpr < 201603L
+#elif __cpp_lib_array_constexpr < 201803L
 # error "Feature test macro for array constexpr has wrong value in <array>"
-#elif __cpp_lib_array_constexpr > 201603L && __cplusplus == 201703
-# error "Feature test macro for array constexpr has wrong value for C++17"
 #endif
 
+// This test is compiled as C++17 because array::iterator is just a pointer,
+// so always meets the C++20 constexpr iterator requirements, even in C++17.
+
 constexpr int
 test()
 {

^ permalink raw reply	[flat|nested] 13+ messages in thread

* Re: [committed 0/8] libstdc++: Add/update/fix feature test macros
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (8 preceding siblings ...)
  2020-04-23 20:41 ` [committed 9/8] libstdc++: Define __cpp_lib_three_way_comparison for freestanding Jonathan Wakely
@ 2020-04-23 20:46 ` Jonathan Wakely
  2020-04-28 22:52 ` [committed 10/8] libstdc++: Fixes for feature test macros (PR 91480) Jonathan Wakely
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-23 20:46 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1106 bytes --]

On 22/04/20 22:57 +0100, Jonathan Wakely wrote:
>This series of patches fixes a number of omissions and errors in the
>feature test macros we define.
>
>Tested powerpc64le-linux, committed to master.
>
>Jonathan Wakely (8):
>  libstdc++: Update value of __cpp_lib_jthread macro
>  libstdc++: Remove non-standard feature test macros
>  libstdc++: Add missing feature test macros
>  libstdc++: Rename __cpp_lib_constexpr_invoke macro
>  libstdc++: Update __cpp_lib_concepts value
>  libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility>
>  libstdc++: Update (and revert) value of __cpp_lib_array_constexpr
>  libstdc++: Define __cpp_lib_execution feature test macro


I've backported some of these changes (and other ones related to
feature test macros) to the gcc-9 branch. This means both master and
gcc-9 should define exactly the feature test macros for the features
they support.

With that done, I've also updated the C++20 status table in the docs
(only for master so far, but I'll do it for gcc-9 too).

The attached doc patch has been committed to master.


[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 88585 bytes --]

commit be0363c80f7ac93f1dbd00da6beb9ce0eed96d9d
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Thu Apr 23 21:39:33 2020 +0100

    libstdc++: Update C++20 library status docs
    
    This reorganises the C++20 status table, grouping the proposals by
    category. It also adds more proposals, and documents all the feature
    test macros for C++20 library changes.
    
            * doc/xml/manual/status_cxx2020.xml: Update C++20 status table.
            * doc/html/*: Regenerate.

diff --git a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml
index 17f28887119..ade77cbb80b 100644
--- a/libstdc++-v3/doc/xml/manual/status_cxx2020.xml
+++ b/libstdc++-v3/doc/xml/manual/status_cxx2020.xml
@@ -1,8 +1,8 @@
-<section xmlns="http://docbook.org/ns/docbook" version="5.0" 
-	 xml:id="status.iso.2020" xreflabel="Status C++ 2020">
+<section xmlns="http://docbook.org/ns/docbook" version="5.0"
+   xml:id="status.iso.2020" xreflabel="Status C++ 2020">
 <?dbhtml filename="status_iso_cxx2020.html"?>
 
-<info><title>C++ 202a</title>
+<info><title>C++ 2020</title>
   <keywordset>
     <keyword>ISO C++</keyword>
     <keyword>2020</keyword>
@@ -26,17 +26,20 @@ not in any particular release.
 
 <para>
 The following table lists new library features that have been accepted into
-the C++2a working draft. The "Proposal" column provides a link to the
+the C++20 working draft. The "Proposal" column provides a link to the
 ISO C++ committee proposal that describes the feature, while the "Status"
 column indicates the first version of GCC that contains an implementation of
 this feature (if it has been implemented).
-The "SD-6 Feature Test" column shows the corresponding macro or header from
+A dash (&#x2014;) in the status column indicates that the changes in the proposal
+either do not affect the code in libstdc++, or the changes are not required for conformance.
+The "SD-6 Feature Test / Notes" column shows the corresponding macro or header from
 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6:
-Feature-testing recommendations for C++</link>.
+Feature-testing recommendations for C++</link> (where applicable)
+or any notes about the implementation.
 </para>
 
-<table frame="all" xml:id="table.cxx20_status">
-<title>C++ 2020 Implementation Status</title>
+<table frame="all" xml:id="table.cxx20_features">
+<title>C++ 2020 Library Features</title>
 
 <tgroup cols="4" align="left" colsep="0" rowsep="1">
 <colspec colname="c1"/>
@@ -48,44 +51,309 @@ Feature-testing recommendations for C++</link>.
       <entry>Library Feature</entry>
       <entry>Proposal</entry>
       <entry>Status</entry>
-      <entry>SD-6 Feature Test</entry>
+      <entry>SD-6 Feature Test / Notes</entry>
     </row>
   </thead>
 
   <tbody>
 
     <row>
-      <entry>  Endian just Endian </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0463r1.html">
-	P0463R1
-	</link>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Compile-time programming</emphasis>
       </entry>
-      <entry align="center"> 8.1 </entry>
-      <entry />
+    </row>
+
+    <row>
+      <entry>  Add constexpr modifiers to functions in <code>&lt;algorithm&gt;</code> and <code>&lt;utility&gt;</code> Headers </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html">
+        P0202R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_algorithms &gt;= 201703L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Constexpr for <code>swap</code> and swap related functions </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0879r0.html">
+        P0879R0 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_algorithms &gt;= 201806L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Constexpr for <code>std::complex</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0415r1.html">
+        P0415R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_complex &gt;= 201711L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry>  P0595R2 <code>std::is_constant_evaluated()</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0595r2.html">
+        P0595R2 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_is_constant_evaluated &gt;= 201811L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  More constexpr containers </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0784r7.html">
+        P0784R7 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_dynamic_alloc &gt;= 201907L</code> </entry>
     </row>
 
     <row>
       <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Extending <code>make_shared</code> to Support Arrays </entry>
+      <entry>  Making <code>std::string</code> constexpr </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0674r1.html">
-	P0674R1
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0980r1.pdf">
+        P0980R1 </link>
+      </entry>
+      <entry/>
+      <entry> <code>__cpp_lib_constexpr_string &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Making <code>std::vector</code> constexpr </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1004r2.pdf">
+        P1004R2 </link>
+      </entry>
+      <entry/>
+      <entry> <code>__cpp_lib_constexpr_vector &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Constexpr in <code>std::pointer_traits</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1006r1.pdf">
+        P1006R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_memory &gt;= 201811L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry>  constexpr for <code>&lt;numeric&gt;</code> algorithms </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1645r1.html">
+        P1645R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_numeric &gt;= 201911L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Constexpr iterator requirements </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0858r0.html">
+        P0858R0 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry>
+        <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody>
+        <row><entry> <code>__cpp_lib_array_constexpr &gt;= 201803L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_string_view &gt;= 201803L</code> </entry></row>
+        <row><entry> (both since 9.4, see Note 1) </entry></row>
+        </tbody></tgroup></informaltable>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  <code>constexpr</code> comparison operators for <code>std::array</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1023r0.pdf">
+        P1023R0 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_array_constexpr &gt;= 201806</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Misc constexpr bits </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html">
+        P1032R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry>
+        <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody>
+        <row><entry> <code>__cpp_lib_array_constexpr &gt;= 201811L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_constexpr_functional &gt;= 201811L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_constexpr_iterator &gt;= 201811L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_constexpr_string_view &gt;= 201811L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_constexpr_tuple &gt;= 201811L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_constexpr_utility &gt;= 201811L</code> </entry></row>
+        </tbody></tgroup></informaltable>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  <code>constexpr <emphasis>INVOKE</emphasis></code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1065r2.html">
+        P1065R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_constexpr_functional &gt;= 201907L</code> </entry>
+    </row>
+
+
+    <row>
+      <entry>  Transformation Trait <code>remove_cvref</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0550r2.pdf">
+        P0550R2 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_remove_cvref &gt;= 201711L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry>  Implicit conversion traits and utility functions </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0758r1.html">
+        P0758R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_is_nothrow_convertible &gt;= 201806L</code>  (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry>  The <code>identity</code> metafunction </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0887r1.pdf">
+        P0887R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_type_identity &gt;= 201806L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+
+    <row>
+      <entry>  <code>unwrap_ref_decay</code> and <code>unwrap_reference</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0318r1.pdf">
+        P0318R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_unwrap_ref &gt;= 201811L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#B0B0B0" ?>
+      <entry>  Improving Completeness Requirements for Type Traits </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1285r0.pdf">
+        P1285R0 </link>
+      </entry>
+      <entry align="center"> Partial </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  Missing feature test macros </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1353r0.html">
+        P1353R0 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry> Making std::underlying_type SFINAE-friendly </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0340r3.html">
+        P0340R3 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry> Traits for [Un]bounded Arrays </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1357r1.pdf">
+        P1357R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_bounded_array_traits &gt;= 201902L</code> </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry> Layout-compatibility and pointer-interconvertibility traits </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0466r5.pdf">
+        P0466R5 </link>
       </entry>
       <entry align="center"> </entry>
+      <entry>
+        <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody>
+        <row><entry> <code>__cpp_lib_is_layout_compatible &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_is_pointer_interconvertible &gt;= 201907L</code> </entry></row>
+        </tbody></tgroup></informaltable>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  Integrating feature-test macros into the C++ WD </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0941r2.html">
+        P0941R2 </link>
+      </entry>
+      <entry align="center"> 5.1 </entry>
       <entry />
     </row>
 
+    <row>
+      <entry>  <code>&lt;version&gt;</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0754r2.pdf">
+        P0754R2 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__has_include(&lt;version&gt;)</code> </entry>
+    </row>
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Synchronization</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  Atomic Ref </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0019r8.html">
+        P0019R8 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_atomic_ref &gt;= 201806L</code> </entry>
+    </row>
+
     <row>
       <entry>  Floating Point Atomic </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0020r6.html">
-	P0020R6
-	</link>
+        P0020R6 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
-      <entry />
+      <entry> <code>__cpp_lib_atomic_float &gt;= 201711L</code> </entry>
     </row>
 
     <row>
@@ -93,98 +361,41 @@ Feature-testing recommendations for C++</link>.
       <entry>  C++ Synchronized Buffered Ostream </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0053r7.pdf">
-	P0053R7
-	</link>
+        P0053R7 </link>
       </entry>
       <entry align="center"> </entry>
-      <entry />
+      <entry> <code>__cpp_lib_syncbuf &gt;= 201711L</code> </entry>
     </row>
 
     <row>
-      <entry>  Add constexpr modifiers to functions in <code>&lt;algorithm&gt;</code> and <code>&lt;utility&gt;</code> Headers </entry>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Manipulators for C++ Synchronized Buffered Ostream </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html">
-	P0202R3
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0753r2.pdf">
+        P0753R2 </link>
       </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_constexpr_algorithms &gt;= 201703L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  Constexpr for <code>std::complex</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0415r1.html">
-	P0415R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
+      <entry align="center"> </entry>
+      <entry> <code>__cpp_lib_syncbuf &gt;= 201803L</code> </entry>
     </row>
 
     <row>
       <entry>  Make <code>std::memory_order</code> a scoped enumeration </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0439r0.html">
-	P0439R0
-	</link>
+        P0439R0 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry />
     </row>
 
     <row>
-      <entry>  String Prefix and Suffix Checking </entry>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0457r2.html">
-	P0457R2
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0528r3.html">
+        P0528R3 </link>
       </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Transformation Trait <code>remove_cvref</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0550r2.pdf">
-	P0550R2
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>nodiscard</code> in the Library </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0600r1.pdf">
-	P0600R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  de-pessimize legacy algorithms with <code>std::move</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0616r0.pdf">
-	P0616R0
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Utility to convert a pointer to a raw pointer </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r2.html">
-	P0653R2
-	</link>
-      </entry>
-      <entry align="center"> 8.1 </entry>
+      <entry align="center"> </entry>
       <entry />
     </row>
 
@@ -193,57 +404,156 @@ Feature-testing recommendations for C++</link>.
       <entry>  Atomic <code>shared_ptr</code> </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0718r2.html">
-	P0718R2
-	</link>
+        P0718R2 </link>
       </entry>
       <entry align="center"> </entry>
-      <entry />
+      <entry> <code> __cpp_lib_atomic_shared_ptr &gt;= 201711L</code> </entry>
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Deprecate POD </entry>
+      <entry> std::stop_token and std::jthread </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0767r1.html">
-	P0767R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Library Support for the Spaceship (Comparison) Operator </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0768r1.pdf">
-	P0768R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Treating Unnecessary <code>decay</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0777r1.pdf">
-	P0777R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>&lt;span&gt;</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r7.pdf">
-	P0122R7
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0660r10.pdf">
+        P0660R10 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_span &gt;= 201803L</code> </entry>
+      <entry> <code>__cpp_lib_jthread &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry> Rename <code>condition_variable_any</code> interruptible wait methods </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1869r1.html">
+        P1869R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_jthread &gt;= 201911L</code> </entry>
+    </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>
+        <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody>
+        <row><entry> <code>__cpp_lib_atomic_lock_free_type_aliases &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_atomic_flag_test &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_atomic_wait &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_semaphore &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_latch &gt;= 201907L</code> </entry></row>
+        <row><entry> <code>__cpp_lib_barrier &gt;= 201907L</code> </entry></row>
+        </tbody></tgroup></informaltable>
+      </entry>
+    </row>
+
+    <row>
+      <entry> Fixing Atomic Initialization </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0883r2.pdf">
+        P0883R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_atomic_value_initialization &gt;= 201911L</code> </entry>
+    </row>
+
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Ranges and Concepts</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  Standard Library Concepts </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0898r3.pdf">
+        P0898R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_concepts &gt;= 201806L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Rename concepts to standard_case for C++20, while we still can </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1754r1.pdf">
+        P1754R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_concepts &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Wording for <emphasis><code>boolean-testable</code></emphasis> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1964r2.html">
+        P1964R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_concepts &gt;= 202002L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  The One Ranges Proposal </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf">
+        P0896R4 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_ranges &gt;= 201811L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Input Range Adaptors </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1035r7.pdf">
+        P1035R7 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_ranges &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  <code>ranges</code> compare algorithm are over-constrained </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1716r3.html">
+        P1716R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_ranges &gt;= 201911L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations) </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1248r1.html">
+        P1248R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry> Ranges Design Cleanup </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1252r2.pdf">
+        P1252R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry />
+    </row>
+
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Time, dates, calendars, time zones</emphasis>
+      </entry>
     </row>
 
     <row>
@@ -251,43 +561,234 @@ Feature-testing recommendations for C++</link>.
       <entry>  Extending chrono to Calendars and Time Zones </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0355r7.html">
-	P0355R7
-	</link>
+        P0355R7 </link>
       </entry>
-      <entry align="center"> </entry>
-      <entry />
+      <entry/>
+      <entry> <code>__cpp_lib_chrono &gt;= 201803L</code> </entry>
     </row>
 
     <row>
       <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Thou Shalt Not Specialize std Function Templates! </entry>
+      <entry> Miscellaneous minor fixes for chrono </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0551r3.pdf">
-	P0551R3
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1466r3.html">
+        P1466R3 </link>
       </entry>
-      <entry align="center"> </entry>
+      <entry/>
+      <entry> <code>__cpp_lib_chrono &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  <code>&lt;chrono&gt;</code> <code>zero()</code>, <code>min()</code>, and <code>max()</code> should be <code>noexcept</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0972r0.pdf">
+        P0972R0 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
       <entry />
     </row>
 
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Three-way comparison</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  Library Support for the Spaceship (Comparison) Operator </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0768r1.pdf">
+        P0768R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_three_way_comparison &gt;= 201711L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Symmetry for spaceship </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0905r1.html">
+        P0905R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry> Adding &lt;=&gt; to the standard library </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html">
+        P1614R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry>
+        <code>__cpp_lib_three_way_comparison &gt;= 201907L</code>
+      </entry>
+    </row>
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Strings and text</emphasis>
+      </entry>
+    </row>
+
     <row>
       <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Manipulators for C++ Synchronized Buffered Ostream </entry>
+      <entry>  <code>string::reserve</code> Should Not Shrink </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0753r2.pdf">
-	P0753R2
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0966r1.html">
+        P0966R1 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
     </row>
 
     <row>
-      <entry>  <code>&lt;version&gt;</code> </entry>
+      <entry>  <code>char8_t</code>: A type for UTF-8 characters and strings </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0754r2.pdf">
-	P0754R2
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0482r6.html">
+        P0482R6 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_char8_t &gt;= 201811L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  <code>char8_t</code> backward compatibility remediation </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1423r3.html">
+        P1423R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_char8_t &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry> Text formatting </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html">
+        P0645R10 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry>
+        <code>__cpp_lib_format &gt;= 201907L</code>
+      </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry> Integration of chrono with text formatting </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1361r2.pdf">
+        P1361R2 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry>
+        <code>__cpp_lib_format &gt;= 201907L</code>
+      </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry> Printf corner cases in <code>std::format</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1652r1.html">
+        P1652R1 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry>
+        <code>__cpp_lib_format &gt;= 201907L</code>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  String Prefix and Suffix Checking </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0457r2.html">
+        P0457R2 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_starts_ends_with &gt;= 201711L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Update The Reference To The Unicode Standard </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1025r1.html">
+        P1025R1 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry />
+    </row>
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Containers</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry> span: bounds-safe views for sequences of objects </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r7.pdf">
+        P0122R7 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_span &gt;= 201803L</code> </entry>
+    </row>
+
+    <row>
+      <entry>
+        Usability Enhancements for <classname>std::span</classname>
+      </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1024r3.pdf">
+        P1024R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_span &gt;= 201902L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Should Span be Regular? </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1085r2.md">
+        P1085R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry/>
+    </row>
+
+    <row>
+      <entry> Fixed-size <code>&lt;span&gt;</code> construction from dynamic range </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1976r2.html">
+        P1976R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_span &gt;= 202002L</code> </entry>
+    </row>
+
+    <row>
+      <entry> <code>std::to_array</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0325r4.html">
+        P0325R4 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_to_array &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Checking for Existence of an Element in Associative 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/p0458r2.html">
+        P0458R2 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry />
@@ -298,372 +799,111 @@ Feature-testing recommendations for C++</link>.
       <entry>  Comparing 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/p0809r0.pdf">
-	P0809R0
-	</link>
+        P0809R0 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
     </row>
 
     <row>
-      <entry>  Constexpr iterator requirements </entry>
+      <?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/p0858r0.html">
-	P0858R0
-	</link>
+        <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> <code>__cpp_lib_generic_unordered_lookup &gt;= 201811</code> </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">
+        P1209R0 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_string_view &gt;= 201803L</code>
-      and <code>__cpp_lib_array_constexpr &gt;= 201803L</code> </entry>
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Symmetry for spaceship </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0905r1.html">
-	P0905R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  <code>string::reserve</code> Should Not Shrink </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0966r1.html">
-	P0966R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Atomic Ref </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0019r8.html">
-	P0019R8
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_atomic_ref &gt;= 201806L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  Checking for Existence of an Element in Associative 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/p0458r2.html">
-	P0458R2
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  LWG 2511: guaranteed copy elision for piecewise construction </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0475r1.html">
-	P0475R1
-	</link>
-      </entry>
-      <entry align="center"> 7.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Bit-casting object representations </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0476r2.html">
-	P0476R2
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0528r3.html">
-	P0528R3
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Support for contract based programming in C++ </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0542r5.html">
-	P0542R5
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Integral power-of-2 operations </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0556r3.html">
-	P0556R3
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Reviewing Deprecated Facilities of C++17 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/p0619r4.html">
-	P0619R4
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
+      <entry> <code>__cpp_lib_erase_if &gt;= 201811L</code> </entry>
     </row>
 
     <row>
       <entry>  Improving the Return Value of Erase-Like Algorithms </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf">
-	P0646R1
-	</link>
+        P0646R1 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry> <code>__cpp_lib_list_remove_return_type &gt;= 201806L</code> </entry>
     </row>
 
+    <row>
+      <entry>  Improving the Return Value of Erase-Like Algorithms II: Free <code>erase</code>/<code>erase_if</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf">
+        P1115R3 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry>
+        <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody>
+        <row><entry> <code>__cpp_lib_erase_if &gt;= 202002L</code> </entry></row>
+        <row><entry> (defined to <code>201900L</code> for GCC 9.1 and 9.2 so use <code>&gt; 201811L</code>) </entry></row>
+        </tbody></tgroup></informaltable>
+      </entry>
+    </row>
+
+    <row>
+      <entry> Signed ssize() functions, unsigned size() functions </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1227r2.html">
+        P1227R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_ssize &gt;= 201902L</code> </entry>
+    </row>
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Memory management</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  Utility to convert a pointer to a raw pointer </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r2.html">
+        P0653R2 </link>
+      </entry>
+      <entry align="center"> 8.1 </entry>
+      <entry> <code>__cpp_lib_to_address &gt;= 201711L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Extending <code>make_shared</code> to Support Arrays </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0674r1.html">
+        P0674R1 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry> <code>__cpp_lib_shared_ptr_arrays &gt;= 201707L</code> </entry>
+    </row>
+
     <row>
       <entry>  Efficient sized delete for variable sized classes </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0722r3.html">
-	P0722R3
-	</link>
+        P0722R3 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry> <code>__cpp_lib_destroying_delete &gt;= 201806L</code> </entry>
     </row>
 
-    <row>
-      <entry>  Implicit conversion traits and utility functions </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0758r1.html">
-	P0758R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>fpos</code> Requirements </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0759r1.html">
-	P0759R1
-	</link>
-      </entry>
-      <entry align="center"> Note 1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Add <code>shift</code> to <code>&lt;algorithm&gt;</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0769r2.pdf">
-	P0769R2
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Standard Library Specification in a Concepts and Contracts World </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0788r3.pdf">
-	P0788R3
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Constexpr for <code>swap</code> and swap related functions </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0879r0.html">
-	P0879R0
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_constexpr_algorithms &gt;= 201806L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  The <code>identity</code> metafunction </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0887r1.pdf">
-	P0887R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>explicit(bool)</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0892r2.html">
-	P0892R2
-	</link>
-      </entry>
-      <entry align="center"> Note 1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Standard Library Concepts </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0898r3.pdf">
-	P0898R3
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_concepts &gt;= 201806L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  Eradicating unnecessarily explicit default constructors from the standard library </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0935r0.html">
-	P0935R0
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Integrating feature-test macros into the C++ WD </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0941r2.html">
-	P0941R2
-	</link>
-      </entry>
-      <entry align="center"> 5.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>constexpr</code> comparison operators for <code>std::array</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1023r0.pdf">
-	P1023R0
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Update The Reference To The Unicode Standard </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1025r1.html">
-	P1025R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Consistency improvements for <code>&lt;=&gt;</code> and other comparison operators </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1120r0.html">
-	P1120R0
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>unwrap_ref_decay</code> and <code>unwrap_reference</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0318r1.pdf">
-	P0318R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Simplified partial function application </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0356r5.html">
-	P0356R5
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_bind_front &gt;= 201811L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  <code>reference_wrapper</code> for incomplete types </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html">
-	P0357R3
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>char8_t</code>: A type for UTF-8 characters and strings </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0482r6.html">
-	P0482R6
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_char8_t &gt;= 201811L</code> </entry>
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Fixing <code>operator&gt;&gt;(basic_istream&amp;, CharT*)</code> (LWG 2499) </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0487r1.html">
-	P0487R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
     <row>
       <entry>  Utility functions to implement uses-allocator construction </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0591r4.pdf">
-	P0591R4
-	</link>
+        P0591R4 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry>
@@ -672,44 +912,217 @@ Feature-testing recommendations for C++</link>.
     </row>
 
     <row>
-      <entry>  P0595R2 <code>std::is_constant_evaluated()</code> </entry>
+      <entry>  <code>std::assume_aligned</code> </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0595r2.html">
-	P0595R2
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1007r3.pdf">
+        P1007R3 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
-      <entry />
+      <entry> <code>__cpp_lib_assume_aligned &gt;= 201811L</code> (since 9.4, see Note 1) </entry>
     </row>
 
     <row>
-      <entry>  <code>variant</code> and <code>optional</code> should propagate copy/move triviality </entry>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Smart pointer creation with default initialization </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0602r4.html">
-	P0602R4
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html">
+        P1020R1 </link>
       </entry>
-      <entry align="center"> 8.3 </entry>
-      <entry />
+      <entry align="center"> </entry>
+      <entry> <code>__cpp_lib_smart_ptr_for_overwrite &gt;= 201811L</code> </entry>
     </row>
 
     <row>
-      <entry>  A sane <code>variant</code> converting constructor </entry>
+      <entry>  Make stateful allocator propagation more consistent for <code>operator+(basic_string)</code> </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0608r3.html">
-	P0608R3
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1165r1.html">
+        P1165R1 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
       <entry />
     </row>
 
     <row>
-      <entry>  <code>visit&lt;R&gt;</code>: Explicit Return Type for <code>visit</code> </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0655r1.pdf">
-	P0655R1
-	</link>
+        <classname>polymorphic_allocator&lt;&gt;</classname> as a vocabulary type
+      </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0339r6.pdf">
+        P0339R6 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry>
+      <code>__cpp_lib_polymorphic_allocator &gt;= 201902L</code> (since 9.4, see Note 1)
+      </entry>
+    </row>
+
+    <row>
+      <entry>  LWG 2511: guaranteed copy elision for piecewise construction </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0475r1.html">
+        P0475R1 </link>
+      </entry>
+      <entry align="center"> 7.1 </entry>
+      <entry />
+    </row>
+
+
+    <row>
+      <entry namest="c1" nameend="c4" align="left">
+        <emphasis role="bold">Miscellaneous</emphasis>
+      </entry>
+    </row>
+
+    <row>
+      <entry>  <code>nodiscard</code> in the Library </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0600r1.pdf">
+        P0600R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  de-pessimize legacy algorithms with <code>std::move</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0616r0.pdf">
+        P0616R0 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  Deprecate POD </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0767r1.html">
+        P0767R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  Treating Unnecessary <code>decay</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0777r1.pdf">
+        P0777R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Thou Shalt Not Specialize std Function Templates! </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0551r3.pdf">
+        P0551R3 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry />
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Bit-casting object representations </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0476r2.html">
+        P0476R2 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry> <code>__cpp_lib_bit_cast &gt;= 201806L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Integral power-of-2 operations </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0556r3.html">
+        P0556R3 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_int_pow2 &gt;= 201806L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry> On the names of low-level bit manipulation functions </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf">
+        P1956R1 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_int_pow2 &gt;= 202002L</code> </entry>
+    </row>
+
+    <row>
+      <entry> Safe integral comparisons </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0586r2.html">
+        P0586R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_integer_comparison_functions &gt;= 202002L</code> </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Reviewing Deprecated Facilities of C++17 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/p0619r4.html">
+        P0619R4 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  <code>fpos</code> Requirements </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0759r1.html">
+        P0759R1 </link>
+      </entry>
+      <entry align="center"> &#x2014; </entry>
+      <entry />
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Add <code>shift</code> to <code>&lt;algorithm&gt;</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0769r2.pdf">
+        P0769R2 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry> <code>__cpp_lib_shift &gt;= 201806L</code> </entry>
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Standard Library Specification in a Concepts and Contracts World </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0788r3.pdf">
+        P0788R3 </link>
+      </entry>
+      <entry align="center"> </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  <code>explicit(bool)</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0892r2.html">
+        P0892R2 </link>
+      </entry>
+      <entry align="center"> &#x2014; </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  Eradicating unnecessarily explicit default constructors from the standard library </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0935r0.html">
+        P0935R0 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
       <entry />
@@ -719,124 +1132,100 @@ Feature-testing recommendations for C++</link>.
       <entry>  <code>std::function</code> move constructor should be <code>noexcept</code> </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0771r1.pdf">
-	P0771R1
-	</link>
+        P0771R1 </link>
       </entry>
       <entry align="center"> 7.2 </entry>
       <entry />
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  The One Ranges Proposal </entry>
+      <entry>  Simplified partial function application </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf">
-	P0896R4
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0356r5.html">
+        P0356R5 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_bind_front &gt;= 201811L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  <code>bind_front</code> should not unwrap <code>reference_wrapper</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1651r0.html">
+        P1651R0 </link>
+      </entry>
+      <entry align="center"> 9.3 </entry>
+      <entry> <code>__cpp_lib_bind_front &gt;= 201907L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  <code>reference_wrapper</code> for incomplete types </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html">
+        P0357R3 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <?dbhtml bgcolor="#C8B0B0" ?>
+      <entry>  Fixing <code>operator&gt;&gt;(basic_istream&amp;, CharT*)</code> (LWG 2499) </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0487r1.html">
+        P0487R1 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
     </row>
 
+    <row>
+      <entry>  <code>variant</code> and <code>optional</code> should propagate copy/move triviality </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0602r4.html">
+        P0602R4 </link>
+      </entry>
+      <entry align="center"> 8.3 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  A sane <code>variant</code> converting constructor </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0608r3.html">
+        P0608R3 </link>
+      </entry>
+      <entry align="center"> 10.1 </entry>
+      <entry />
+    </row>
+
+    <row>
+      <entry>  <code>visit&lt;R&gt;</code>: Explicit Return Type for <code>visit</code> </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0655r1.pdf">
+        P0655R1 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry />
+    </row>
+
     <row>
       <entry>  P0899R1 - LWG 3016 is not a defect </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0899r1.html">
-	P0899R1
-	</link>
+        P0899R1 </link>
       </entry>
       <entry align="center"> 7.1 </entry>
       <entry />
     </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 />
-    </row>
-
-    <row>
-      <entry>  <code>&lt;chrono&gt;</code> <code>zero()</code>, <code>min()</code>, and <code>max()</code> should be <code>noexcept</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0972r0.pdf">
-	P0972R0
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Constexpr in <code>std::pointer_traits</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1006r1.pdf">
-	P1006R1
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  <code>std::assume_aligned</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1007r3.pdf">
-	P1007R3
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Smart pointer creation with default initialization </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html">
-	P1020R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Misc constexpr bits </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html">
-	P1032R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Should Span be Regular? </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1085r2.md">
-	P1085R2
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_span &gt;= 201902L</code> </entry>
-    </row>
-
     <row>
       <entry>  Editorial Guidance for merging P0019r8 and P0528r3 </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1123r0.html">
-	P1123R0
-	</link>
+        P1123R0 </link>
       </entry>
-      <entry align="center"> Note 1 </entry>
+      <entry align="center"> &#x2014; </entry>
       <entry />
     </row>
 
@@ -845,142 +1234,43 @@ Feature-testing recommendations for C++</link>.
       <entry>  Cleaning up Clause 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/p1148r0.pdf">
-	P1148R0
-	</link>
+        P1148R0 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
     </row>
 
-    <row>
-      <entry>  Make stateful allocator propagation more consistent for <code>operator+(basic_string)</code> </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1165r1.html">
-	P1165R1
-	</link>
-      </entry>
-      <entry align="center"> 10.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">
-	P1209R0
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_erase_if &gt;= 201811L</code> </entry>
-    </row>
-
     <row>
       <?dbhtml bgcolor="#C8B0B0" ?>
       <entry>  Completing the Rebase of Library Fundamentals, Version 3, Working Draft </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1210r0.html">
-	P1210R0
-	</link>
+        P1210R0 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
       <entry>  Alternative Wording for P0907R4 Signed Integers are Two's Complement </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1236r1.html">
-	P1236R1
-	</link>
+        P1236R1 </link>
       </entry>
-      <entry align="center"> </entry>
-      <entry />
+      <entry align="center"> &#x2014; </entry>
+      <entry/>
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry>  Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations) </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1248r1.html">
-	P1248R1
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#B0B0B0" ?>
-      <entry>  Improving Completeness Requirements for Type Traits </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1285r0.pdf">
-	P1285R0
-	</link>
-      </entry>
-      <entry align="center"> Partial </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>  Well-behaved interpolation for numbers and pointers </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0811r3.html">
-	P0811R3
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_interpolate &gt;= 201902L</code> </entry>
-    </row>
-
-    <row>
-      <entry>  Missing feature test macros </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1353r0.html">
-	P1353R0
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>
-        <classname>polymorphic_allocator&lt;&gt;</classname>
-        as a vocabulary type
-      </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0339r6.pdf">
-        P0339R6
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry> Making std::underlying_type SFINAE-friendly </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0340r3.html">
-        P0340R3
-	</link>
-      </entry>
-      <entry align="center"> 9.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
       <entry>
         I Stream, You Stream, We All Stream for
         <classname>istream_iterator</classname>
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0738r2.html">
-        P0738R2
-	</link>
+        P0738R2 </link>
       </entry>
-      <entry align="center"> </entry>
+      <entry align="center"> 10.1 </entry>
       <entry />
     </row>
 
@@ -991,11 +1281,10 @@ Feature-testing recommendations for C++</link>.
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1458r1.pdf">
-        P1458R1
-	</link>
+        P1458R1 </link>
       </entry>
-      <entry align="center"> </entry>
-      <entry> Note 1 </entry>
+      <entry align="center"> &#x2014; </entry>
+      <entry/>
     </row>
 
     <row>
@@ -1005,11 +1294,10 @@ Feature-testing recommendations for C++</link>.
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1458r1.pdf">
-        P1459R1
-	</link>
+        P1459R1 </link>
       </entry>
-      <entry align="center"> </entry>
-      <entry> Note 1 </entry>
+      <entry align="center"> &#x2014; </entry>
+      <entry/>
     </row>
 
     <row>
@@ -1019,11 +1307,10 @@ Feature-testing recommendations for C++</link>.
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1462r1.html">
-        P1462R1
-	</link>
+        P1462R1 </link>
       </entry>
-      <entry align="center"> </entry>
-      <entry> Note 1 </entry>
+      <entry align="center"> &#x2014; </entry>
+      <entry/>
     </row>
 
     <row>
@@ -1033,10 +1320,9 @@ Feature-testing recommendations for C++</link>.
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1463r1.pdf">
-        P1463R1
-	</link>
+        P1463R1 </link>
       </entry>
-      <entry align="center"> 10 </entry>
+      <entry align="center"> 10.1 </entry>
       <entry/>
     </row>
 
@@ -1048,8 +1334,7 @@ Feature-testing recommendations for C++</link>.
       </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1464r1.pdf">
-        P1464R1
-	</link>
+        P1464R1 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
@@ -1060,212 +1345,84 @@ Feature-testing recommendations for C++</link>.
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1164r1.pdf">
         P1164R1
-	</link>
+  </link>
       </entry>
       <entry align="center"> 8.3 </entry>
       <entry> Treated as a DR for C++17 </entry>
     </row>
 
     <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
       <entry>
         Target Vectorization Policies from Parallelism V2 TS to 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/2019/p1001r2.html">
-        P1001R2
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry> Signed ssize() functions, unsigned size() functions </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1227r2.html">
-        P1227R2
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry />
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry> Ranges Design Cleanup </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1252r2.pdf">
-        P1252R2
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry />
-    </row>
-
-    <row>
-      <entry>
-        Usability Enhancements for <classname>std::span</classname>
-      </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1024r3.pdf">
-        P1024R3
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_span &gt;= 201902L</code> </entry>
-    </row>
-
-    <row>
-      <entry> Traits for [Un]bounded Arrays </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1357r1.pdf">
-        P1357R1
-	</link>
+        P1001R2 </link>
       </entry>
       <entry align="center"> 9.1 </entry>
-      <entry> <code>__cpp_lib_bounded_array_traits &gt;= 201902L</code> </entry>
+      <entry> <code>__cpp_lib_execution &gt;= 201902L</code> (since 9.4, see Note 1)</entry>
     </row>
 
     <row>
-      <entry> std::to_array </entry>
+      <entry> Merge Coroutines TS into C++20 working draft </entry>
       <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0325r4.html">
-	P0325R4
-	</link>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0912r5.html">
+        P0912R5 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_to_array &gt;= 201907L</code> </entry>
+      <entry> <code>__cpp_lib_coroutines &gt;= 201902L</code> </entry>
+    </row>
+
+    <row>
+      <entry>  Endian just Endian </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0463r1.html">
+        P0463R1 </link>
+      </entry>
+      <entry align="center"> 8.1 </entry>
+      <entry> <code>__cpp_lib_endian &gt;= 201907L</code> </entry>
     </row>
 
     <row>
       <entry> Bit operations </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0553r4.html">
-	P0553R4
-	</link>
+        P0553R4 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_bitops &gt;= 201907L</code> </entry>
+      <entry> <code>__cpp_lib_bitops &gt;= 201907L</code> (since 9.4, see Note 1) </entry>
+    </row>
+
+    <row>
+      <entry>  Well-behaved interpolation for numbers and pointers </entry>
+      <entry>
+        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0811r3.html">
+        P0811R3 </link>
+      </entry>
+      <entry align="center"> 9.1 </entry>
+      <entry> <code>__cpp_lib_interpolate &gt;= 201902L</code> </entry>
     </row>
 
     <row>
       <entry> Mathematical constants </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r8.pdf">
-	P0631R8
-	</link>
+        P0631R8 </link>
       </entry>
       <entry align="center"> 10.1 </entry>
       <entry> <code>__cpp_lib_math_constants &gt;= 201907L</code> </entry>
     </row>
 
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry> Layout-compatibility and pointer-interconvertibility traits </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0466r5.pdf">
-	P0466R5
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry>
-        <code>__cpp_lib_is_layout_compatible &gt;= 201907L</code>,
-        <code>__cpp_lib_is_layout_interconvertible &gt;= 201907L</code>,
-      </entry>
-    </row>
-
-    <row>
-      <entry> std::stop_token and std::jthread </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0660r10.pdf">
-	P0660R10
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_jthread &gt;= 201907L</code> </entry>
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry> Text formatting </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html">
-	P0645R10
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry>
-        <code>__cpp_lib_format &gt;= 201907L</code>,
-      </entry>
-    </row>
-
-    <row>
-      <entry> constexpr std::invoke and related utilities </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1065r2.html">
-	P1065R2
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_lib_constexpr_invoke &gt;= 201907L</code> </entry>
-    </row>
-
-    <row>
-      <entry> constexpr std::allocator and related utilities </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0784r7.html">
-	P0784R7
-	</link>
-      </entry>
-      <entry align="center"> 10.1 </entry>
-      <entry> <code>__cpp_constexpr_dynamic_alloc &gt;= 201907L</code> </entry>
-    </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>
-        <code>__cpp_lib_atomic_lock_free_type_aliases &gt;= 201907L</code> in &lt;atomic&gt;,
-        <code>__cpp_lib_atomic_flag_test &gt;= 201907L</code> in &lt;atomic&gt;,
-        <code>__cpp_lib_atomic_wait &gt;= 201907L</code> in &lt;atomic&gt;,
-        <code>__cpp_lib_semaphore &gt;= 201907L</code> in &lt;semaphore&gt;,
-        <code>__cpp_lib_latch &gt;= 201907L</code> in &lt;latch&gt;,
-        <code>__cpp_lib_barrier &gt;= 201907L</code> in &lt;barrier&gt;
-      </entry>
-    </row>
-
     <row>
       <?dbhtml bgcolor="#C8B0B0" ?>
       <entry> std::source_location </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1208r6.pdf">
-	P1208R6
-	</link>
+        P1208R6 </link>
       </entry>
       <entry align="center"> </entry>
       <entry>
-        <code>__cpp_lib_source_location &gt;= 201907L</code>,
-      </entry>
-    </row>
-
-    <row>
-      <?dbhtml bgcolor="#C8B0B0" ?>
-      <entry> Adding &lt;=&gt; to the standard library </entry>
-      <entry>
-        <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html">
-	P1614R2
-	</link>
-      </entry>
-      <entry align="center"> </entry>
-      <entry>
-        <code>__cpp_lib_spaceship &gt;= 201907L</code>,
+        <code>__cpp_lib_source_location &gt;= 201907L</code>
       </entry>
     </row>
 
@@ -1274,8 +1431,7 @@ Feature-testing recommendations for C++</link>.
       <entry> Efficient access to std::basic_stringbuf's Buffer </entry>
       <entry>
         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf">
-	P0408R7
-	</link>
+        P0408R7 </link>
       </entry>
       <entry align="center"> </entry>
       <entry />
@@ -1286,23 +1442,9 @@ Feature-testing recommendations for C++</link>.
 </table>
 
 <para>
-Note 1: The changes in the proposal either do not affect the code in libstdc++,
-or the changes are not required for conformance.
+Note 1: This feature is supported in older releases but the
+<code>__cpp_lib</code> macro is not defined to the right value
+(or not defined at all) until the version shown in parentheses.
 </para>
 
-
-<section xml:id="iso.2020.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
-
-   <para>For behaviour which is also specified by previous standards,
-      see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
-      Specific Behavior</link>, <link linkend="iso.2011.specific">C++
-      2011 Implementation Specific Behavior</link> and <link
-      linkend="iso.2017.specific">C++ 2017 Implementation Specific
-      Behavior</link>.
-      This section only documents behaviour which is new in the 202a draft.
-   </para>
-
-
-</section>
-
 </section>

^ permalink raw reply	[flat|nested] 13+ messages in thread

* [committed 10/8] libstdc++: Fixes for feature test macros (PR 91480)
  2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
                   ` (9 preceding siblings ...)
  2020-04-23 20:46 ` [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
@ 2020-04-28 22:52 ` Jonathan Wakely
  10 siblings, 0 replies; 13+ messages in thread
From: Jonathan Wakely @ 2020-04-28 22:52 UTC (permalink / raw)
  To: libstdc++, gcc-patches

[-- Attachment #1: Type: text/plain, Size: 1573 bytes --]

Remove the non-standard __cpp_lib_allocator_is_always_equal macro and
add the missing macros for P1032R1.

         PR libstdc++/91480
         * include/bits/allocator.h (__cpp_lib_allocator_is_always_equal):
         Remove non-standard macro.
         * include/bits/stl_iterator.h (__cpp_lib_constexpr_iterator): Define
         to indicate P1032R1 support.
         * include/bits/stl_pair.h (__cpp_lib_constexpr_utility): Likewise.
         * include/std/string_view (__cpp_lib_constexpr_string_view): Likewise.
         * include/std/tuple (__cpp_lib_constexpr_tuple): Likewise.
         * include/std/version (__cpp_lib_allocator_is_always_equal): Remove.
         (__cpp_lib_constexpr_iterator, __cpp_lib_constexpr_string_view)
         (__cpp_lib_constexpr_tuple, __cpp_lib_constexpr_utility): Define.
         * testsuite/20_util/function_objects/constexpr_searcher.cc: Check
         feature test macro.
         * testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc: Likewise.
         * testsuite/21_strings/basic_string_view/operations/copy/char/
         constexpr.cc: Likewise.
         * testsuite/24_iterators/insert_iterator/constexpr.cc: Likewise.

Tested powerpc64le-linux, committed to master.

I think with Iain's recent addition of __cpp_lib_coroutine and this,
all our feature test macros are present and correct (except for some
still being defined as int values rather than long).

Thanks to Alisdair Meredith for checking them and bringing the four
missing __cpp_lib_constexpr_xxx ones to my attention.




[-- Attachment #2: patch.txt --]
[-- Type: text/x-patch, Size: 8178 bytes --]

commit d0330a03606d06dc4084e9c8734a549d22676463
Author: Jonathan Wakely <jwakely@redhat.com>
Date:   Tue Apr 28 23:31:04 2020 +0100

    libstdc++: Fixes for feature test macros (PR 91480)
    
    Remove the non-standard __cpp_lib_allocator_is_always_equal macro and
    add the missing macros for P1032R1.
    
            PR libstdc++/91480
            * include/bits/allocator.h (__cpp_lib_allocator_is_always_equal):
            Remove non-standard macro.
            * include/bits/stl_iterator.h (__cpp_lib_constexpr_iterator): Define
            to indicate P1032R1 support.
            * include/bits/stl_pair.h (__cpp_lib_constexpr_utility): Likewise.
            * include/std/string_view (__cpp_lib_constexpr_string_view): Likewise.
            * include/std/tuple (__cpp_lib_constexpr_tuple): Likewise.
            * include/std/version (__cpp_lib_allocator_is_always_equal): Remove.
            (__cpp_lib_constexpr_iterator, __cpp_lib_constexpr_string_view)
            (__cpp_lib_constexpr_tuple, __cpp_lib_constexpr_utility): Define.
            * testsuite/20_util/function_objects/constexpr_searcher.cc: Check
            feature test macro.
            * testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc: Likewise.
            * testsuite/21_strings/basic_string_view/operations/copy/char/
            constexpr.cc: Likewise.
            * testsuite/24_iterators/insert_iterator/constexpr.cc: Likewise.

diff --git a/libstdc++-v3/include/bits/allocator.h b/libstdc++-v3/include/bits/allocator.h
index ee564791dfa..dcca769938c 100644
--- a/libstdc++-v3/include/bits/allocator.h
+++ b/libstdc++-v3/include/bits/allocator.h
@@ -50,9 +50,6 @@
 #endif
 
 #define __cpp_lib_incomplete_container_elements 201505
-#if __cplusplus >= 201103L
-# define __cpp_lib_allocator_is_always_equal 201411
-#endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
 {
diff --git a/libstdc++-v3/include/bits/stl_iterator.h b/libstdc++-v3/include/bits/stl_iterator.h
index cc0b3e0a766..fdb1121f823 100644
--- a/libstdc++-v3/include/bits/stl_iterator.h
+++ b/libstdc++-v3/include/bits/stl_iterator.h
@@ -71,6 +71,7 @@
 
 #if __cplusplus > 201703L
 # define __cpp_lib_array_constexpr 201811L
+# define __cpp_lib_constexpr_iterator 201811L
 #elif __cplusplus == 201703L
 # define __cpp_lib_array_constexpr 201803L
 #endif
diff --git a/libstdc++-v3/include/bits/stl_pair.h b/libstdc++-v3/include/bits/stl_pair.h
index 505bcc32e67..491c599076e 100644
--- a/libstdc++-v3/include/bits/stl_pair.h
+++ b/libstdc++-v3/include/bits/stl_pair.h
@@ -63,6 +63,7 @@
 #endif
 #if __cplusplus > 201703L
 # include <compare>
+# define __cpp_lib_constexpr_utility 201811L
 #endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/include/std/string_view b/libstdc++-v3/include/std/string_view
index 289d4743548..7c7c1b3b5dd 100644
--- a/libstdc++-v3/include/std/string_view
+++ b/libstdc++-v3/include/std/string_view
@@ -48,7 +48,10 @@ namespace std _GLIBCXX_VISIBILITY(default)
 {
 _GLIBCXX_BEGIN_NAMESPACE_VERSION
 
-#define __cpp_lib_string_view 201803
+# define __cpp_lib_string_view 201803L
+#if __cplusplus > 201703L
+# define __cpp_lib_constexpr_string_view 201811L
+#endif
 
   // Helper for basic_string and basic_string_view members.
   constexpr size_t
diff --git a/libstdc++-v3/include/std/tuple b/libstdc++-v3/include/std/tuple
index 808947781ae..db4872d3a52 100644
--- a/libstdc++-v3/include/std/tuple
+++ b/libstdc++-v3/include/std/tuple
@@ -41,6 +41,7 @@
 #include <bits/invoke.h>
 #if __cplusplus > 201703L
 # include <compare>
+# define __cpp_lib_constexpr_tuple 201811L
 #endif
 
 namespace std _GLIBCXX_VISIBILITY(default)
diff --git a/libstdc++-v3/include/std/version b/libstdc++-v3/include/std/version
index fa505f25e98..c3a5bd26e63 100644
--- a/libstdc++-v3/include/std/version
+++ b/libstdc++-v3/include/std/version
@@ -50,7 +50,6 @@
 #define __cpp_lib_result_of_sfinae 201210
 
 #if _GLIBCXX_HOSTED
-# define __cpp_lib_allocator_is_always_equal 201411
 # define __cpp_lib_allocator_traits_is_always_equal 201411
 # define __cpp_lib_shared_ptr_arrays 201611L
 #endif
@@ -157,7 +156,7 @@
 # define __cpp_lib_shared_mutex 201505
 #endif
 #define __cpp_lib_shared_ptr_weak_type 201606
-#define __cpp_lib_string_view 201803
+#define __cpp_lib_string_view 201803L
 // #define __cpp_lib_to_chars 201611L
 #define __cpp_lib_unordered_map_try_emplace 201411
 #define __cpp_lib_variant 201606L
@@ -201,8 +200,12 @@
 #define __cpp_lib_constexpr_complex 201711L
 #define __cpp_lib_constexpr_dynamic_alloc 201907L
 #define __cpp_lib_constexpr_functional 201907L
+# define __cpp_lib_constexpr_iterator 201811L
 #define __cpp_lib_constexpr_memory 201811L
 #define __cpp_lib_constexpr_numeric 201911L
+#define __cpp_lib_constexpr_string_view 201811L
+#define __cpp_lib_constexpr_tuple 201811L
+#define __cpp_lib_constexpr_utility 201811L
 #define __cpp_lib_erase_if 202002L
 #define __cpp_lib_interpolate 201902L
 #ifdef _GLIBCXX_HAS_GTHREADS
diff --git a/libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc b/libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
index 642d0a388fb..f9ecbb365a4 100644
--- a/libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
+++ b/libstdc++-v3/testsuite/20_util/function_objects/constexpr_searcher.cc
@@ -19,6 +19,13 @@
 // { dg-do compile { target c++2a } }
 
 #include <functional>
+
+#ifndef __cpp_lib_constexpr_functional
+# error "Feature test macro for constexpr searcher is missing in <functional>"
+#elif __cpp_lib_constexpr_functional < 201811L
+# error "Feature test macro for constexpr searcher has wrong value in <functional>"
+#endif
+
 #include <string_view>
 
 const std::string_view
diff --git a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc
index e8423b48cdb..8821932ca97 100644
--- a/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc
+++ b/libstdc++-v3/testsuite/20_util/tuple/cons/constexpr_allocator_arg_t.cc
@@ -18,9 +18,16 @@
 // with this library; see the file COPYING3.  If not see
 // <http://www.gnu.org/licenses/>.
 
-#include <memory>
 #include <tuple>
 
+#ifndef __cpp_lib_constexpr_tuple
+# error "Feature test macro for constexpr allocator constructors is missing in <tuple>"
+#elif __cpp_lib_constexpr_tuple < 201811L
+# error "Feature test macro for constexpr allocator constructors has wrong value in <tuple>"
+#endif
+
+#include <memory>
+
 const std::allocator<int> alloc{};
 
 constexpr bool
diff --git a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc
index 86a78108696..64a0766281d 100644
--- a/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc
+++ b/libstdc++-v3/testsuite/21_strings/basic_string_view/operations/copy/char/constexpr.cc
@@ -20,6 +20,12 @@
 
 #include <string_view>
 
+#ifndef __cpp_lib_constexpr_string_view
+# error "Feature test macro for constexpr copy is missing in <string_view>"
+#elif __cpp_lib_constexpr_iterator < 201811L
+# error "Feature test macro for constexpr copy has wrong value in <string_view>"
+#endif
+
 constexpr bool
 test01()
 {
diff --git a/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc b/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc
index b4fc1b5e4e7..b061bc96848 100644
--- a/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc
+++ b/libstdc++-v3/testsuite/24_iterators/insert_iterator/constexpr.cc
@@ -20,6 +20,12 @@
 
 #include <iterator>
 
+#ifndef __cpp_lib_constexpr_iterator
+# error "Feature test macro for constexpr insert iterators is missing in <iterator>"
+#elif __cpp_lib_constexpr_iterator < 201811L
+# error "Feature test macro for constexpr insert iterators has wrong value in <iterator>"
+#endif
+
 struct container
 {
   using value_type = int;

^ permalink raw reply	[flat|nested] 13+ messages in thread

end of thread, other threads:[~2020-04-28 22:52 UTC | newest]

Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-04-22 21:57 [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
2020-04-22 21:58 ` [committed 1/8] libstdc++: Update value of __cpp_lib_jthread macro Jonathan Wakely
2020-04-22 21:58 ` [committed 2/8] libstdc++: Remove non-standard feature test macros Jonathan Wakely
2020-04-22 21:58 ` [committed 3/8] libstdc++: Add missing " Jonathan Wakely
2020-04-22 21:58 ` [committed 4/8] libstdc++: Rename __cpp_lib_constexpr_invoke macro Jonathan Wakely
2020-04-22 21:59 ` [committed 5/8] libstdc++: Update __cpp_lib_concepts value Jonathan Wakely
2020-04-22 21:59 ` [committed 6/8] libstdc++: Do not define __cpp_lib_constexpr_algorithms in <utility> Jonathan Wakely
2020-04-22 21:59 ` [committed 7/8] libstdc++: Update (and revert) value of __cpp_lib_array_constexpr Jonathan Wakely
2020-04-23 20:44   ` Jonathan Wakely
2020-04-22 21:59 ` [committed 8/8] libstdc++: Define __cpp_lib_execution feature test macro Jonathan Wakely
2020-04-23 20:41 ` [committed 9/8] libstdc++: Define __cpp_lib_three_way_comparison for freestanding Jonathan Wakely
2020-04-23 20:46 ` [committed 0/8] libstdc++: Add/update/fix feature test macros Jonathan Wakely
2020-04-28 22:52 ` [committed 10/8] libstdc++: Fixes for feature test macros (PR 91480) Jonathan Wakely

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).