On Tue, 22 Apr 2025 at 13:53, Tomasz Kamiński <tkami...@redhat.com> wrote: > > As P2286R8 and P2585R1 as now fully implemented, we now define > __cpp_lib_format_ranges feature test macro with __cpp_lib_format_ranges. > This macro is provided only in <format>. > > Uses of internal __glibcxx_format_ranges are also updated. > > PR libstdc++/109162 > > libstdc++-v3/ChangeLog: > > * include/bits/version.def (format_ranges): Remove no_stdname and > update value. > * include/bits/version.h: Regenerate. > * src/c++23/std.cc.in: Replace __glibcxx_format_ranges with > __cpp_lib_format_ranges. > * testsuite/std/format/formatter/lwg3944.cc: Likewise. > * testsuite/std/format/parse_ctx.cc: Likewise. > * testsuite/std/format/string.cc: Likewise. > * testsuite/std/format/ranges/feature_test.cc: New test. > --- > This is followup to be merged as separate commit with: > [PATCH v2] libstdc++: Implement formatters for queue, priority_queue and > stack [PR109162] > > OK for trunk and 15.2 with previous patch, once 15.1 will be released?
Yes, thanks. > > libstdc++-v3/include/bits/version.def | 3 +-- > libstdc++-v3/include/bits/version.h | 3 ++- > libstdc++-v3/src/c++23/std.cc.in | 6 ++---- > libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc | 2 +- > libstdc++-v3/testsuite/std/format/parse_ctx.cc | 2 +- > libstdc++-v3/testsuite/std/format/ranges/feature_test.cc | 9 +++++++++ > libstdc++-v3/testsuite/std/format/string.cc | 2 +- > 7 files changed, 17 insertions(+), 10 deletions(-) > create mode 100644 libstdc++-v3/testsuite/std/format/ranges/feature_test.cc > > diff --git a/libstdc++-v3/include/bits/version.def > b/libstdc++-v3/include/bits/version.def > index 0afaf0dec24..737b3f421bf 100644 > --- a/libstdc++-v3/include/bits/version.def > +++ b/libstdc++-v3/include/bits/version.def > @@ -1416,9 +1416,8 @@ ftms = { > // 202207 P2286R8 Formatting Ranges > // 202207 P2585R1 Improving default container formatting > // LWG3750 Too many papers bump __cpp_lib_format > - no_stdname = true; // TODO remove > values = { > - v = 1; // TODO 202207 > + v = 202207; > cxxmin = 23; > hosted = yes; > }; > diff --git a/libstdc++-v3/include/bits/version.h > b/libstdc++-v3/include/bits/version.h > index 980fee641e9..59ff0cee043 100644 > --- a/libstdc++-v3/include/bits/version.h > +++ b/libstdc++-v3/include/bits/version.h > @@ -1562,8 +1562,9 @@ > > #if !defined(__cpp_lib_format_ranges) > # if (__cplusplus >= 202100L) && _GLIBCXX_HOSTED > -# define __glibcxx_format_ranges 1L > +# define __glibcxx_format_ranges 202207L > # if defined(__glibcxx_want_all) || defined(__glibcxx_want_format_ranges) > +# define __cpp_lib_format_ranges 202207L > # endif > # endif > #endif /* !defined(__cpp_lib_format_ranges) && > defined(__glibcxx_want_format_ranges) */ > diff --git a/libstdc++-v3/src/c++23/std.cc.in > b/libstdc++-v3/src/c++23/std.cc.in > index 5e18ad73908..6da6d382914 100644 > --- a/libstdc++-v3/src/c++23/std.cc.in > +++ b/libstdc++-v3/src/c++23/std.cc.in > @@ -1315,8 +1315,7 @@ export namespace std > using std::format_to_n; > using std::format_to_n_result; > using std::formatted_size; > -// FIXME __cpp_lib_format_ranges > -#if __cplusplus > 202002L > +#if __cpp_lib_format_ranges > using std::formattable; > #endif > using std::formatter; > @@ -1332,8 +1331,7 @@ export namespace std > using std::wformat_context; > using std::wformat_parse_context; > using std::wformat_string; > -// FIXME __cpp_lib_format_ranges > -#ifdef __glibcxx_format_ranges > +#ifdef __cpp_lib_format_ranges > using std::format_kind; > using std::range_format; > using std::range_formatter; > diff --git a/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc > b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc > index 1f3edc9cb03..07e63af5652 100644 > --- a/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc > +++ b/libstdc++-v3/testsuite/std/format/formatter/lwg3944.cc > @@ -18,7 +18,7 @@ void test_lwg3944() > std::format(L"{}", "hello"); // { dg-error "here" } > std::format(L"{}", std::string_view("hello")); // { dg-error "here" } > std::format(L"{}", std::string("hello")); // { dg-error "here" } > -#ifdef __glibcxx_format_ranges > +#ifdef __cpp_lib_format_ranges > // LWG 3944 does not change this, it's still valid. > std::format(L"{}", std::vector{'h', 'e', 'l', 'l', 'o'}); > #endif > diff --git a/libstdc++-v3/testsuite/std/format/parse_ctx.cc > b/libstdc++-v3/testsuite/std/format/parse_ctx.cc > index b338ac7b762..b5dd7cdba78 100644 > --- a/libstdc++-v3/testsuite/std/format/parse_ctx.cc > +++ b/libstdc++-v3/testsuite/std/format/parse_ctx.cc > @@ -108,7 +108,7 @@ is_std_format_spec_for(std::string_view spec) > } > } > > -#if __glibcxx_format_ranges > +#if __cpp_lib_format_ranges > constexpr bool escaped_strings_supported = true; > #else > constexpr bool escaped_strings_supported = false; > diff --git a/libstdc++-v3/testsuite/std/format/ranges/feature_test.cc > b/libstdc++-v3/testsuite/std/format/ranges/feature_test.cc > new file mode 100644 > index 00000000000..80d2cea80ca > --- /dev/null > +++ b/libstdc++-v3/testsuite/std/format/ranges/feature_test.cc > @@ -0,0 +1,9 @@ > +// { dg-do preprocess { target c++23 } } > + > +#include <format> > + > +#ifndef __cpp_lib_format_ranges > +# error "Feature-test macro __cpp_lib_format_ranges missing in <format>" > +#elif __cpp_lib_format_ranges != 202207L > +# error "Feature-test macro __cpp_lib_format_ranges has wrong value in > <format>" > +#endif > diff --git a/libstdc++-v3/testsuite/std/format/string.cc > b/libstdc++-v3/testsuite/std/format/string.cc > index 76614d4bc3e..ee987a15ec3 100644 > --- a/libstdc++-v3/testsuite/std/format/string.cc > +++ b/libstdc++-v3/testsuite/std/format/string.cc > @@ -62,7 +62,7 @@ test_indexing() > VERIFY( ! is_format_string_for("{} {0}", 1) ); > } > > -#if __glibcxx_format_ranges > +#if __cpp_lib_format_ranges > constexpr bool escaped_strings_supported = true; > #else > constexpr bool escaped_strings_supported = false; > -- > 2.49.0 >