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.