public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] introduce C++ API data base and generator for C++ hints
@ 2022-10-18 15:06 Ulrich Drepper
  2022-10-19 19:09 ` Jason Merrill
  0 siblings, 1 reply; 2+ messages in thread
From: Ulrich Drepper @ 2022-10-18 15:06 UTC (permalink / raw)
  To: gcc-patches, Jason Merrill


[-- Attachment #1.1: Type: text/plain, Size: 1316 bytes --]

I updated the patch based on the feedback from Jason and Martin.  It keeps
the CSV file and the python script in the cp/ directory.  There also is
still only one Python script.

If there is agreement that either of those should change despite the
arguments I gave in the reply to Jason's email I'll change it.  Otherwise I
think the patch is ready to be applied.

There should be no change for the non-developer, I've adjusted the Makefile
so that no file is generated based on time stamps unless the maintainer
mode is selected.

I added the comment about the shared ownership only to the CSV file, not
the Python script.  The latter shouldn't need frequent updates and
therefore the issue is less critical.

OK?

2022-10-18  Jonathan Wakely   <jwakely@redhat.com>
            Ulrich Drepper  <drepper@redhat.com>

contrib/
        * gcc_update: Add rule for gcc/cp/std-name-hint.gperf.

gcc/cp/
        * Make-lang.in: Add rules to generate std-name-hint.gperf.  Adjust
        rule to generate std-name-hint.h to allow chain rule.
        * std-name-hint.h: Regenerated.
        * std-name-hint.gperf: This file is now generated.
        * cxxapi-data-.csv: New file.  CSV file with C++ API data.
        * gen-cxxapi-file.py: New file.  Generate std-name-hint.gperf
        and module export source (in future).

[-- Attachment #2: d-gcc-cxxabi-csv-2 --]
[-- Type: application/octet-stream, Size: 119236 bytes --]

diff --git a/contrib/gcc_update b/contrib/gcc_update
index dd8b6d0b6bf..18c7ec46264 100755
--- a/contrib/gcc_update
+++ b/contrib/gcc_update
@@ -95,6 +95,7 @@ gcc/config/rs6000/fusion.md: gcc/config/rs6000/genfusion.pl
 # And then, language-specific files
 gcc/cp/cfns.h: gcc/cp/cfns.gperf
 gcc/cp/std-name-hint.h: gcc/cp/std-name-hint.gperf
+gcc/cp/std-name-hint.gperf: gcc/cp/cxxapi-data.csv
 # testsuite
 # Without this, _Pragma3.c can have a false negative.
 gcc/testsuite/gcc.dg/cpp/_Pragma3.c: gcc/testsuite/gcc.dg/cpp/mi1c.h
diff --git a/gcc/cp/Make-lang.in b/gcc/cp/Make-lang.in
index aa84d6827be..291835d326e 100644
--- a/gcc/cp/Make-lang.in
+++ b/gcc/cp/Make-lang.in
@@ -153,15 +153,30 @@ endif
 	gperf -o -C -E -k '1-6,$$' -j1 -D -N 'libc_name_p' -L C++ \
 		$(srcdir)/cp/cfns.gperf --output-file $(srcdir)/cp/cfns.h
 
-# The same procedure for the std-name-hint.gperf file.
+# We always need the dependency on the .gperf file because it itself is generated.
 ifeq ($(ENABLE_MAINTAINER_RULES), true)
 $(srcdir)/cp/std-name-hint.h: $(srcdir)/cp/std-name-hint.gperf
 else
-$(srcdir)/cp/std-name-hint.h:
+$(srcdir)/cp/std-name-hint.h: | $(srcdir)/cp/std-name-hint.gperf
 endif
 	gperf -o -C -E -k '1,2,7,11,$$' -D -N find -L C++ \
 		$(srcdir)/cp/std-name-hint.gperf --output-file $(srcdir)/cp/std-name-hint.h
 
+# The std-name-hint.gperf file itself is generated from a general
+# C++ API description.
+ifeq ($(ENABLE_MAINTAINER_RULES), true)
+$(srcdir)/cp/std-name-hint.gperf: $(srcdir)/cp/gen-cxxapi-file.py $(srcdir)/cp/cxxapi-data.csv
+else
+$(srcdir)/cp/std-name-hint.gperf:
+endif
+	python3 $(srcdir)/cp/gen-cxxapi-file.py hints $(srcdir)/cp/cxxapi-data.csv > $@
+ifneq ($(ENABLE_MAINTAINER_RULES), true)
+.SECONDARY: $(srcdir)/cp/std-name-hint.gperf
+endif
+
+# This is the file that depends on the generated header file.
+cp/name-lookup.o: $(srcdir)/cp/std-name-hint.h
+
 cc1plus.fda: ../stage1-gcc/cc1plus$(exeext) ../prev-gcc/$(PERF_DATA)
 	$(CREATE_GCOV) -binary ../stage1-gcc/cc1plus$(exeext) -gcov cc1plus.fda -profile ../prev-gcc/$(PERF_DATA) -gcov_version 1
 
diff --git a/gcc/cp/std-name-hint.gperf b/gcc/cp/std-name-hint.gperf
index 976b90c3391..c90636015db 100644
--- a/gcc/cp/std-name-hint.gperf
+++ b/gcc/cp/std-name-hint.gperf
@@ -2,6 +2,7 @@
 %define class-name std_name_hint_lookup
 %struct-type
 %{
+/* This file is auto-generated by gen-cxxapi-file.py.  */
 /* Copyright (C) 2022 Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -47,33 +48,55 @@ array, "<array>", cxx11
 to_array, "<array>", cxx20
 # <atomic>
 atomic, "<atomic>", cxx11
-atomic_flag, "<atomic>", cxx11
 atomic_ref, "<atomic>", cxx20
+atomic_signed_lock_free, "<atomic>", cxx11
+atomic_uintmax_t, "<atomic>", cxx20
+atomic_unsigned_lock_free, "<atomic>", cxx11
 # <bitset>
 bitset, "<bitset>", cxx11
 # <compare>
-weak_equality, "<compare>", cxx20
-strong_equality, "<compare>", cxx20
 partial_ordering, "<compare>", cxx20
-weak_ordering, "<compare>", cxx20
+strong_equality, "<compare>", cxx20
 strong_ordering, "<compare>", cxx20
+weak_equality, "<compare>", cxx20
+weak_ordering, "<compare>", cxx20
 # <complex>
 complex, "<complex>", cxx98
 complex_literals, "<complex>", cxx14
-# <condition_variable>. */
+# <condition_variable>
 condition_variable, "<condition_variable>", cxx11
 condition_variable_any, "<condition_variable>", cxx11
 # <cstddef>
 byte, "<cstddef>", cxx17
+# <cstdint>
+uint_fast16_t, "<cstdint>", cxx11
+uint_fast32_t, "<cstdint>", cxx11
+uint_fast64_t, "<cstdint>", cxx11
+uint_fast8_t, "<cstdint>", cxx11
+uint_least16_t, "<cstdint>", cxx11
+uint_least32_t, "<cstdint>", cxx11
+uint_least64_t, "<cstdint>", cxx11
+uint_least8_t, "<cstdint>", cxx11
+uintmax_t, "<cstdint>", cxx11
+uintptr_t, "<cstdint>", cxx11
 # <deque>
 deque, "<deque>", cxx98
+# <exception>
+current_exception, "<exception>", cxx11
+exception, "<exception>", cxx98
+exception_ptr, "<exception>", cxx11
+make_exception_ptr, "<exception>", cxx11
+terminate, "<exception>", cxx98
+uncaught_exceptions, "<exception>", cxx17
+# <expected>
+expected, "<expected>", cxx23
 # <forward_list>
 forward_list, "<forward_list>", cxx11
 # <fstream>
 basic_filebuf, "<fstream>", cxx98
+basic_fstream, "<fstream>", cxx98
 basic_ifstream, "<fstream>", cxx98
 basic_ofstream, "<fstream>", cxx98
-basic_fstream, "<fstream>", cxx98
 fstream, "<fstream>", cxx98
 ifstream, "<fstream>", cxx98
 ofstream, "<fstream>", cxx98
@@ -83,63 +106,65 @@ bind_front, "<functional>", cxx20
 function, "<functional>", cxx11
 hash, "<functional>", cxx11
 invoke, "<functional>", cxx17
+invoke_r, "<functional>", cxx23
 mem_fn, "<functional>", cxx11
 not_fn, "<functional>", cxx17
 reference_wrapper, "<functional>", cxx11
-unwrap_reference, "<functional>", cxx20
-unwrap_reference_t, "<functional>", cxx20
 unwrap_ref_decay, "<functional>", cxx20
 unwrap_ref_decay_t, "<functional>", cxx20
-# <future>. */
+unwrap_reference, "<functional>", cxx20
+unwrap_reference_t, "<functional>", cxx20
+# <future>
 async, "<future>", cxx11
 future, "<future>", cxx11
 packaged_task, "<future>", cxx11
 promise, "<future>", cxx11
 # <iomanip>
+get_money, "<iomanip>", cxx11
+get_time, "<iomanip>", cxx11
+put_money, "<iomanip>", cxx11
+put_time, "<iomanip>", cxx11
+quoted, "<iomanip>", cxx14
 resetiosflags, "<iomanip>", cxx98
-setiosflags, "<iomanip>", cxx98
 setbase, "<iomanip>", cxx98
 setfill, "<iomanip>", cxx98
+setiosflags, "<iomanip>", cxx98
 setprecision, "<iomanip>", cxx98
 setw, "<iomanip>", cxx98
-get_money, "<iomanip>", cxx11
-put_money, "<iomanip>", cxx11
-get_time, "<iomanip>", cxx11
-put_time, "<iomanip>", cxx11
-quoted, "<iomanip>", cxx14
 # <ios>
 boolalpha, "<ios>", cxx98
+dec, "<ios>", cxx98
+defaultfloat, "<ios>", cxx11
+fixed, "<ios>", cxx98
+hex, "<ios>", cxx98
+hexfloat, "<ios>", cxx11
+internal, "<ios>", cxx98
+left, "<ios>", cxx98
 noboolalpha, "<ios>", cxx98
-showbase, "<ios>", cxx98
 noshowbase, "<ios>", cxx98
-showpoint, "<ios>", cxx98
 noshowpoint, "<ios>", cxx98
-showpos, "<ios>", cxx98
 noshowpos, "<ios>", cxx98
-skipws, "<ios>", cxx98
 noskipws, "<ios>", cxx98
-uppercase, "<ios>", cxx98
-nouppercase, "<ios>", cxx98
-unitbuf, "<ios>", cxx98
 nounitbuf, "<ios>", cxx98
-internal, "<ios>", cxx98
-left, "<ios>", cxx98
-right, "<ios>", cxx98
-dec, "<ios>", cxx98
-hex, "<ios>", cxx98
+nouppercase, "<ios>", cxx98
 oct, "<ios>", cxx98
-fixed, "<ios>", cxx98
+right, "<ios>", cxx98
 scientific, "<ios>", cxx98
-hexfloat, "<ios>", cxx11
-defaultfloat, "<ios>", cxx11
+showbase, "<ios>", cxx98
+showpoint, "<ios>", cxx98
+showpos, "<ios>", cxx98
+skipws, "<ios>", cxx98
+unitbuf, "<ios>", cxx98
+uppercase, "<ios>", cxx98
 # <iostream>
-cin, "<iostream>", cxx98
-cout, "<iostream>", cxx98
 cerr, "<iostream>", cxx98
+cin, "<iostream>", cxx98
 clog, "<iostream>", cxx98
+cout, "<iostream>", cxx98
+wcerr, "<iostream>", cxx98
 wcin, "<iostream>", cxx98
-wcout, "<iostream>", cxx98
 wclog, "<iostream>", cxx98
+wcout, "<iostream>", cxx98
 # <istream>
 istream, "<istream>", cxx98
 ws, "<istream>", cxx98
@@ -160,86 +185,213 @@ ostream_iterator, "<iterator>", cxx98
 ostreambuf_iterator, "<iterator>", cxx98
 prev, "<iterator>", cxx11
 reverse_iterator, "<iterator>", cxx98
-# <ostream>
-ostream, "<ostream>", cxx98
-ends, "<ostream>", cxx98
-flush, "<ostream>", cxx98
-endl, "<ostream>", cxx98
-emit_on_flush, "<ostream>", cxx20
-noemit_on_flush, "<ostream>", cxx20
-flush_emit, "<ostream>", cxx20
 # <list>
 list, "<list>", cxx98
 # <map>
 map, "<map>", cxx98
 multimap, "<map>", cxx98
 # <memory>
+addressof, "<memory>", cxx11
+align, "<memory>", cxx11
 allocate_shared, "<memory>", cxx11
+allocate_shared_for_overwrite, "<memory>", cxx20
 allocator, "<memory>", cxx98
+allocator_arg, "<memory>", cxx11
+allocator_arg_t, "<memory>", cxx11
 allocator_traits, "<memory>", cxx11
+assume_aligned, "<memory>", cxx20
+bad_weak_ptr, "<memory>", cxx11
+const_pointer_cast, "<memory>", cxx11
+construct_at, "<memory>", cxx20
+default_delete, "<memory>", cxx11
+destroy, "<memory>", cxx20
+destroy_at, "<memory>", cxx20
+destroy_n, "<memory>", cxx20
+dynamic_pointer_cast, "<memory>", cxx11
+enable_shared_from_this, "<memory>", cxx11
+get_deleter, "<memory>", cxx11
+make_obj_using_allocator, "<memory>", cxx20
 make_shared, "<memory>", cxx11
+make_shared_for_overwrite, "<memory>", cxx20
 make_unique, "<memory>", cxx14
+make_unique_for_overwrite, "<memory>", cxx20
+owner_less, "<memory>", cxx11
+pointer_traits, "<memory>", cxx11
+reinterpret_pointer_cast, "<memory>", cxx17
 shared_ptr, "<memory>", cxx11
+static_pointer_cast, "<memory>", cxx11
+to_address, "<memory>", cxx11
+uninitialized_construct_using_allocator, "<memory>", cxx20
 unique_ptr, "<memory>", cxx11
+uses_allocator, "<memory>", cxx11
+uses_allocator_construction_args, "<memory>", cxx20
+uses_allocator_v, "<memory>", cxx17
 weak_ptr, "<memory>", cxx11
 # <memory_resource>
 pmr, "<memory_resource>", cxx17
+pmr::get_default_resource, "<memory_resource>", cxx17
+pmr::memory_resource, "<memory_resource>", cxx17
+pmr::monotonic_buffer_resource, "<memory_resource>", cxx17
+pmr::new_delete_resource, "<memory_resource>", cxx17
+pmr::polymorphic_allocator, "<memory_resource>", cxx17
+pmr::pool_options, "<memory_resource>", cxx17
+pmr::set_default_resource, "<memory_resource>", cxx17
+pmr::synchronized_pool_resource, "<memory_resource>", cxx17
+pmr::unsynchronized_pool_resource, "<memory_resource>", cxx17
 # <mutex>
+call_once, "<mutex>", cxx11
+lock, "<mutex>", cxx11
+lock_guard, "<mutex>", cxx11
 mutex, "<mutex>", cxx11
-timed_mutex, "<mutex>", cxx11
+once_flag, "<mutex>", cxx11
 recursive_mutex, "<mutex>", cxx11
 recursive_timed_mutex, "<mutex>", cxx11
-once_flag, "<mutex>", cxx11
-call_once, "<mutex>", cxx11
-lock, "<mutex>", cxx11
 scoped_lock, "<mutex>", cxx17
+timed_mutex, "<mutex>", cxx11
 try_lock, "<mutex>", cxx11
-lock_guard, "<mutex>", cxx11
 unique_lock, "<mutex>", cxx11
-# <optional>. */
-optional, "<optional>", cxx17
+# <new>
+bad_alloc, "<new>", cxx98
+hardware_constructive_interference_size, "<new>", cxx17
+hardware_destructive_interference_size, "<new>", cxx17
+launder, "<new>", cxx17
+nothrow, "<new>", cxx98
+nothrow_t, "<new>", cxx98
+# <numbers>
+numbers::e_v, "<numbers>", cxx20
+numbers::egamma_v, "<numbers>", cxx20
+numbers::inv_pi_v, "<numbers>", cxx20
+numbers::inv_sqrt3_v, "<numbers>", cxx20
+numbers::inv_sqrtpi_v, "<numbers>", cxx20
+numbers::ln10_v, "<numbers>", cxx20
+numbers::ln2_v, "<numbers>", cxx20
+numbers::log10e_v, "<numbers>", cxx20
+numbers::log2e_v, "<numbers>", cxx20
+numbers::phi_v, "<numbers>", cxx20
+numbers::pi_v, "<numbers>", cxx20
+numbers::sqrt2_v, "<numbers>", cxx20
+numbers::sqrt3_v, "<numbers>", cxx20
+# <optional>
 make_optional, "<optional>", cxx17
+nullopt, "<optional>", cxx17
+optional, "<optional>", cxx17
 # <ostream>
-ostream, "<ostream>", cxx98
-wostream, "<ostream>", cxx98
+emit_on_flush, "<ostream>", cxx20
+endl, "<ostream>", cxx98
 ends, "<ostream>", cxx98
 flush, "<ostream>", cxx98
-endl, "<ostream>", cxx98
+flush_emit, "<ostream>", cxx20
+noemit_on_flush, "<ostream>", cxx20
+ostream, "<ostream>", cxx98
+wostream, "<ostream>", cxx98
 # <queue>
-queue, "<queue>", cxx98
 priority_queue, "<queue>", cxx98
+queue, "<queue>", cxx98
+# <ranges>
+ranges::enable_borrowed_range, "<ranges>", cxx20
+ranges::enable_view, "<ranges>", cxx20
+# <scoped_allocator>
+scoped_allocator_adaptor, "<scoped_allocator>", cxx11
+# <semaphore>
+binary_semaphore, "<semaphore>", cxx20
+counting_semaphore, "<semaphore>", cxx20
 # <set>
-set, "<set>", cxx98
 multiset, "<set>", cxx98
+set, "<set>", cxx98
 # <shared_mutex>
 shared_lock, "<shared_mutex>", cxx14
 shared_mutex, "<shared_mutex>", cxx17
 shared_timed_mutex, "<shared_mutex>", cxx14
 # <source_location>
 source_location, "<source_location>", cxx20
+# <span>
+span, "<span>", cxx20
+# <spanstream>
+basic_ispanstream, "<spanstream>", cxx23
+basic_ospanstream, "<spanstream>", cxx23
+basic_spanbuf, "<spanstream>", cxx23
+basic_spanstream, "<spanstream>", cxx23
+ispanstream, "<spanstream>", cxx23
+ispanstream, "<spanstream>", cxx23
+ospanstream, "<spanstream>", cxx23
+spanbuf, "<spanstream>", cxx23
+spanstream, "<spanstream>", cxx23
+wispanstream, "<spanstream>", cxx23
+wospanstream, "<spanstream>", cxx23
+wspanbuf, "<spanstream>", cxx23
 # <sstream>
-basic_stringbuf, "<sstream>", cxx98
 basic_istringstream, "<sstream>", cxx98
 basic_ostringstream, "<sstream>", cxx98
+basic_stringbuf, "<sstream>", cxx98
 basic_stringstream, "<sstream>", cxx98
 istringstream, "<sstream>", cxx98
+istringstream, "<sstream>", cxx98
 ostringstream, "<sstream>", cxx98
+stringbuf, "<sstream>", cxx98
 stringstream, "<sstream>", cxx98
+wistringstream, "<sstream>", cxx98
+wostringstream, "<sstream>", cxx98
+wstringbuf, "<sstream>", cxx98
 # <stack>
 stack, "<stack>", cxx98
+# <stacktrace>
+stacktrace, "<stacktrace>", cxx23
+# <stdexcept>
+domain_error, "<stdexcept>", cxx98
+invalid_argument, "<stdexcept>", cxx98
+length_error, "<stdexcept>", cxx98
+logic_error, "<stdexcept>", cxx98
+out_of_range, "<stdexcept>", cxx98
+overflow_error, "<stdexcept>", cxx98
+range_error, "<stdexcept>", cxx98
+runtime_error, "<stdexcept>", cxx98
+underflow_error, "<stdexcept>", cxx98
+# <stop_token>
+stop_callback, "<stop_token>", cxx20
+stop_source, "<stop_token>", cxx20
+stop_token, "<stop_token>", cxx20
+# <streambuf>
+basic_streambuf, "<streambuf>", cxx98
+streambuf, "<streambuf>", cxx98
+wstreambuf, "<streambuf>", cxx98
 # <string>
 basic_string, "<string>", cxx98
+char_traits, "<string>", cxx98
+stod, "<string>", cxx11
+stof, "<string>", cxx11
+stoi, "<string>", cxx11
+stol, "<string>", cxx11
+stold, "<string>", cxx11
+stoll, "<string>", cxx11
+stoul, "<string>", cxx11
+stoull, "<string>", cxx11
 string, "<string>", cxx98
-wstring, "<string>", cxx98
-u8string, "<string>", cxx20
+to_string, "<string>", cxx17
+to_wstring, "<string>", cxx17
 u16string, "<string>", cxx11
 u32string, "<string>", cxx11
+u8string, "<string>", cxx20
+wstring, "<string>", cxx98
 # <string_view>
 basic_string_view, "<string_view>", cxx17
 string_view, "<string_view>", cxx17
+# <system_error>
+errc, "<system_error>", cxx11
+error_category, "<system_error>", cxx11
+error_code, "<system_error>", cxx11
+error_condition, "<system_error>", cxx11
+generic_category, "<system_error>", cxx11
+is_error_code_enum, "<system_error>", cxx11
+is_error_code_enum_v, "<system_error>", cxx17
+is_error_condition_enum, "<system_error>", cxx11
+is_error_condition_enum_v, "<system_error>", cxx17
+make_error_code, "<system_error>", cxx11
+make_error_condition, "<system_error>", cxx11
+system_category, "<system_error>", cxx11
 # <thread>
-thread, "<thread>", cxx11
+jthread, "<thread>", cxx20
 this_thread, "<thread>", cxx11
+thread, "<thread>", cxx11
 # <tuple>
 apply, "<tuple>", cxx17
 forward_as_tuple, "<tuple>", cxx11
@@ -253,35 +405,73 @@ tuple_element_t, "<tuple>", cxx14
 tuple_size, "<tuple>", cxx11
 tuple_size_v, "<tuple>", cxx17
 # <type_traits>
+conjunction, "<type_traits>", cxx17
+conjunction_v, "<type_traits>", cxx17
+disjunction, "<type_traits>", cxx17
+disjunction_v, "<type_traits>", cxx17
 enable_if, "<type_traits>", cxx11
 enable_if_t, "<type_traits>", cxx14
 invoke_result, "<type_traits>", cxx17
 invoke_result_t, "<type_traits>", cxx17
+negation, "<type_traits>", cxx17
+negation_v, "<type_traits>", cxx17
 remove_cvref, "<type_traits>", cxx20
 remove_cvref_t, "<type_traits>", cxx20
 type_identity, "<type_traits>", cxx20
 type_identity_t, "<type_traits>", cxx20
 void_t, "<type_traits>", cxx17
-conjunction, "<type_traits>", cxx17
-conjunction_v, "<type_traits>", cxx17
-disjunction, "<type_traits>", cxx17
-disjunction_v, "<type_traits>", cxx17
-negation, "<type_traits>", cxx17
-negation_v, "<type_traits>", cxx17
+# <typeindex>
+type_index, "<typeindex>", cxx11
+# <typeinfo>
+bad_cast, "<typeinfo>", cxx98
+bad_typeid, "<typeinfo>", cxx98
 # <unordered_map>
 unordered_map, "<unordered_map>", cxx11
 unordered_multimap, "<unordered_map>", cxx11
 # <unordered_set>
-unordered_set, "<unordered_set>", cxx11
 unordered_multiset, "<unordered_set>", cxx11
+unordered_set, "<unordered_set>", cxx11
 # <utility>
+as_const, "<utility>", cxx17
+cmp_equal, "<utility>", cxx20
+cmp_greater, "<utility>", cxx20
+cmp_greater_equal, "<utility>", cxx20
+cmp_less, "<utility>", cxx20
+cmp_less_equal, "<utility>", cxx20
+cmp_not_equal, "<utility>", cxx20
 declval, "<utility>", cxx11
+exchange, "<utility>", cxx14
 forward, "<utility>", cxx11
+in_place, "<utility>", cxx17
+in_place_index, "<utility>", cxx17
+in_place_index_t, "<utility>", cxx17
+in_place_t, "<utility>", cxx17
+in_place_type, "<utility>", cxx17
+in_place_type_t, "<utility>", cxx17
+in_range, "<utility>", cxx20
+index_sequence, "<utility>", cxx14
+index_sequence_for, "<utility>", cxx14
+integer_sequence, "<utility>", cxx14
+make_index_sequence, "<utility>", cxx14
+make_integer_sequence, "<utility>", cxx14
 make_pair, "<utility>", cxx98
 move, "<utility>", cxx11
+move_if_noexcept, "<utility>", cxx11
 pair, "<utility>", cxx98
+piecewise_construct, "<utility>", cxx11
+piecewise_construct_t, "<utility>", cxx11
+to_underlying, "<utility>", cxx23
+unreachable, "<utility>", cxx23
 # <variant>
+bad_variant_access, "<variant>", cxx17
+holds_alternative, "<variant>", cxx17
+monostate, "<variant>", cxx17
 variant, "<variant>", cxx17
+variant_alternative, "<variant>", cxx17
+variant_alternative_t, "<variant>", cxx17
+variant_npos, "<variant>", cxx17
+variant_size, "<variant>", cxx17
+variant_size_v, "<variant>", cxx17
 visit, "<variant>", cxx17
 # <vector>
 vector, "<vector>", cxx98
diff --git a/gcc/cp/std-name-hint.h b/gcc/cp/std-name-hint.h
index c48eac30f90..f28a2e01344 100644
--- a/gcc/cp/std-name-hint.h
+++ b/gcc/cp/std-name-hint.h
@@ -1,5 +1,5 @@
 /* C++ code produced by gperf version 3.1 */
-/* Command-line: gperf -o -C -E -D -N find -L C++ --output-file std-name-hint.h -k'1,2,7,11,$' std-name-hint.gperf  */
+/* Command-line: gperf -o -C -E -k '1,2,7,11,$' -D -N find -L C++ --output-file std-name-hint.h std-name-hint.gperf  */
 
 #if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
       && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
@@ -30,6 +30,7 @@
 
 #line 4 "std-name-hint.gperf"
 
+/* This file is auto-generated by gen-cxxapi-file.py.  */
 /* Copyright (C) 2022 Free Software Foundation, Inc.
 
 This file is part of GCC.
@@ -47,7 +48,7 @@ for more details.
 You should have received a copy of the GNU General Public License
 along with GCC; see the file COPYING3.  If not see
 <http://www.gnu.org/licenses/>.  */
-#line 23 "std-name-hint.gperf"
+#line 24 "std-name-hint.gperf"
 struct std_name_hint
 {
   /* A name within "std::".  */
@@ -60,7 +61,7 @@ struct std_name_hint
   /* The dialect of C++ in which this was added.  */
   enum cxx_dialect min_dialect;
 };
-/* maximum key range = 626, duplicates = 4 */
+/* maximum key range = 1387, duplicates = 6 */
 
 class std_name_hint_lookup
 {
@@ -75,32 +76,32 @@ std_name_hint_lookup::hash (const char *str, size_t len)
 {
   static const unsigned short asso_values[] =
     {
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635,   5,
-      635,   0, 635, 635, 635, 635,  25, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635,  45, 635,  25,  70, 165,
-       20,   0,  35, 225, 190,  95, 635, 120, 183,  10,
-        5,  25, 165,   5,   5,  10,   0,  55,   4, 143,
-      115, 229, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635, 635, 635, 635, 635,
-      635, 635, 635, 635, 635, 635
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,   10,
+        25,    5,   20, 1412,    0, 1412,    5,    0,   15, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412,  260, 1412,  430,   15,  323,
+       305,    5,   55,  198,  475,  125,  240,  105,  225,   50,
+         5,  155,  105,  440,   85,    5,    0,   10,   15,  124,
+       470,  463,   65, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412,
+      1412, 1412, 1412, 1412, 1412, 1412, 1412
     };
   unsigned int hval = len;
 
@@ -120,7 +121,7 @@ std_name_hint_lookup::hash (const char *str, size_t len)
       case 4:
       case 3:
       case 2:
-        hval += asso_values[static_cast<unsigned char>(str[1])];
+        hval += asso_values[static_cast<unsigned char>(str[1]+1)];
       /*FALLTHROUGH*/
       case 1:
         hval += asso_values[static_cast<unsigned char>(str[0])];
@@ -134,509 +135,952 @@ std_name_hint_lookup::find (const char *str, size_t len)
 {
   enum
     {
-      TOTAL_KEYWORDS = 205,
+      TOTAL_KEYWORDS = 378,
       MIN_WORD_LENGTH = 2,
-      MAX_WORD_LENGTH = 22,
-      MIN_HASH_VALUE = 9,
-      MAX_HASH_VALUE = 634
+      MAX_WORD_LENGTH = 39,
+      MIN_HASH_VALUE = 25,
+      MAX_HASH_VALUE = 1411
     };
 
   static const struct std_name_hint wordlist[] =
     {
-#line 158 "std-name-hint.gperf"
-      {"next", "<iterator>", cxx11},
-#line 212 "std-name-hint.gperf"
+#line 401 "std-name-hint.gperf"
+      {"tuple", "<tuple>", cxx11},
+#line 276 "std-name-hint.gperf"
+      {"nullopt", "<optional>", cxx17},
+#line 405 "std-name-hint.gperf"
+      {"tuple_size", "<tuple>", cxx11},
+#line 469 "std-name-hint.gperf"
+      {"variant", "<variant>", cxx17},
+#line 403 "std-name-hint.gperf"
+      {"tuple_element", "<tuple>", cxx11},
+#line 404 "std-name-hint.gperf"
+      {"tuple_element_t", "<tuple>", cxx14},
+#line 426 "std-name-hint.gperf"
+      {"bad_cast", "<typeinfo>", cxx98},
+#line 471 "std-name-hint.gperf"
+      {"variant_alternative_t", "<variant>", cxx17},
+#line 470 "std-name-hint.gperf"
+      {"variant_alternative", "<variant>", cxx17},
+#line 267 "std-name-hint.gperf"
+      {"numbers::ln2_v", "<numbers>", cxx20},
+#line 266 "std-name-hint.gperf"
+      {"numbers::ln10_v", "<numbers>", cxx20},
+#line 263 "std-name-hint.gperf"
+      {"numbers::inv_pi_v", "<numbers>", cxx20},
+#line 300 "std-name-hint.gperf"
       {"set", "<set>", cxx98},
-#line 287 "std-name-hint.gperf"
-      {"vector", "<vector>", cxx98},
-#line 101 "std-name-hint.gperf"
+#line 183 "std-name-hint.gperf"
+      {"next", "<iterator>", cxx11},
+#line 264 "std-name-hint.gperf"
+      {"numbers::inv_sqrt3_v", "<numbers>", cxx20},
+#line 265 "std-name-hint.gperf"
+      {"numbers::inv_sqrtpi_v", "<numbers>", cxx20},
+#line 361 "std-name-hint.gperf"
+      {"stof", "<string>", cxx11},
+#line 129 "std-name-hint.gperf"
       {"setbase", "<iomanip>", cxx98},
-#line 165 "std-name-hint.gperf"
-      {"ends", "<ostream>", cxx98},
-#line 205 "std-name-hint.gperf"
-      {"ends", "<ostream>", cxx98},
-#line 86 "std-name-hint.gperf"
+#line 299 "std-name-hint.gperf"
+      {"multiset", "<set>", cxx98},
+#line 174 "std-name-hint.gperf"
+      {"begin", "<iterator>", cxx11},
+#line 119 "std-name-hint.gperf"
+      {"future", "<future>", cxx11},
+#line 70 "std-name-hint.gperf"
+      {"byte", "<cstddef>", cxx17},
+#line 399 "std-name-hint.gperf"
+      {"make_tuple", "<tuple>", cxx11},
+#line 216 "std-name-hint.gperf"
+      {"make_unique", "<memory>", cxx14},
+#line 330 "std-name-hint.gperf"
+      {"stringbuf", "<sstream>", cxx98},
+#line 355 "std-name-hint.gperf"
+      {"streambuf", "<streambuf>", cxx98},
+#line 456 "std-name-hint.gperf"
+      {"make_integer_sequence", "<utility>", cxx14},
+#line 217 "std-name-hint.gperf"
+      {"make_unique_for_overwrite", "<memory>", cxx20},
+#line 313 "std-name-hint.gperf"
+      {"basic_spanstream", "<spanstream>", cxx23},
+#line 326 "std-name-hint.gperf"
+      {"basic_stringstream", "<sstream>", cxx98},
+#line 325 "std-name-hint.gperf"
+      {"basic_stringbuf", "<sstream>", cxx98},
+#line 473 "std-name-hint.gperf"
+      {"variant_size", "<variant>", cxx17},
+#line 338 "std-name-hint.gperf"
+      {"stacktrace", "<stacktrace>", cxx23},
+#line 110 "std-name-hint.gperf"
       {"mem_fn", "<functional>", cxx11},
-#line 69 "std-name-hint.gperf"
-      {"deque", "<deque>", cxx98},
-#line 162 "std-name-hint.gperf"
-      {"reverse_iterator", "<iterator>", cxx98},
-#line 151 "std-name-hint.gperf"
-      {"end", "<iterator>", cxx11},
-#line 264 "std-name-hint.gperf"
+#line 312 "std-name-hint.gperf"
+      {"basic_spanbuf", "<spanstream>", cxx23},
+#line 283 "std-name-hint.gperf"
+      {"flush_emit", "<ostream>", cxx20},
+#line 111 "std-name-hint.gperf"
+      {"not_fn", "<functional>", cxx17},
+#line 474 "std-name-hint.gperf"
+      {"variant_size_v", "<variant>", cxx17},
+#line 336 "std-name-hint.gperf"
+      {"stack", "<stack>", cxx98},
+#line 422 "std-name-hint.gperf"
       {"void_t", "<type_traits>", cxx17},
-#line 284 "std-name-hint.gperf"
-      {"variant", "<variant>", cxx17},
-#line 281 "std-name-hint.gperf"
+#line 121 "std-name-hint.gperf"
+      {"promise", "<future>", cxx11},
+#line 186 "std-name-hint.gperf"
+      {"prev", "<iterator>", cxx11},
+#line 170 "std-name-hint.gperf"
+      {"ws", "<istream>", cxx98},
+#line 173 "std-name-hint.gperf"
+      {"back_inserter", "<iterator>", cxx98},
+#line 131 "std-name-hint.gperf"
+      {"setiosflags", "<iomanip>", cxx98},
+#line 466 "std-name-hint.gperf"
+      {"bad_variant_access", "<variant>", cxx17},
+#line 288 "std-name-hint.gperf"
+      {"priority_queue", "<queue>", cxx98},
+#line 144 "std-name-hint.gperf"
+      {"noshowbase", "<ios>", cxx98},
+#line 362 "std-name-hint.gperf"
+      {"stoi", "<string>", cxx11},
+#line 155 "std-name-hint.gperf"
+      {"showpos", "<ios>", cxx98},
+#line 153 "std-name-hint.gperf"
+      {"showbase", "<ios>", cxx98},
+#line 235 "std-name-hint.gperf"
+      {"pmr::new_delete_resource", "<memory_resource>", cxx17},
+#line 232 "std-name-hint.gperf"
+      {"pmr::get_default_resource", "<memory_resource>", cxx17},
+#line 238 "std-name-hint.gperf"
+      {"pmr::set_default_resource", "<memory_resource>", cxx17},
+#line 97 "std-name-hint.gperf"
+      {"basic_fstream", "<fstream>", cxx98},
+#line 477 "std-name-hint.gperf"
+      {"vector", "<vector>", cxx98},
+#line 100 "std-name-hint.gperf"
+      {"fstream", "<fstream>", cxx98},
+#line 458 "std-name-hint.gperf"
       {"move", "<utility>", cxx11},
-#line 87 "std-name-hint.gperf"
-      {"not_fn", "<functional>", cxx17},
+#line 96 "std-name-hint.gperf"
+      {"basic_filebuf", "<fstream>", cxx98},
+#line 281 "std-name-hint.gperf"
+      {"ends", "<ostream>", cxx98},
+#line 398 "std-name-hint.gperf"
+      {"make_from_tuple", "<tuple>", cxx17},
+#line 191 "std-name-hint.gperf"
+      {"map", "<map>", cxx98},
+#line 271 "std-name-hint.gperf"
+      {"numbers::pi_v", "<numbers>", cxx20},
+#line 376 "std-name-hint.gperf"
+      {"basic_string_view", "<string_view>", cxx17},
+#line 126 "std-name-hint.gperf"
+      {"put_time", "<iomanip>", cxx11},
+#line 352 "std-name-hint.gperf"
+      {"stop_token", "<stop_token>", cxx20},
+#line 133 "std-name-hint.gperf"
+      {"setw", "<iomanip>", cxx98},
+#line 148 "std-name-hint.gperf"
+      {"nounitbuf", "<ios>", cxx98},
+#line 351 "std-name-hint.gperf"
+      {"stop_source", "<stop_token>", cxx20},
+#line 213 "std-name-hint.gperf"
+      {"make_obj_using_allocator", "<memory>", cxx20},
+#line 321 "std-name-hint.gperf"
+      {"wspanbuf", "<spanstream>", cxx23},
+#line 231 "std-name-hint.gperf"
+      {"pmr", "<memory_resource>", cxx17},
+#line 472 "std-name-hint.gperf"
+      {"variant_npos", "<variant>", cxx17},
+#line 223 "std-name-hint.gperf"
+      {"to_address", "<memory>", cxx11},
+#line 460 "std-name-hint.gperf"
+      {"pair", "<utility>", cxx98},
 #line 269 "std-name-hint.gperf"
+      {"numbers::log2e_v", "<numbers>", cxx20},
+#line 268 "std-name-hint.gperf"
+      {"numbers::log10e_v", "<numbers>", cxx20},
+#line 149 "std-name-hint.gperf"
+      {"nouppercase", "<ios>", cxx98},
+#line 368 "std-name-hint.gperf"
+      {"string", "<string>", cxx98},
+#line 373 "std-name-hint.gperf"
+      {"u8string", "<string>", cxx20},
+#line 145 "std-name-hint.gperf"
+      {"noshowpoint", "<ios>", cxx98},
+#line 310 "std-name-hint.gperf"
+      {"basic_ispanstream", "<spanstream>", cxx23},
+#line 416 "std-name-hint.gperf"
       {"negation", "<type_traits>", cxx17},
-#line 270 "std-name-hint.gperf"
+#line 146 "std-name-hint.gperf"
+      {"noshowpos", "<ios>", cxx98},
+#line 459 "std-name-hint.gperf"
+      {"move_if_noexcept", "<utility>", cxx11},
+#line 169 "std-name-hint.gperf"
+      {"istream", "<istream>", cxx98},
+#line 314 "std-name-hint.gperf"
+      {"ispanstream", "<spanstream>", cxx23},
+#line 315 "std-name-hint.gperf"
+      {"ispanstream", "<spanstream>", cxx23},
+#line 106 "std-name-hint.gperf"
+      {"function", "<functional>", cxx11},
+#line 356 "std-name-hint.gperf"
+      {"wstreambuf", "<streambuf>", cxx98},
+#line 417 "std-name-hint.gperf"
       {"negation_v", "<type_traits>", cxx17},
-#line 122 "std-name-hint.gperf"
-      {"nouppercase", "<ios>", cxx98},
-#line 43 "std-name-hint.gperf"
-      {"any_cast", "<any>", cxx17},
-#line 181 "std-name-hint.gperf"
-      {"make_unique", "<memory>", cxx14},
+#line 156 "std-name-hint.gperf"
+      {"skipws", "<ios>", cxx98},
+#line 259 "std-name-hint.gperf"
+      {"nothrow_t", "<new>", cxx98},
+#line 363 "std-name-hint.gperf"
+      {"stol", "<string>", cxx11},
+#line 365 "std-name-hint.gperf"
+      {"stoll", "<string>", cxx11},
+#line 366 "std-name-hint.gperf"
+      {"stoul", "<string>", cxx11},
+#line 367 "std-name-hint.gperf"
+      {"stoull", "<string>", cxx11},
 #line 147 "std-name-hint.gperf"
-      {"advance", "<iterator>", cxx98},
-#line 157 "std-name-hint.gperf"
+      {"noskipws", "<ios>", cxx98},
+#line 400 "std-name-hint.gperf"
+      {"tie", "<tuple>", cxx11},
+#line 220 "std-name-hint.gperf"
+      {"reinterpret_pointer_cast", "<memory>", cxx17},
+#line 358 "std-name-hint.gperf"
+      {"basic_string", "<string>", cxx98},
+#line 187 "std-name-hint.gperf"
+      {"reverse_iterator", "<iterator>", cxx98},
+#line 182 "std-name-hint.gperf"
       {"move_iterator", "<iterator>", cxx11},
-#line 246 "std-name-hint.gperf"
-      {"make_from_tuple", "<tuple>", cxx17},
-#line 134 "std-name-hint.gperf"
-      {"defaultfloat", "<ios>", cxx11},
-#line 249 "std-name-hint.gperf"
-      {"tuple", "<tuple>", cxx11},
-#line 257 "std-name-hint.gperf"
-      {"enable_if_t", "<type_traits>", cxx14},
-#line 164 "std-name-hint.gperf"
-      {"ostream", "<ostream>", cxx98},
-#line 203 "std-name-hint.gperf"
+#line 262 "std-name-hint.gperf"
+      {"numbers::egamma_v", "<numbers>", cxx20},
+#line 311 "std-name-hint.gperf"
+      {"basic_ospanstream", "<spanstream>", cxx23},
+#line 475 "std-name-hint.gperf"
+      {"visit", "<variant>", cxx17},
+#line 56 "std-name-hint.gperf"
+      {"bitset", "<bitset>", cxx11},
+#line 285 "std-name-hint.gperf"
       {"ostream", "<ostream>", cxx98},
-#line 261 "std-name-hint.gperf"
-      {"remove_cvref_t", "<type_traits>", cxx20},
-#line 209 "std-name-hint.gperf"
-      {"queue", "<queue>", cxx98},
-#line 159 "std-name-hint.gperf"
-      {"ostream_iterator", "<iterator>", cxx98},
-#line 227 "std-name-hint.gperf"
-      {"stringstream", "<sstream>", cxx98},
-#line 251 "std-name-hint.gperf"
-      {"tuple_element", "<tuple>", cxx11},
-#line 252 "std-name-hint.gperf"
-      {"tuple_element_t", "<tuple>", cxx14},
-#line 77 "std-name-hint.gperf"
-      {"fstream", "<fstream>", cxx98},
-#line 213 "std-name-hint.gperf"
-      {"multiset", "<set>", cxx98},
-#line 280 "std-name-hint.gperf"
-      {"make_pair", "<utility>", cxx98},
-#line 253 "std-name-hint.gperf"
-      {"tuple_size", "<tuple>", cxx11},
-#line 100 "std-name-hint.gperf"
-      {"setiosflags", "<iomanip>", cxx98},
-#line 99 "std-name-hint.gperf"
-      {"resetiosflags", "<iomanip>", cxx98},
-#line 149 "std-name-hint.gperf"
-      {"begin", "<iterator>", cxx11},
-#line 109 "std-name-hint.gperf"
-      {"quoted", "<iomanip>", cxx14},
-#line 275 "std-name-hint.gperf"
+#line 154 "std-name-hint.gperf"
+      {"showpoint", "<ios>", cxx98},
+#line 316 "std-name-hint.gperf"
+      {"ospanstream", "<spanstream>", cxx23},
+#line 433 "std-name-hint.gperf"
       {"unordered_set", "<unordered_set>", cxx11},
-#line 276 "std-name-hint.gperf"
-      {"unordered_multiset", "<unordered_set>", cxx11},
-#line 256 "std-name-hint.gperf"
-      {"enable_if", "<type_traits>", cxx11},
-#line 95 "std-name-hint.gperf"
-      {"future", "<future>", cxx11},
-#line 260 "std-name-hint.gperf"
-      {"remove_cvref", "<type_traits>", cxx20},
-#line 248 "std-name-hint.gperf"
-      {"tie", "<tuple>", cxx11},
-#line 247 "std-name-hint.gperf"
-      {"make_tuple", "<tuple>", cxx11},
-#line 71 "std-name-hint.gperf"
-      {"forward_list", "<forward_list>", cxx11},
-#line 79 "std-name-hint.gperf"
-      {"ofstream", "<fstream>", cxx98},
-#line 285 "std-name-hint.gperf"
-      {"visit", "<variant>", cxx17},
-#line 127 "std-name-hint.gperf"
-      {"right", "<ios>", cxx98},
-#line 85 "std-name-hint.gperf"
-      {"invoke", "<functional>", cxx17},
-#line 279 "std-name-hint.gperf"
-      {"forward", "<utility>", cxx11},
-#line 114 "std-name-hint.gperf"
-      {"noshowbase", "<ios>", cxx98},
-#line 153 "std-name-hint.gperf"
-      {"inserter", "<iterator>", cxx98},
-#line 160 "std-name-hint.gperf"
-      {"ostreambuf_iterator", "<iterator>", cxx98},
-#line 51 "std-name-hint.gperf"
-      {"atomic_ref", "<atomic>", cxx20},
-#line 112 "std-name-hint.gperf"
-      {"noboolalpha", "<ios>", cxx98},
-#line 148 "std-name-hint.gperf"
-      {"back_inserter", "<iterator>", cxx98},
-#line 183 "std-name-hint.gperf"
-      {"unique_ptr", "<memory>", cxx11},
-#line 89 "std-name-hint.gperf"
-      {"unwrap_reference", "<functional>", cxx20},
-#line 90 "std-name-hint.gperf"
-      {"unwrap_reference_t", "<functional>", cxx20},
-#line 219 "std-name-hint.gperf"
-      {"source_location", "<source_location>", cxx20},
-#line 254 "std-name-hint.gperf"
-      {"tuple_size_v", "<tuple>", cxx17},
-#line 83 "std-name-hint.gperf"
-      {"function", "<functional>", cxx11},
-#line 144 "std-name-hint.gperf"
-      {"istream", "<istream>", cxx98},
+#line 78 "std-name-hint.gperf"
+      {"uint_least64_t", "<cstdint>", cxx11},
 #line 229 "std-name-hint.gperf"
-      {"stack", "<stack>", cxx98},
-#line 154 "std-name-hint.gperf"
+      {"weak_ptr", "<memory>", cxx11},
+#line 79 "std-name-hint.gperf"
+      {"uint_least8_t", "<cstdint>", cxx11},
+#line 77 "std-name-hint.gperf"
+      {"uint_least32_t", "<cstdint>", cxx11},
+#line 76 "std-name-hint.gperf"
+      {"uint_least16_t", "<cstdint>", cxx11},
+#line 179 "std-name-hint.gperf"
       {"istream_iterator", "<iterator>", cxx98},
-#line 123 "std-name-hint.gperf"
+#line 157 "std-name-hint.gperf"
       {"unitbuf", "<ios>", cxx98},
-#line 224 "std-name-hint.gperf"
-      {"basic_stringstream", "<sstream>", cxx98},
-#line 245 "std-name-hint.gperf"
-      {"forward_as_tuple", "<tuple>", cxx11},
+#line 142 "std-name-hint.gperf"
+      {"left", "<ios>", cxx98},
+#line 346 "std-name-hint.gperf"
+      {"range_error", "<stdexcept>", cxx98},
+#line 347 "std-name-hint.gperf"
+      {"runtime_error", "<stdexcept>", cxx98},
+#line 108 "std-name-hint.gperf"
+      {"invoke", "<functional>", cxx17},
+#line 222 "std-name-hint.gperf"
+      {"static_pointer_cast", "<memory>", cxx11},
+#line 98 "std-name-hint.gperf"
+      {"basic_ifstream", "<fstream>", cxx98},
+#line 406 "std-name-hint.gperf"
+      {"tuple_size_v", "<tuple>", cxx17},
+#line 452 "std-name-hint.gperf"
+      {"index_sequence", "<utility>", cxx14},
+#line 184 "std-name-hint.gperf"
+      {"ostream_iterator", "<iterator>", cxx98},
+#line 261 "std-name-hint.gperf"
+      {"numbers::e_v", "<numbers>", cxx20},
 #line 124 "std-name-hint.gperf"
-      {"nounitbuf", "<ios>", cxx98},
-#line 119 "std-name-hint.gperf"
-      {"skipws", "<ios>", cxx98},
-#line 75 "std-name-hint.gperf"
+      {"get_time", "<iomanip>", cxx11},
+#line 432 "std-name-hint.gperf"
+      {"unordered_multiset", "<unordered_set>", cxx11},
+#line 360 "std-name-hint.gperf"
+      {"stod", "<string>", cxx11},
+#line 364 "std-name-hint.gperf"
+      {"stold", "<string>", cxx11},
+#line 151 "std-name-hint.gperf"
+      {"right", "<ios>", cxx98},
+#line 99 "std-name-hint.gperf"
       {"basic_ofstream", "<fstream>", cxx98},
-#line 156 "std-name-hint.gperf"
-      {"iterator_traits", "<iterator>", cxx98},
-#line 76 "std-name-hint.gperf"
-      {"basic_fstream", "<fstream>", cxx98},
-#line 131 "std-name-hint.gperf"
-      {"fixed", "<ios>", cxx98},
-#line 184 "std-name-hint.gperf"
-      {"weak_ptr", "<memory>", cxx11},
-#line 104 "std-name-hint.gperf"
-      {"setw", "<iomanip>", cxx98},
-#line 152 "std-name-hint.gperf"
-      {"front_inserter", "<iterator>", cxx98},
-#line 221 "std-name-hint.gperf"
-      {"basic_stringbuf", "<sstream>", cxx98},
-#line 145 "std-name-hint.gperf"
-      {"ws", "<istream>", cxx98},
-#line 92 "std-name-hint.gperf"
-      {"unwrap_ref_decay_t", "<functional>", cxx20},
-#line 53 "std-name-hint.gperf"
-      {"bitset", "<bitset>", cxx11},
-#line 78 "std-name-hint.gperf"
-      {"ifstream", "<fstream>", cxx98},
-#line 138 "std-name-hint.gperf"
-      {"cerr", "<iostream>", cxx98},
-#line 88 "std-name-hint.gperf"
-      {"reference_wrapper", "<functional>", cxx11},
-#line 97 "std-name-hint.gperf"
-      {"promise", "<future>", cxx11},
-#line 161 "std-name-hint.gperf"
-      {"prev", "<iterator>", cxx11},
-#line 82 "std-name-hint.gperf"
-      {"bind_front", "<functional>", cxx20},
-#line 186 "std-name-hint.gperf"
-      {"pmr", "<memory_resource>", cxx17},
-#line 155 "std-name-hint.gperf"
-      {"istreambuf_iterator", "<iterator>", cxx98},
-#line 188 "std-name-hint.gperf"
-      {"mutex", "<mutex>", cxx11},
-#line 126 "std-name-hint.gperf"
-      {"left", "<ios>", cxx98},
-#line 128 "std-name-hint.gperf"
-      {"dec", "<ios>", cxx98},
+#line 379 "std-name-hint.gperf"
+      {"errc", "<system_error>", cxx11},
 #line 81 "std-name-hint.gperf"
-      {"bind", "<functional>", cxx11},
-#line 120 "std-name-hint.gperf"
-      {"noskipws", "<ios>", cxx98},
-#line 167 "std-name-hint.gperf"
-      {"endl", "<ostream>", cxx98},
-#line 207 "std-name-hint.gperf"
-      {"endl", "<ostream>", cxx98},
-#line 130 "std-name-hint.gperf"
-      {"oct", "<ios>", cxx98},
-#line 137 "std-name-hint.gperf"
-      {"cout", "<iostream>", cxx98},
-#line 49 "std-name-hint.gperf"
-      {"atomic", "<atomic>", cxx11},
-#line 282 "std-name-hint.gperf"
-      {"pair", "<utility>", cxx98},
-#line 174 "std-name-hint.gperf"
-      {"map", "<map>", cxx98},
-#line 193 "std-name-hint.gperf"
+      {"uintptr_t", "<cstdint>", cxx11},
+#line 439 "std-name-hint.gperf"
+      {"cmp_less", "<utility>", cxx20},
+#line 402 "std-name-hint.gperf"
+      {"tuple_cat", "<tuple>", cxx11},
+#line 381 "std-name-hint.gperf"
+      {"error_code", "<system_error>", cxx11},
+#line 323 "std-name-hint.gperf"
+      {"basic_istringstream", "<sstream>", cxx98},
+#line 105 "std-name-hint.gperf"
+      {"bind_front", "<functional>", cxx20},
+#line 455 "std-name-hint.gperf"
+      {"make_index_sequence", "<utility>", cxx14},
+#line 242 "std-name-hint.gperf"
       {"call_once", "<mutex>", cxx11},
-#line 94 "std-name-hint.gperf"
-      {"async", "<future>", cxx11},
-#line 116 "std-name-hint.gperf"
-      {"noshowpoint", "<ios>", cxx98},
-#line 204 "std-name-hint.gperf"
-      {"wostream", "<ostream>", cxx98},
+#line 372 "std-name-hint.gperf"
+      {"u32string", "<string>", cxx11},
 #line 258 "std-name-hint.gperf"
-      {"invoke_result", "<type_traits>", cxx17},
-#line 118 "std-name-hint.gperf"
-      {"noshowpos", "<ios>", cxx98},
-#line 259 "std-name-hint.gperf"
-      {"invoke_result_t", "<type_traits>", cxx17},
-#line 241 "std-name-hint.gperf"
-      {"thread", "<thread>", cxx11},
-#line 103 "std-name-hint.gperf"
-      {"setprecision", "<iomanip>", cxx98},
-#line 113 "std-name-hint.gperf"
-      {"showbase", "<ios>", cxx98},
-#line 74 "std-name-hint.gperf"
-      {"basic_ifstream", "<fstream>", cxx98},
+      {"nothrow", "<new>", cxx98},
+#line 371 "std-name-hint.gperf"
+      {"u16string", "<string>", cxx11},
+#line 177 "std-name-hint.gperf"
+      {"front_inserter", "<iterator>", cxx98},
+#line 83 "std-name-hint.gperf"
+      {"deque", "<deque>", cxx98},
+#line 112 "std-name-hint.gperf"
+      {"reference_wrapper", "<functional>", cxx11},
 #line 178 "std-name-hint.gperf"
-      {"allocator", "<memory>", cxx98},
-#line 133 "std-name-hint.gperf"
-      {"hexfloat", "<ios>", cxx11},
-#line 117 "std-name-hint.gperf"
-      {"showpos", "<ios>", cxx98},
-#line 170 "std-name-hint.gperf"
-      {"flush_emit", "<ostream>", cxx20},
-#line 250 "std-name-hint.gperf"
-      {"tuple_cat", "<tuple>", cxx11},
-#line 179 "std-name-hint.gperf"
-      {"allocator_traits", "<memory>", cxx11},
-#line 191 "std-name-hint.gperf"
-      {"recursive_timed_mutex", "<mutex>", cxx11},
-#line 108 "std-name-hint.gperf"
-      {"put_time", "<iomanip>", cxx11},
-#line 210 "std-name-hint.gperf"
-      {"priority_queue", "<queue>", cxx98},
-#line 190 "std-name-hint.gperf"
-      {"recursive_mutex", "<mutex>", cxx11},
-#line 232 "std-name-hint.gperf"
-      {"string", "<string>", cxx98},
-#line 107 "std-name-hint.gperf"
-      {"get_time", "<iomanip>", cxx11},
-#line 223 "std-name-hint.gperf"
+      {"inserter", "<iterator>", cxx98},
+#line 324 "std-name-hint.gperf"
       {"basic_ostringstream", "<sstream>", cxx98},
-#line 73 "std-name-hint.gperf"
-      {"basic_filebuf", "<fstream>", cxx98},
-#line 272 "std-name-hint.gperf"
+#line 333 "std-name-hint.gperf"
+      {"wostringstream", "<sstream>", cxx98},
+#line 334 "std-name-hint.gperf"
+      {"wstringbuf", "<sstream>", cxx98},
+#line 280 "std-name-hint.gperf"
+      {"endl", "<ostream>", cxx98},
+#line 327 "std-name-hint.gperf"
+      {"istringstream", "<sstream>", cxx98},
+#line 328 "std-name-hint.gperf"
+      {"istringstream", "<sstream>", cxx98},
+#line 453 "std-name-hint.gperf"
+      {"index_sequence_for", "<utility>", cxx14},
+#line 181 "std-name-hint.gperf"
+      {"iterator_traits", "<iterator>", cxx98},
+#line 370 "std-name-hint.gperf"
+      {"to_wstring", "<string>", cxx17},
+#line 275 "std-name-hint.gperf"
+      {"make_optional", "<optional>", cxx17},
+#line 257 "std-name-hint.gperf"
+      {"launder", "<new>", cxx17},
+#line 429 "std-name-hint.gperf"
       {"unordered_map", "<unordered_map>", cxx11},
-#line 121 "std-name-hint.gperf"
-      {"uppercase", "<ios>", cxx98},
-#line 273 "std-name-hint.gperf"
+#line 419 "std-name-hint.gperf"
+      {"remove_cvref_t", "<type_traits>", cxx20},
+#line 329 "std-name-hint.gperf"
+      {"ostringstream", "<sstream>", cxx98},
+#line 430 "std-name-hint.gperf"
       {"unordered_multimap", "<unordered_map>", cxx11},
-#line 182 "std-name-hint.gperf"
+#line 388 "std-name-hint.gperf"
+      {"make_error_code", "<system_error>", cxx11},
+#line 413 "std-name-hint.gperf"
+      {"enable_if_t", "<type_traits>", cxx14},
+#line 163 "std-name-hint.gperf"
+      {"cout", "<iostream>", cxx98},
+#line 167 "std-name-hint.gperf"
+      {"wcout", "<iostream>", cxx98},
+#line 389 "std-name-hint.gperf"
+      {"make_error_condition", "<system_error>", cxx11},
+#line 394 "std-name-hint.gperf"
+      {"thread", "<thread>", cxx11},
+#line 369 "std-name-hint.gperf"
+      {"to_string", "<string>", cxx17},
+#line 165 "std-name-hint.gperf"
+      {"wcin", "<iostream>", cxx98},
+#line 243 "std-name-hint.gperf"
+      {"lock", "<mutex>", cxx11},
+#line 251 "std-name-hint.gperf"
+      {"try_lock", "<mutex>", cxx11},
+#line 237 "std-name-hint.gperf"
+      {"pmr::pool_options", "<memory_resource>", cxx17},
+#line 435 "std-name-hint.gperf"
+      {"as_const", "<utility>", cxx17},
+#line 463 "std-name-hint.gperf"
+      {"to_underlying", "<utility>", cxx23},
+#line 116 "std-name-hint.gperf"
+      {"unwrap_reference_t", "<functional>", cxx20},
+#line 427 "std-name-hint.gperf"
+      {"bad_typeid", "<typeinfo>", cxx98},
+#line 115 "std-name-hint.gperf"
+      {"unwrap_reference", "<functional>", cxx20},
+#line 172 "std-name-hint.gperf"
+      {"advance", "<iterator>", cxx98},
+#line 308 "std-name-hint.gperf"
+      {"span", "<span>", cxx20},
+#line 234 "std-name-hint.gperf"
+      {"pmr::monotonic_buffer_resource", "<memory_resource>", cxx17},
+#line 297 "std-name-hint.gperf"
+      {"counting_semaphore", "<semaphore>", cxx20},
+#line 150 "std-name-hint.gperf"
+      {"oct", "<ios>", cxx98},
+#line 289 "std-name-hint.gperf"
+      {"queue", "<queue>", cxx98},
+#line 160 "std-name-hint.gperf"
+      {"cerr", "<iostream>", cxx98},
+#line 176 "std-name-hint.gperf"
+      {"end", "<iterator>", cxx11},
+#line 189 "std-name-hint.gperf"
+      {"list", "<list>", cxx98},
+#line 385 "std-name-hint.gperf"
+      {"is_error_code_enum_v", "<system_error>", cxx17},
+#line 418 "std-name-hint.gperf"
+      {"remove_cvref", "<type_traits>", cxx20},
+#line 387 "std-name-hint.gperf"
+      {"is_error_condition_enum_v", "<system_error>", cxx17},
+#line 240 "std-name-hint.gperf"
+      {"pmr::unsynchronized_pool_resource", "<memory_resource>", cxx17},
+#line 382 "std-name-hint.gperf"
+      {"error_condition", "<system_error>", cxx11},
+#line 224 "std-name-hint.gperf"
+      {"uninitialized_construct_using_allocator", "<memory>", cxx20},
+#line 94 "std-name-hint.gperf"
+      {"forward_list", "<forward_list>", cxx11},
+#line 412 "std-name-hint.gperf"
+      {"enable_if", "<type_traits>", cxx11},
+#line 221 "std-name-hint.gperf"
       {"shared_ptr", "<memory>", cxx11},
-#line 42 "std-name-hint.gperf"
-      {"any", "<any>", cxx17},
-#line 175 "std-name-hint.gperf"
-      {"multimap", "<map>", cxx98},
-#line 46 "std-name-hint.gperf"
-      {"array", "<array>", cxx11},
-#line 136 "std-name-hint.gperf"
-      {"cin", "<iostream>", cxx98},
-#line 238 "std-name-hint.gperf"
-      {"basic_string_view", "<string_view>", cxx17},
-#line 168 "std-name-hint.gperf"
+#line 195 "std-name-hint.gperf"
+      {"align", "<memory>", cxx11},
+#line 451 "std-name-hint.gperf"
+      {"in_range", "<utility>", cxx20},
+#line 60 "std-name-hint.gperf"
+      {"strong_ordering", "<compare>", cxx20},
+#line 348 "std-name-hint.gperf"
+      {"underflow_error", "<stdexcept>", cxx98},
+#line 272 "std-name-hint.gperf"
+      {"numbers::sqrt2_v", "<numbers>", cxx20},
+#line 273 "std-name-hint.gperf"
+      {"numbers::sqrt3_v", "<numbers>", cxx20},
+#line 89 "std-name-hint.gperf"
+      {"terminate", "<exception>", cxx98},
+#line 201 "std-name-hint.gperf"
+      {"allocator_traits", "<memory>", cxx11},
+#line 384 "std-name-hint.gperf"
+      {"is_error_code_enum", "<system_error>", cxx11},
+#line 194 "std-name-hint.gperf"
+      {"addressof", "<memory>", cxx11},
+#line 386 "std-name-hint.gperf"
+      {"is_error_condition_enum", "<system_error>", cxx11},
+#line 421 "std-name-hint.gperf"
+      {"type_identity_t", "<type_traits>", cxx20},
+#line 331 "std-name-hint.gperf"
+      {"stringstream", "<sstream>", cxx98},
+#line 279 "std-name-hint.gperf"
       {"emit_on_flush", "<ostream>", cxx20},
+#line 437 "std-name-hint.gperf"
+      {"cmp_greater", "<utility>", cxx20},
+#line 343 "std-name-hint.gperf"
+      {"logic_error", "<stdexcept>", cxx98},
+#line 130 "std-name-hint.gperf"
+      {"setfill", "<iomanip>", cxx98},
+#line 332 "std-name-hint.gperf"
+      {"wistringstream", "<sstream>", cxx98},
+#line 164 "std-name-hint.gperf"
+      {"wcerr", "<iostream>", cxx98},
+#line 225 "std-name-hint.gperf"
+      {"unique_ptr", "<memory>", cxx11},
+#line 374 "std-name-hint.gperf"
+      {"wstring", "<string>", cxx98},
+#line 270 "std-name-hint.gperf"
+      {"numbers::phi_v", "<numbers>", cxx20},
+#line 236 "std-name-hint.gperf"
+      {"pmr::polymorphic_allocator", "<memory_resource>", cxx17},
+#line 211 "std-name-hint.gperf"
+      {"enable_shared_from_this", "<memory>", cxx11},
+#line 377 "std-name-hint.gperf"
+      {"string_view", "<string_view>", cxx17},
+#line 354 "std-name-hint.gperf"
+      {"basic_streambuf", "<streambuf>", cxx98},
 #line 180 "std-name-hint.gperf"
-      {"make_shared", "<memory>", cxx11},
-#line 44 "std-name-hint.gperf"
+      {"istreambuf_iterator", "<iterator>", cxx98},
+#line 245 "std-name-hint.gperf"
+      {"mutex", "<mutex>", cxx11},
+#line 45 "std-name-hint.gperf"
       {"make_any", "<any>", cxx17},
-#line 172 "std-name-hint.gperf"
-      {"list", "<list>", cxx98},
-#line 226 "std-name-hint.gperf"
-      {"ostringstream", "<sstream>", cxx98},
-#line 47 "std-name-hint.gperf"
-      {"to_array", "<array>", cxx20},
-#line 150 "std-name-hint.gperf"
-      {"distance", "<iterator>", cxx98},
-#line 197 "std-name-hint.gperf"
-      {"lock_guard", "<mutex>", cxx11},
-#line 111 "std-name-hint.gperf"
-      {"boolalpha", "<ios>", cxx98},
-#line 59 "std-name-hint.gperf"
-      {"strong_ordering", "<compare>", cxx20},
-#line 196 "std-name-hint.gperf"
-      {"try_lock", "<mutex>", cxx11},
-#line 267 "std-name-hint.gperf"
-      {"disjunction", "<type_traits>", cxx17},
-#line 268 "std-name-hint.gperf"
-      {"disjunction_v", "<type_traits>", cxx17},
+#line 424 "std-name-hint.gperf"
+      {"type_index", "<typeindex>", cxx11},
+#line 204 "std-name-hint.gperf"
+      {"const_pointer_cast", "<memory>", cxx11},
+#line 359 "std-name-hint.gperf"
+      {"char_traits", "<string>", cxx98},
+#line 132 "std-name-hint.gperf"
+      {"setprecision", "<iomanip>", cxx98},
+#line 203 "std-name-hint.gperf"
+      {"bad_weak_ptr", "<memory>", cxx11},
+#line 317 "std-name-hint.gperf"
+      {"spanbuf", "<spanstream>", cxx23},
+#line 414 "std-name-hint.gperf"
+      {"invoke_result", "<type_traits>", cxx17},
+#line 104 "std-name-hint.gperf"
+      {"bind", "<functional>", cxx11},
+#line 415 "std-name-hint.gperf"
+      {"invoke_result_t", "<type_traits>", cxx17},
+#line 185 "std-name-hint.gperf"
+      {"ostreambuf_iterator", "<iterator>", cxx98},
+#line 161 "std-name-hint.gperf"
+      {"cin", "<iostream>", cxx98},
+#line 436 "std-name-hint.gperf"
+      {"cmp_equal", "<utility>", cxx20},
+#line 198 "std-name-hint.gperf"
+      {"allocator", "<memory>", cxx98},
+#line 162 "std-name-hint.gperf"
+      {"clog", "<iostream>", cxx98},
+#line 441 "std-name-hint.gperf"
+      {"cmp_not_equal", "<utility>", cxx20},
+#line 291 "std-name-hint.gperf"
+      {"ranges::enable_borrowed_range", "<ranges>", cxx20},
+#line 282 "std-name-hint.gperf"
+      {"flush", "<ostream>", cxx98},
+#line 254 "std-name-hint.gperf"
+      {"bad_alloc", "<new>", cxx98},
+#line 457 "std-name-hint.gperf"
+      {"make_pair", "<utility>", cxx98},
+#line 318 "std-name-hint.gperf"
+      {"spanstream", "<spanstream>", cxx23},
 #line 67 "std-name-hint.gperf"
-      {"byte", "<cstddef>", cxx17},
-#line 115 "std-name-hint.gperf"
-      {"showpoint", "<ios>", cxx98},
-#line 64 "std-name-hint.gperf"
       {"condition_variable", "<condition_variable>", cxx11},
-#line 129 "std-name-hint.gperf"
-      {"hex", "<ios>", cxx98},
-#line 141 "std-name-hint.gperf"
-      {"wcout", "<iostream>", cxx98},
-#line 222 "std-name-hint.gperf"
-      {"basic_istringstream", "<sstream>", cxx98},
-#line 169 "std-name-hint.gperf"
-      {"noemit_on_flush", "<ostream>", cxx20},
 #line 125 "std-name-hint.gperf"
-      {"internal", "<ios>", cxx98},
-#line 140 "std-name-hint.gperf"
-      {"wcin", "<iostream>", cxx98},
-#line 234 "std-name-hint.gperf"
-      {"u8string", "<string>", cxx20},
-#line 56 "std-name-hint.gperf"
-      {"strong_equality", "<compare>", cxx20},
+      {"put_money", "<iomanip>", cxx11},
+#line 44 "std-name-hint.gperf"
+      {"any_cast", "<any>", cxx17},
+#line 468 "std-name-hint.gperf"
+      {"monostate", "<variant>", cxx17},
 #line 62 "std-name-hint.gperf"
-      {"complex_literals", "<complex>", cxx14},
-#line 194 "std-name-hint.gperf"
-      {"lock", "<mutex>", cxx11},
-#line 189 "std-name-hint.gperf"
-      {"timed_mutex", "<mutex>", cxx11},
-#line 231 "std-name-hint.gperf"
-      {"basic_string", "<string>", cxx98},
-#line 96 "std-name-hint.gperf"
+      {"weak_ordering", "<compare>", cxx20},
+#line 233 "std-name-hint.gperf"
+      {"pmr::memory_resource", "<memory_resource>", cxx17},
+#line 206 "std-name-hint.gperf"
+      {"default_delete", "<memory>", cxx11},
+#line 138 "std-name-hint.gperf"
+      {"fixed", "<ios>", cxx98},
+#line 86 "std-name-hint.gperf"
+      {"exception", "<exception>", cxx98},
+#line 192 "std-name-hint.gperf"
+      {"multimap", "<map>", cxx98},
+#line 302 "std-name-hint.gperf"
+      {"shared_lock", "<shared_mutex>", cxx14},
+#line 448 "std-name-hint.gperf"
+      {"in_place_t", "<utility>", cxx17},
+#line 445 "std-name-hint.gperf"
+      {"in_place", "<utility>", cxx17},
+#line 345 "std-name-hint.gperf"
+      {"overflow_error", "<stdexcept>", cxx98},
+#line 256 "std-name-hint.gperf"
+      {"hardware_destructive_interference_size", "<new>", cxx17},
+#line 447 "std-name-hint.gperf"
+      {"in_place_index_t", "<utility>", cxx17},
+#line 166 "std-name-hint.gperf"
+      {"wclog", "<iostream>", cxx98},
+#line 109 "std-name-hint.gperf"
+      {"invoke_r", "<functional>", cxx23},
+#line 88 "std-name-hint.gperf"
+      {"make_exception_ptr", "<exception>", cxx11},
+#line 344 "std-name-hint.gperf"
+      {"out_of_range", "<stdexcept>", cxx98},
+#line 252 "std-name-hint.gperf"
+      {"unique_lock", "<mutex>", cxx11},
+#line 244 "std-name-hint.gperf"
+      {"lock_guard", "<mutex>", cxx11},
+#line 212 "std-name-hint.gperf"
+      {"get_deleter", "<memory>", cxx11},
+#line 438 "std-name-hint.gperf"
+      {"cmp_greater_equal", "<utility>", cxx20},
+#line 464 "std-name-hint.gperf"
+      {"unreachable", "<utility>", cxx23},
+#line 135 "std-name-hint.gperf"
+      {"boolalpha", "<ios>", cxx98},
+#line 120 "std-name-hint.gperf"
       {"packaged_task", "<future>", cxx11},
+#line 443 "std-name-hint.gperf"
+      {"exchange", "<utility>", cxx14},
+#line 85 "std-name-hint.gperf"
+      {"current_exception", "<exception>", cxx11},
+#line 136 "std-name-hint.gperf"
+      {"dec", "<ios>", cxx98},
+#line 292 "std-name-hint.gperf"
+      {"ranges::enable_view", "<ranges>", cxx20},
+#line 72 "std-name-hint.gperf"
+      {"uint_fast16_t", "<cstdint>", cxx11},
 #line 239 "std-name-hint.gperf"
-      {"string_view", "<string_view>", cxx17},
-#line 225 "std-name-hint.gperf"
-      {"istringstream", "<sstream>", cxx98},
-#line 198 "std-name-hint.gperf"
-      {"unique_lock", "<mutex>", cxx11},
-#line 263 "std-name-hint.gperf"
-      {"type_identity_t", "<type_traits>", cxx20},
-#line 216 "std-name-hint.gperf"
-      {"shared_mutex", "<shared_mutex>", cxx17},
-#line 265 "std-name-hint.gperf"
+      {"pmr::synchronized_pool_resource", "<memory_resource>", cxx17},
+#line 228 "std-name-hint.gperf"
+      {"uses_allocator_v", "<memory>", cxx17},
+#line 227 "std-name-hint.gperf"
+      {"uses_allocator_construction_args", "<memory>", cxx20},
+#line 114 "std-name-hint.gperf"
+      {"unwrap_ref_decay_t", "<functional>", cxx20},
+#line 74 "std-name-hint.gperf"
+      {"uint_fast64_t", "<cstdint>", cxx11},
+#line 53 "std-name-hint.gperf"
+      {"atomic_uintmax_t", "<atomic>", cxx20},
+#line 286 "std-name-hint.gperf"
+      {"wostream", "<ostream>", cxx98},
+#line 73 "std-name-hint.gperf"
+      {"uint_fast32_t", "<cstdint>", cxx11},
+#line 320 "std-name-hint.gperf"
+      {"wospanstream", "<spanstream>", cxx23},
+#line 80 "std-name-hint.gperf"
+      {"uintmax_t", "<cstdint>", cxx11},
+#line 123 "std-name-hint.gperf"
+      {"get_money", "<iomanip>", cxx11},
+#line 52 "std-name-hint.gperf"
+      {"atomic_signed_lock_free", "<atomic>", cxx11},
+#line 246 "std-name-hint.gperf"
+      {"once_flag", "<mutex>", cxx11},
+#line 128 "std-name-hint.gperf"
+      {"resetiosflags", "<iomanip>", cxx98},
+#line 219 "std-name-hint.gperf"
+      {"pointer_traits", "<memory>", cxx11},
+#line 397 "std-name-hint.gperf"
+      {"forward_as_tuple", "<tuple>", cxx11},
+#line 248 "std-name-hint.gperf"
+      {"recursive_timed_mutex", "<mutex>", cxx11},
+#line 118 "std-name-hint.gperf"
+      {"async", "<future>", cxx11},
+#line 226 "std-name-hint.gperf"
+      {"uses_allocator", "<memory>", cxx11},
+#line 51 "std-name-hint.gperf"
+      {"atomic_ref", "<atomic>", cxx20},
+#line 127 "std-name-hint.gperf"
+      {"quoted", "<iomanip>", cxx14},
+#line 152 "std-name-hint.gperf"
+      {"scientific", "<ios>", cxx98},
+#line 50 "std-name-hint.gperf"
+      {"atomic", "<atomic>", cxx11},
+#line 408 "std-name-hint.gperf"
       {"conjunction", "<type_traits>", cxx17},
-#line 266 "std-name-hint.gperf"
+#line 255 "std-name-hint.gperf"
+      {"hardware_constructive_interference_size", "<new>", cxx17},
+#line 444 "std-name-hint.gperf"
+      {"forward", "<utility>", cxx11},
+#line 409 "std-name-hint.gperf"
       {"conjunction_v", "<type_traits>", cxx17},
-#line 217 "std-name-hint.gperf"
-      {"shared_timed_mutex", "<shared_mutex>", cxx14},
-#line 102 "std-name-hint.gperf"
-      {"setfill", "<iomanip>", cxx98},
-#line 236 "std-name-hint.gperf"
-      {"u32string", "<string>", cxx11},
-#line 235 "std-name-hint.gperf"
-      {"u16string", "<string>", cxx11},
-#line 278 "std-name-hint.gperf"
+#line 92 "std-name-hint.gperf"
+      {"expected", "<expected>", cxx23},
+#line 249 "std-name-hint.gperf"
+      {"scoped_lock", "<mutex>", cxx17},
+#line 342 "std-name-hint.gperf"
+      {"length_error", "<stdexcept>", cxx98},
+#line 87 "std-name-hint.gperf"
+      {"exception_ptr", "<exception>", cxx11},
+#line 341 "std-name-hint.gperf"
+      {"invalid_argument", "<stdexcept>", cxx98},
+#line 247 "std-name-hint.gperf"
+      {"recursive_mutex", "<mutex>", cxx11},
+#line 137 "std-name-hint.gperf"
+      {"defaultfloat", "<ios>", cxx11},
+#line 101 "std-name-hint.gperf"
+      {"ifstream", "<fstream>", cxx98},
+#line 461 "std-name-hint.gperf"
+      {"piecewise_construct", "<utility>", cxx11},
+#line 390 "std-name-hint.gperf"
+      {"system_category", "<system_error>", cxx11},
+#line 462 "std-name-hint.gperf"
+      {"piecewise_construct_t", "<utility>", cxx11},
+#line 442 "std-name-hint.gperf"
       {"declval", "<utility>", cxx11},
-#line 91 "std-name-hint.gperf"
-      {"unwrap_ref_decay", "<functional>", cxx20},
-#line 201 "std-name-hint.gperf"
-      {"make_optional", "<optional>", cxx17},
+#line 306 "std-name-hint.gperf"
+      {"source_location", "<source_location>", cxx20},
+#line 454 "std-name-hint.gperf"
+      {"integer_sequence", "<utility>", cxx14},
+#line 208 "std-name-hint.gperf"
+      {"destroy_at", "<memory>", cxx20},
+#line 294 "std-name-hint.gperf"
+      {"scoped_allocator_adaptor", "<scoped_allocator>", cxx11},
+#line 209 "std-name-hint.gperf"
+      {"destroy_n", "<memory>", cxx20},
+#line 210 "std-name-hint.gperf"
+      {"dynamic_pointer_cast", "<memory>", cxx11},
+#line 102 "std-name-hint.gperf"
+      {"ofstream", "<fstream>", cxx98},
+#line 54 "std-name-hint.gperf"
+      {"atomic_unsigned_lock_free", "<atomic>", cxx11},
+#line 319 "std-name-hint.gperf"
+      {"wispanstream", "<spanstream>", cxx23},
+#line 58 "std-name-hint.gperf"
+      {"partial_ordering", "<compare>", cxx20},
+#line 218 "std-name-hint.gperf"
+      {"owner_less", "<memory>", cxx11},
+#line 392 "std-name-hint.gperf"
+      {"jthread", "<thread>", cxx20},
+#line 215 "std-name-hint.gperf"
+      {"make_shared_for_overwrite", "<memory>", cxx20},
+#line 303 "std-name-hint.gperf"
+      {"shared_mutex", "<shared_mutex>", cxx17},
+#line 205 "std-name-hint.gperf"
+      {"construct_at", "<memory>", cxx20},
+#line 175 "std-name-hint.gperf"
+      {"distance", "<iterator>", cxx98},
+#line 304 "std-name-hint.gperf"
+      {"shared_timed_mutex", "<shared_mutex>", cxx14},
+#line 410 "std-name-hint.gperf"
+      {"disjunction", "<type_traits>", cxx17},
+#line 158 "std-name-hint.gperf"
+      {"uppercase", "<ios>", cxx98},
+#line 411 "std-name-hint.gperf"
+      {"disjunction_v", "<type_traits>", cxx17},
+#line 47 "std-name-hint.gperf"
+      {"array", "<array>", cxx11},
+#line 284 "std-name-hint.gperf"
+      {"noemit_on_flush", "<ostream>", cxx20},
+#line 65 "std-name-hint.gperf"
+      {"complex_literals", "<complex>", cxx14},
+#line 340 "std-name-hint.gperf"
+      {"domain_error", "<stdexcept>", cxx98},
 #line 200 "std-name-hint.gperf"
-      {"optional", "<optional>", cxx17},
-#line 84 "std-name-hint.gperf"
+      {"allocator_arg_t", "<memory>", cxx11},
+#line 141 "std-name-hint.gperf"
+      {"internal", "<ios>", cxx98},
+#line 75 "std-name-hint.gperf"
+      {"uint_fast8_t", "<cstdint>", cxx11},
+#line 296 "std-name-hint.gperf"
+      {"binary_semaphore", "<semaphore>", cxx20},
+#line 140 "std-name-hint.gperf"
+      {"hexfloat", "<ios>", cxx11},
+#line 107 "std-name-hint.gperf"
       {"hash", "<functional>", cxx11},
-#line 166 "std-name-hint.gperf"
-      {"flush", "<ostream>", cxx98},
-#line 206 "std-name-hint.gperf"
-      {"flush", "<ostream>", cxx98},
-#line 244 "std-name-hint.gperf"
-      {"apply", "<tuple>", cxx17},
+#line 420 "std-name-hint.gperf"
+      {"type_identity", "<type_traits>", cxx20},
+#line 197 "std-name-hint.gperf"
+      {"allocate_shared_for_overwrite", "<memory>", cxx20},
+#line 350 "std-name-hint.gperf"
+      {"stop_callback", "<stop_token>", cxx20},
+#line 139 "std-name-hint.gperf"
+      {"hex", "<ios>", cxx98},
+#line 48 "std-name-hint.gperf"
+      {"to_array", "<array>", cxx20},
+#line 380 "std-name-hint.gperf"
+      {"error_category", "<system_error>", cxx11},
+#line 440 "std-name-hint.gperf"
+      {"cmp_less_equal", "<utility>", cxx20},
+#line 43 "std-name-hint.gperf"
+      {"any", "<any>", cxx17},
+#line 68 "std-name-hint.gperf"
+      {"condition_variable_any", "<condition_variable>", cxx11},
+#line 383 "std-name-hint.gperf"
+      {"generic_category", "<system_error>", cxx11},
+#line 450 "std-name-hint.gperf"
+      {"in_place_type_t", "<utility>", cxx17},
+#line 449 "std-name-hint.gperf"
+      {"in_place_type", "<utility>", cxx17},
+#line 446 "std-name-hint.gperf"
+      {"in_place_index", "<utility>", cxx17},
+#line 467 "std-name-hint.gperf"
+      {"holds_alternative", "<variant>", cxx17},
+#line 199 "std-name-hint.gperf"
+      {"allocator_arg", "<memory>", cxx11},
+#line 90 "std-name-hint.gperf"
+      {"uncaught_exceptions", "<exception>", cxx17},
+#line 214 "std-name-hint.gperf"
+      {"make_shared", "<memory>", cxx11},
+#line 113 "std-name-hint.gperf"
+      {"unwrap_ref_decay", "<functional>", cxx20},
+#line 59 "std-name-hint.gperf"
+      {"strong_equality", "<compare>", cxx20},
+#line 202 "std-name-hint.gperf"
+      {"assume_aligned", "<memory>", cxx20},
 #line 61 "std-name-hint.gperf"
-      {"complex", "<complex>", cxx98},
-#line 242 "std-name-hint.gperf"
+      {"weak_equality", "<compare>", cxx20},
+#line 393 "std-name-hint.gperf"
       {"this_thread", "<thread>", cxx11},
-#line 177 "std-name-hint.gperf"
+#line 250 "std-name-hint.gperf"
+      {"timed_mutex", "<mutex>", cxx11},
+#line 277 "std-name-hint.gperf"
+      {"optional", "<optional>", cxx17},
+#line 196 "std-name-hint.gperf"
       {"allocate_shared", "<memory>", cxx11},
-#line 132 "std-name-hint.gperf"
-      {"scientific", "<ios>", cxx98},
-#line 192 "std-name-hint.gperf"
-      {"once_flag", "<mutex>", cxx11},
-#line 106 "std-name-hint.gperf"
-      {"put_money", "<iomanip>", cxx11},
-#line 105 "std-name-hint.gperf"
-      {"get_money", "<iomanip>", cxx11},
-#line 195 "std-name-hint.gperf"
-      {"scoped_lock", "<mutex>", cxx17},
-#line 58 "std-name-hint.gperf"
-      {"weak_ordering", "<compare>", cxx20},
-#line 55 "std-name-hint.gperf"
-      {"weak_equality", "<compare>", cxx20},
-#line 215 "std-name-hint.gperf"
-      {"shared_lock", "<shared_mutex>", cxx14},
-#line 50 "std-name-hint.gperf"
-      {"atomic_flag", "<atomic>", cxx11},
-#line 142 "std-name-hint.gperf"
-      {"wclog", "<iostream>", cxx98},
-#line 65 "std-name-hint.gperf"
-      {"condition_variable_any", "<condition_variable>", cxx11},
-#line 139 "std-name-hint.gperf"
-      {"clog", "<iostream>", cxx98},
-#line 262 "std-name-hint.gperf"
-      {"type_identity", "<type_traits>", cxx20},
-#line 233 "std-name-hint.gperf"
-      {"wstring", "<string>", cxx98},
-#line 57 "std-name-hint.gperf"
-      {"partial_ordering", "<compare>", cxx20}
+#line 207 "std-name-hint.gperf"
+      {"destroy", "<memory>", cxx20},
+#line 396 "std-name-hint.gperf"
+      {"apply", "<tuple>", cxx17},
+#line 64 "std-name-hint.gperf"
+      {"complex", "<complex>", cxx98},
+#line 143 "std-name-hint.gperf"
+      {"noboolalpha", "<ios>", cxx98}
     };
 
   static const short lookup[] =
     {
         -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,    0,   -1,   -1,   -1,    1,   -1,    2,
-        -1,    3,   -1, -228,   -1,    6, -201,   -2,
-        -1,    7,    8,   -1,    9,   -1,   -1,   -1,
-        -1,   -1,   -1,   10,   11,   -1,   -1,   12,
-        -1,   13,   -1,   14,   15,   -1,   16,   -1,
-        17,   -1,   -1,   18,   19,   20,   -1,   21,
-        -1,   22,   -1,   -1,   23,   24, -287,   -1,
-        27,   28,   29,   30,   31,   -1,   32,   -1,
-        33,   34,   35,   36,   37,   -1,   38,   -1,
-        39, -180,   -2,   -1,   -1,   -1,   40,   -1,
-        41,   -1,   -1,   -1,   -1,   42,   43,   -1,
-        44,   45,   46,   -1,   47,   -1,   48,   49,
-        50,   51,   52,   53,   -1,   -1,   54,   -1,
-        -1,   55,   56,   57,   58,   -1,   59,   -1,
-        60,   61,   -1,   62,   -1,   63,   64,   -1,
-        65,   -1,   -1,   -1,   66,   -1,   -1,   67,
-        68,   69,   70,   -1,   -1,   71,   -1,   -1,
-        72,   -1,   73,   -1,   -1,   74,   75,   -1,
-        -1,   76,   -1,   77,   78,   79,   -1,   80,
-        81,   -1,   -1,   -1,   -1,   82,   -1,   -1,
-        83,   -1,   -1,   84,   -1,   85,   86,   87,
-        -1,   88,   89,   -1,   90,   -1,   -1,   91,
-        92,   93,   -1,   94,   95,   96,   -1,   97,
-      -403,  100,  101,   -1,  102, -107,   -2,  103,
-        -1,   -1,   -1,  104,  105,  106,  107,   -1,
-        -1,   -1,   -1,  108,   -1,  109,  110,  111,
-       112,  113,  114,  115,   -1,   -1,  116,  117,
-        -1,   -1,   -1,  118,  119,  120,   -1,   -1,
-        -1,   -1,  121,   -1,  122,   -1,  123,  124,
-       125,  126,   -1,  127,  128,   -1,   -1,   -1,
-       129,   -1,   -1,   -1,   -1,  130,  131,   -1,
-        -1,   -1,  132,   -1,  133,   -1,  134,  135,
-       136,   -1,   -1,   -1,  137,   -1,  138,   -1,
-        -1,  139,   -1,   -1,  140,  141,   -1,   -1,
-        -1,   -1,  142,  143,   -1,   -1,   -1,  144,
-       145,   -1,   -1,   -1,   -1,  146,  147,  148,
-        -1,   -1,  149,   -1,   -1,  150,  151,  152,
-       153,   -1,   -1,  154,  155,   -1,   -1,   -1,
-        -1,  156,  157,  158,  159,  160,  161,   -1,
-        -1,   -1,   -1,   -1,  162,   -1,   -1,   -1,
-        -1,   -1,   -1,  163,  164,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,  165,  166,  167,   -1,   -1,   -1,
-       168,  169,   -1,   -1,  170,   -1,   -1,  171,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,  172,   -1,   -1,   -1,
-       173,  174,  175,   -1,   -1,   -1,   -1,  176,
-       177,   -1,   -1,   -1,   -1,  178,   -1,   -1,
-        -1,  179,   -1,  180,   -1,   -1,   -1,   -1,
-        -1,  181,   -1,   -1,   -1,   -1,  182,   -1,
-        -1,  183,   -1,   -1,   -1, -620,  -21,   -2,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       186,   -1,   -1,  187,   -1,   -1,   -1,  188,
-        -1,  189,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,  190,   -1,  191,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,  192,
-        -1,   -1,   -1,   -1,  193,   -1,   -1,  194,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,  195,   -1,   -1,   -1,  196,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-       197,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,  198,   -1,   -1,   -1,   -1,
-        -1,   -1,  199,   -1,  200,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,  201,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,  202,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,  203,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
-        -1,   -1,  204
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,    0,   -1,    1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,    2,   -1,    3,    4,   -1,
+         5,   -1,   -1,    6,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,    7,   -1,   -1,    8,   -1,
+        -1,   -1,   -1,    9,   10,   -1,   11,   12,
+        13,   14,   15,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   16,   -1,   -1,   17,   18,   -1,
+        19,   20,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   21,   22,   23,   -1,   -1, -474, -354,
+        -2,   -1,   -1,   -1,   -1,   26,   -1,   -1,
+        -1,   27,   28,   -1,   29,   -1,   30,   -1,
+        31,   -1,   -1,   32,   33,   -1,   34,   -1,
+        35,   36,   -1,   -1,   37,   38,   39,   40,
+        -1,   41,   -1,   42,   -1,   43,   -1,   -1,
+        44,   -1,   45,   46,   47,   -1,   -1,   -1,
+        48,   -1,   -1,   49,   50,   51, -530, -326,
+        -2,   54,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   55,   56,   -1,   57,   -1,   -1,   -1,
+        58,   59,   60,   -1,   -1,   61,   -1,   -1,
+        -1,   -1,   62,   -1,   -1,   63,   -1,   64,
+        -1,   65,   -1,   -1,   66,   67,   -1,   68,
+        -1,   -1,   69,   -1,   -1,   70,   71,   -1,
+        -1,   -1,   72,   -1,   -1,   73,   -1,   -1,
+        -1,   74,   -1,   75,   76,   -1,   -1,   -1,
+        77,   -1,   -1,   78,   -1,   79,   -1,   -1,
+        -1,   -1,   80,   81,   82,   83,   -1,   84,
+        85,   -1,   -1,   -1, -649,   -1,   88,   89,
+        90,   91,   -1,   92,   93, -637,   96,   97,
+        98,   99,  100,  101,   -1,  102,   -1,  103,
+        -1,  104, -284,   -2,  105,  106,  107,   -1,
+       108,   -1,  109,   -1,  110,  111, -292,   -2,
+       112,  113,  114,   -1,   -1,   -1,   -1,  115,
+        -1,  116,  117,   -1,  118,   -1,  119,   -1,
+       120,   -1,   -1,  121,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  122,   -1,   -1,   -1,   -1,
+       123,   -1,   -1,  124,   -1,  125,   -1,  126,
+       127,   -1,   -1,   -1,  128,   -1,  129,   -1,
+        -1,   -1,   -1,   -1,  130,  131,   -1,   -1,
+        -1,   -1,  132,   -1,   -1,   -1,  133,   -1,
+        -1,  134,   -1,   -1,   -1,   -1,   -1,   -1,
+       135,   -1,  136,  137,  138,  139,  140,   -1,
+        -1,   -1,  141,   -1,   -1,  142,   -1,   -1,
+        -1,   -1,  143,   -1,   -1,  144,   -1,  145,
+        -1,  146,  147,  148,   -1,   -1,   -1,   -1,
+        -1,   -1,  149,  150,   -1,   -1,   -1,  151,
+        -1,   -1,   -1,  152,   -1,  153,   -1, -775,
+        -1,  156,   -1,  157, -224,   -2,  158,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  159,   -1,   -1,
+        -1,  160,  161,  162,   -1,  163,   -1,  164,
+        -1,   -1,   -1,   -1,   -1,   -1,  165,  166,
+       167,   -1,  168,  169,  170,  171,  172,  173,
+        -1,  174,  175,  176,   -1,   -1,  177,   -1,
+       178,   -1,  179,  180,  181,   -1,  182,  183,
+        -1,   -1,   -1,   -1,   -1,  184,   -1,  185,
+        -1,  186,   -1,  187,  188,  189,  190,   -1,
+       191,   -1,   -1,  192,  193,   -1,  194,  195,
+        -1,   -1,  196,   -1,  197,  198,   -1,   -1,
+        -1,   -1,  199,  200,   -1,  201,   -1,  202,
+      -876, -175,   -2,  205,   -1,  206,   -1,  207,
+       208,   -1,   -1,   -1,  209,   -1,  210,   -1,
+       211,  212,  213,   -1,  214,  215,  216,  217,
+       218,   -1,   -1,   -1,   -1,   -1,   -1,  219,
+        -1,  220,   -1,  221,   -1,  222,  223,  224,
+        -1,   -1,   -1,  225,  226,  227,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  228,  229,
+        -1,   -1,  230,  231,   -1,  232,   -1,   -1,
+        -1,   -1,  233,  234,  235,  236,   -1,   -1,
+        -1,  237,   -1,  238,  239,   -1,  240,  241,
+       242,   -1,   -1,  243,   -1,   -1,   -1,   -1,
+        -1,  244,   -1,  245,   -1,  246,  247,  248,
+        -1,   -1,   -1,   -1,   -1,  249,  250,  251,
+       252,   -1,   -1,  253,  254,  255,   -1,  256,
+       257,   -1,   -1,  258,   -1,  259,   -1,   -1,
+       260,   -1,  261,   -1,   -1,   -1,   -1,  262,
+       263,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       264,  265,   -1,   -1,   -1,   -1,  266,   -1,
+        -1,   -1,   -1,   -1,   -1,  267,  268,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  269,
+        -1,   -1,   -1,  270,  271,  272,   -1,   -1,
+       273,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  274,   -1,   -1,   -1,   -1,   -1,  275,
+        -1,   -1,   -1,  276,   -1,   -1,  277,   -1,
+       278,   -1,   -1,   -1,   -1,  279,  280,   -1,
+       281,   -1,   -1,   -1,   -1,   -1,  282,  283,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  284,   -1,   -1,  285,  286,  287,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  288,   -1,
+        -1,  289,  290,   -1,   -1,  291,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  292,  293,
+       294,   -1,  295,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  296,   -1,  297,   -1,
+        -1,   -1,   -1,   -1,  298,  299,  300,   -1,
+       301,  302,   -1,   -1,  303,   -1,  304,   -1,
+        -1,  305,   -1,   -1,   -1,   -1,   -1,   -1,
+       306,   -1,  307,   -1,   -1,   -1,   -1,  308,
+       309,   -1,   -1,   -1,  310,   -1,   -1,  311,
+       312,   -1,  313,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  314,  315,  316,  317,   -1,
+        -1,  318,   -1,   -1,  319,   -1,   -1,   -1,
+        -1,   -1,  320,   -1,   -1,   -1,   -1,   -1,
+        -1,  321,  322,   -1,   -1,  323,  324,   -1,
+        -1,  325,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  326,
+        -1,   -1,   -1,   -1,   -1,  327,   -1,   -1,
+       328,  329,   -1,  330,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  331,   -1,  332,   -1,   -1,
+       333,  334,   -1,  335,   -1,   -1,   -1,   -1,
+        -1,  336,   -1,   -1,   -1,   -1,  337,   -1,
+        -1,   -1,   -1,   -1,   -1,  338,   -1,  339,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  340,   -1,   -1,   -1,  341,
+        -1,   -1,  342,   -1,   -1,  343,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  344,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+       345,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  346,   -1,
+       347,  348,   -1,  349,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  350,   -1,   -1,
+        -1,  351,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  352,   -1,   -1,  353,   -1,
+       354,   -1,   -1,   -1,  355,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  356,   -1,  357,   -1,  358,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  359,   -1,   -1,  360,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  361,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  362,   -1,   -1,
+        -1,  363,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,  364,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  365,   -1,   -1,  366,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  367,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  368,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,  369,  370,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,  371,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  372,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  373,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,  374,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,  375,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,  376,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
+        -1,   -1,   -1,  377
     };
 
   if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
--- /dev/null	2022-10-17 14:59:39.320142690 +0200
+++ b/gcc/cp/cxxapi-data.csv	2022-10-18 12:56:22.964726263 +0200
@@ -0,0 +1,1032 @@
+# C++ API data.
+#
+# Copyright (C) 2022 Free Software Foundation
+# This file is part of GCC.
+#
+# This file 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 of the License, or
+# (at your option) any later version.
+#
+# This program 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 program; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+#
+# This file can be processed with gen-cxxapi-file.py to create the
+# export list for the standard C++ library module and the tables for
+# suggesting actions on missing symbols in the std:: namespace.
+#
+# The generated code is integral part of the C++ frontend but the
+# content of this file is consists of information solely in the
+# domain of the libstdc++ maintainers.  Therefore ownership of
+# this file is shared between these two groups.
+#
+# The format of this file must match what the gen-cxxapi-file.py
+# script expects.
+#  column  value
+#       1  header file, including angle brackets
+#       2  symbol name without std:: prefix
+#       3  nonzero if to be exported
+#       4  "no" if not to be added to the hint table else the appropriate
+#          enum cxx_dialect value
+#       5  optional, a string used after #if in a line inserted first to
+#          enable conditional definitions
+#
+<algorithm>,ranges::in_fun_result,1,no
+<algorithm>,ranges::in_in_result,1,no
+<algorithm>,ranges::in_out_result,1,no
+<algorithm>,ranges::in_in_out_result,1,no
+<algorithm>,ranges::in_out_out_result,1,no
+<algorithm>,ranges::min_max_result,1,no
+<algorithm>,ranges::in_found_result,1,no
+# unimplemented <algorithm>,ranges::out_value_result,1,no
+<algorithm>,all_of,1,no
+# c++/106851 <algorithm>,ranges::all_of,1,no
+<algorithm>,any_of,1,no
+# c++/106851 <algorithm>,ranges::any_of,1,no
+<algorithm>,none_of,1,no
+# c++/106851 <algorithm>,ranges::none_of,1,no
+<algorithm>,for_each,1,no
+<algorithm>,ranges::for_each_result,1,no
+# c++/106851 <algorithm>,ranges::for_each,1,no
+<algorithm>,for_each_n,1,no
+<algorithm>,ranges::for_each_n_result,1,no
+# c++/106851 <algorithm>,ranges::for_each_n,1,no
+<algorithm>,find,1,no
+<algorithm>,find_if,1,no
+<algorithm>,find_if_not,1,no
+# c++/106851 <algorithm>,ranges::find,1,no
+# c++/106851 <algorithm>,ranges::find_if,1,no
+# c++/106851 <algorithm>,ranges::find_if_not,1,no
+<algorithm>,find_end,1,no
+# c++/106851 <algorithm>,ranges::find_end,1,no
+<algorithm>,find_first_of,1,no
+# c++/106851 <algorithm>,ranges::find_first_of,1,no
+<algorithm>,adjacent_find,1,no
+# c++/106851 <algorithm>,ranges::adjacent_find,1,no
+<algorithm>,count,1,no
+<algorithm>,count_if,1,no
+# c++/106851 <algorithm>,ranges::count,1,no
+# c++/106851 <algorithm>,ranges::count_if,1,no
+<algorithm>,mismatch,1,no
+<algorithm>,ranges::mismatch_result,1,no
+# c++/106851 <algorithm>,ranges::mismatch,1,no
+<algorithm>,equal,1,no
+# c++/106851 <algorithm>,ranges::equal,1,no
+<algorithm>,is_permutation,1,no
+# c++/106851 <algorithm>,ranges::is_permutation,1,no
+<algorithm>,search,1,no
+# c++/106851 <algorithm>,ranges::search,1,no
+<algorithm>,search_n,1,no
+# c++/106851 <algorithm>,ranges::search_n,1,no
+# unimplemented <algorithm>,ranges::starts_with,1,no
+# unimplemented <algorithm>,ranges::ends_with,1,no
+<algorithm>,copy,1,no
+<algorithm>,ranges::copy_result,1,no
+# c++/106851 <algorithm>,ranges::copy,1,no
+<algorithm>,copy_n,1,no
+<algorithm>,ranges::copy_n_result,1,no
+# c++/106851 <algorithm>,ranges::copy_n,1,no
+<algorithm>,copy_if,1,no
+<algorithm>,ranges::copy_if_result,1,no
+# c++/106851 <algorithm>,ranges::copy_if,1,no
+<algorithm>,copy_backward,1,no
+<algorithm>,ranges::copy_backward_result,1,no
+# c++/106851 <algorithm>,ranges::copy_backward,1,no
+<algorithm>,move,1,no
+<algorithm>,ranges::move_result,1,no
+# c++/106851 <algorithm>,ranges::move,1,no
+<algorithm>,move_backward,1,no
+<algorithm>,ranges::move_backward_result,1,no
+# c++/106851 <algorithm>,ranges::move_backward,1,no
+# <algorithm> TODO the rest
+<any>,bad_any_cast,1,no
+<any>,any,1,cxx17
+<any>,swap,1,no
+<any>,make_any,1,cxx17
+<any>,any_cast,1,cxx17
+<array>,array,1,cxx11
+<array>,operator==,1,no
+<array>,operator<=>,1,no
+<array>,swap,1,no
+<array>,to_array,1,cxx20
+<array>,tuple_size,1,no
+<array>,tuple_element,1,no
+<array>,get,1,no
+<atomic>,memory_order,1,no
+<atomic>,kill_dependency,1,no
+<atomic>,atomic_ref,1,cxx20
+<atomic>,atomic,1,cxx11
+<atomic>,atomic_is_lock_free,1,no
+<atomic>,atomic_store,1,no
+<atomic>,atomic_store_explicit,1,no
+<atomic>,atomic_load,1,no
+<atomic>,atomic_load_explicit,1,no
+<atomic>,atomic_exchange,1,no
+<atomic>,atomic_exchange_explicit,1,no
+<atomic>,atomic_compare_exchange_weak,1,no
+<atomic>,atomic_compare_exchange_strong,1,no
+<atomic>,atomic_compare_exchange_weak_explicit,1,no
+<atomic>,atomic_compare_exchange_strong_explicit,1,no
+<atomic>,atomic_fetch_add,1,no
+<atomic>,atomic_fetch_add_explicit,1,no
+<atomic>,atomic_fetch_sub,1,no
+<atomic>,atomic_fetch_sub_explicit,1,no
+<atomic>,atomic_fetch_and,1,no
+<atomic>,atomic_fetch_and_explicit,1,no
+<atomic>,atomic_fetch_or,1,no
+<atomic>,atomic_fetch_or_explicit,1,no
+<atomic>,atomic_fetch_xor,1,no
+<atomic>,atomic_fetch_xor_explicit,1,no
+<atomic>,atomic_wait,1,no
+<atomic>,atomic_wait_explicit,1,no
+<atomic>,atomic_notify_one,1,no
+<atomic>,atomic_notify_all,1,no
+<atomic>,atomic_notify_all,1,no
+<atomic>,atomic_bool,1,no
+<atomic>,atomic_char,1,no
+<atomic>,atomic_schar,1,no
+<atomic>,atomic_uchar,1,no
+<atomic>,atomic_short,1,no
+<atomic>,atomic_ushort,1,no
+<atomic>,atomic_int,1,no
+<atomic>,atomic_uint,1,no
+<atomic>,atomic_long,1,no
+<atomic>,atomic_ulong,1,no
+<atomic>,atomic_llong,1,no
+<atomic>,atomic_ullong,1,no
+<atomic>,atomic_char8_t,1,no
+<atomic>,atomic_char16_t,1,no
+<atomic>,atomic_char32_t,1,no
+<atomic>,atomic_wchar_t,1,no
+<atomic>,atomic_int8_t,1,no
+<atomic>,atomic_uint8_t,1,no
+<atomic>,atomic_int16_t,1,no
+<atomic>,atomic_uint16_t,1,no
+<atomic>,atomic_int32_t,1,no
+<atomic>,atomic_uint32_t,1,no
+<atomic>,atomic_int64_t,1,no
+<atomic>,atomic_uint64_t,1,no
+<atomic>,atomic_int_least8_t,1,no
+<atomic>,atomic_uint_least8_t,1,no
+<atomic>,atomic_int_least16_t,1,no
+<atomic>,atomic_uint_least16_t,1,no
+<atomic>,atomic_int_least32_t,1,no
+<atomic>,atomic_uint_least32_t,1,no
+<atomic>,atomic_int_least64_t,1,no
+<atomic>,atomic_uint_least64_t,1,no
+<atomic>,atomic_int_fast8_t,1,no
+<atomic>,atomic_uint_fast8_t,1,no
+<atomic>,atomic_int_fast16_t,1,no
+<atomic>,atomic_uint_fast16_t,1,no
+<atomic>,atomic_int_fast32_t,1,no
+<atomic>,atomic_uint_fast32_t,1,no
+<atomic>,atomic_int_fast64_t,1,no
+<atomic>,atomic_uint_fast64_t,1,no
+<atomic>,atomic_intptr_t,1,no
+<atomic>,atomic_uintptr_t,1,no
+<atomic>,atomic_size_t,1,no
+<atomic>,atomic_ptrdiff_t,1,no
+<atomic>,atomic_intmax_t,1,no
+<atomic>,atomic_uintmax_t,1,no
+<atomic>,atomic_uintmax_t,1,cxx20
+<atomic>,atomic_signed_lock_free,1,cxx11,__cpp_lib_atomic_lock_free_type_aliases
+<atomic>,atomic_unsigned_lock_free,1,cxx11,__cpp_lib_atomic_lock_free_type_aliases
+# libstdc++/103934 <atomic>,atomic_flag_test,1,no
+# libstdc++/103934 <atomic>,atomic_flag_test_explicit,1,no
+<atomic>,atomic_flag_test_and_set,1,no
+<atomic>,atomic_flag_test_and_set_explicit,1,no
+<atomic>,atomic_flag_clear,1,no
+<atomic>,atomic_flag_clear_explicit,1,no
+# libstdc++/103934 <atomic>,atomic_flag_wait,1,no
+# libstdc++/103934 <atomic>,atomic_flag_wait_explicit,1,no
+# libstdc++/103934 <atomic>,atomic_flag_notify_one,1,no
+# libstdc++/103934 <atomic>,atomic_flag_notify_all,1,no
+<atomic>,atomic_thread_fence,1,no
+<atomic>,atomic_signal_fence,1,no
+<barrier>,barrier,1,no
+<bit>,bit_cast,1,no
+<bit>,byteswap,1,no
+<bit>,has_single_bit,1,no
+<bit>,bit_ceil,1,no
+<bit>,bit_floor,1,no
+<bit>,bit_width,1,no
+<bit>,rotl,1,no
+<bit>,rotr,1,no
+<bit>,countl_zero,1,no
+<bit>,countl_one,1,no
+<bit>,countr_zero,1,no
+<bit>,countr_one,1,no
+<bit>,popcount,1,no
+<bit>,endian,1,no
+<bit>,endian::little,1,no
+<bit>,endian::big,1,no
+<bit>,endian::native,1,no
+<bitset>,bitset,1,cxx11
+<bitset>,operator&,1,no
+<bitset>,operator|,1,no
+<bitset>,operator^,1,no
+<bitset>,operator>>,1,no
+<bitset>,operator<<,1,no
+<charconv>,chars_format,1,no
+<charconv>,to_chars_result,1,no
+<charconv>,to_chars,1,no
+<charconv>,from_chars_result,1,no
+<charconv>,from_chars,1,no
+# <chrono> TODO
+# <codecvt> TODO
+<compare>,weak_equality,1,cxx20
+<compare>,strong_equality,1,cxx20
+<compare>,partial_ordering,1,cxx20
+<compare>,weak_ordering,1,cxx20
+<compare>,strong_ordering,1,cxx20
+# <compare> TODO the rest
+<complex>,complex,1,cxx98
+<complex>,complex_literals,0,cxx14
+# <complex> TODO the rest
+# <concepts> TODO
+<condition_variable>,condition_variable,1,cxx11
+<condition_variable>,condition_variable_any,1,cxx11
+<condition_variable>,notify_all_at_thread_exit,1,no
+<condition_variable>,cv_status,1,no
+<condition_variable>,cv_status::no_timeout,1,no
+<condition_variable>,cv_status::timeout,1,no
+<coroutine>,coroutine_traits,1,no
+<coroutine>,coroutine_handle,1,no
+<coroutine>,operator==,1,no
+<coroutine>,operator<=>,1,no
+<coroutine>,hash,1,no
+<coroutine>,noop_coroutine_promise,1,no
+<coroutine>,noop_coroutine_handle,1,no
+<coroutine>,noop_coroutine,1,no
+<coroutine>,suspend_never,1,no
+<coroutine>,suspend_always,1,no
+<cstddef>,byte,0,cxx17
+<deque>,deque,1,cxx98
+<deque>,operator==,1,no
+<deque>,operator<=>,1,no
+<deque>,swap,1,no
+<deque>,erase,1,no
+<deque>,erase_if,1,no
+# c++/106851 <deque>,pmr::deque,1,no
+# <exception> TODO
+<exception>,exception,1,cxx98
+<exception>,bad_exception,1,no
+<exception>,nested_exception,1,no
+<exception>,terminate_handler,1,no
+<exception>,get_terminate,1,no
+<exception>,set_terminate,1,no
+<exception>,terminate,1,cxx98
+<exception>,uncaught_exceptions,1,cxx17
+<exception>,exception_ptr,1,cxx11
+<exception>,current_exception,1,cxx11
+<exception>,rethrow_exception,1,no
+<exception>,make_exception_ptr,1,cxx11
+<exception>,throw_with_nested,1,no
+<exception>,rethrow_if_nested,1,no
+<expected>,unexpected,1,no
+<expected>,bad_expected_access,1,no
+<expected>,unexpect_t,1,no
+<expected>,unexpect,1,no
+<expected>,expected,1,cxx23
+# <filesystem> TODO
+# <flat_map>,flat_map,1,no
+# <flat_map>,flat_multimap,1,no
+# <flat_map>,sorted_unique_t,1,no
+# <flat_map>,sorted_unique,1,no
+# <flat_map>,sorted_equivalent_t,1,no
+# <flat_map>,sorted_equivalent,1,no
+# <flat_map>,erase_if,1,no
+# <flat_map>,uses_allocator,1,no
+# <flat_set>,flat_set,1,no
+# <flat_set>,flat_multiset,1,no
+# <flat_set>,sorted_unique_t,1,no
+# <flat_set>,sorted_unique,1,no
+# <flat_set>,sorted_equivalent_t,1,no
+# <flat_set>,sorted_equivalent,1,no
+# <flat_set>,erase_if,1,no
+# <flat_set>,uses_allocator,1,no
+<forward_list>,forward_list,1,cxx11
+<forward_list>,operator==,1,no
+<forward_list>,operator<=>,1,no
+<forward_list>,swap,1,no
+<forward_list>,erase,1,no
+<forward_list>,erase_if,1,no
+# c++/106851 <forward_list>,pmr::forward_list,1,no
+<fstream>,basic_filebuf,1,no
+<fstream>,swap,1,no
+<fstream>,basic_filebuf,0,cxx98
+<fstream>,filebuf,1,no
+<fstream>,wfilebuf,1,no
+<fstream>,basic_ifstream,1,cxx98
+<fstream>,ifstream,1,no
+<fstream>,wifstream,1,no
+<fstream>,basic_ofstream,1,cxx98
+<fstream>,ofstream,1,cxx98
+<fstream>,wofstream,1,no
+<fstream>,basic_fstream,1,cxx98
+<fstream>,fstream,1,cxx98
+<fstream>,ifstream,1,cxx98
+<functional>,bind,1,cxx11
+<functional>,bind_front,1,cxx20
+<functional>,function,1,cxx11
+<functional>,hash,0,cxx11
+<functional>,invoke,1,cxx17
+<functional>,invoke_r,1,cxx23
+<functional>,mem_fn,1,cxx11
+<functional>,not_fn,1,cxx17
+<functional>,reference_wrapper,1,cxx11
+<functional>,unwrap_reference,1,cxx20
+<functional>,unwrap_reference_t,1,cxx20
+<functional>,unwrap_ref_decay,1,cxx20
+<functional>,unwrap_ref_decay_t,1,cxx20
+# <functional> TODO the rest
+<future>,future_errc,1,no
+<future>,launch,1,no
+<future>,future_status,1,no
+<future>,is_error_code_enum,1,no
+<future>,make_error_code,1,no
+<future>,make_error_condition,1,no
+<future>,future_category,1,no
+<future>,future_error,1,no
+<future>,promise,1,cxx11
+<future>,swap,1,no
+<future>,uses_allocator,1,no
+<future>,future,1,cxx11
+<future>,shared_future,1,no
+<future>,packaged_task,1,cxx11
+<future>,async,1,cxx11
+<initializer_list>,initializer_list,1,no
+<initializer_list>,begin,1,no
+<initializer_list>,end,1,no
+<iomanip>,resetiosflags,1,cxx98
+<iomanip>,setiosflags,1,cxx98
+<iomanip>,setbase,1,cxx98
+<iomanip>,setfill,1,cxx98
+<iomanip>,setprecision,1,cxx98
+<iomanip>,setw,1,cxx98
+<iomanip>,get_money,1,cxx11
+<iomanip>,put_money,1,cxx11
+<iomanip>,get_time,1,cxx11
+<iomanip>,put_time,1,cxx11
+<iomanip>,quoted,1,cxx14
+<ios>,boolalpha,0,cxx98
+<ios>,noboolalpha,0,cxx98
+<ios>,showbase,0,cxx98
+<ios>,noshowbase,0,cxx98
+<ios>,showpoint,0,cxx98
+<ios>,noshowpoint,0,cxx98
+<ios>,showpos,0,cxx98
+<ios>,noshowpos,0,cxx98
+<ios>,skipws,0,cxx98
+<ios>,noskipws,0,cxx98
+<ios>,uppercase,0,cxx98
+<ios>,nouppercase,0,cxx98
+<ios>,unitbuf,0,cxx98
+<ios>,nounitbuf,0,cxx98
+<ios>,internal,0,cxx98
+<ios>,left,0,cxx98
+<ios>,right,0,cxx98
+<ios>,dec,0,cxx98
+<ios>,hex,0,cxx98
+<ios>,oct,0,cxx98
+<ios>,fixed,0,cxx98
+<ios>,scientific,0,cxx98
+<ios>,hexfloat,0,cxx11
+<ios>,defaultfloat,0,cxx11
+# <ios> TODO the rest
+# <iosfwd> TODO ?
+<iostream>,cin,1,cxx98
+<iostream>,cout,1,cxx98
+<iostream>,cerr,1,cxx98
+<iostream>,clog,1,cxx98
+<iostream>,wcin,1,cxx98
+<iostream>,wcout,1,cxx98
+<iostream>,wcerr,1,cxx98
+<iostream>,wclog,1,cxx98
+<istream>,basic_istream,1,no
+<istream>,istream,1,cxx98
+<istream>,wistream,1,no
+<istream>,basic_iostream,1,no
+<istream>,iostream,1,no
+<istream>,wiostream,1,no
+<istream>,ws,1,cxx98
+<istream>,operator>>,1,no
+<iterator>,advance,1,cxx98
+<iterator>,back_inserter,1,cxx98
+<iterator>,begin,1,cxx11
+<iterator>,distance,1,cxx98
+<iterator>,end,1,cxx11
+<iterator>,front_inserter,1,cxx98
+<iterator>,inserter,1,cxx98
+<iterator>,istream_iterator,1,cxx98
+<iterator>,istreambuf_iterator,1,cxx98
+<iterator>,iterator_traits,1,cxx98
+<iterator>,move_iterator,1,cxx11
+<iterator>,next,1,cxx11
+<iterator>,ostream_iterator,1,cxx98
+<iterator>,ostreambuf_iterator,1,cxx98
+<iterator>,prev,1,cxx11
+<iterator>,reverse_iterator,1,cxx98
+# <iterator> TODO the rest
+<latch>,latch,1,no
+<list>,list,1,cxx98
+<list>,operator==,1,no
+<list>,operator<=>,1,no
+<list>,swap,1,no
+<list>,erase,1,no
+<list>,erase_if,1,no
+# c++/106851 <list>,pmr::list,1,no
+# <locale> TODO
+<map>,map,1,cxx98
+<map>,multimap,1,cxx98
+<map>,operator==,1,no
+<map>,operator<=>,1,no
+<map>,swap,1,no
+<map>,erase,1,no
+<map>,erase_if,1,no
+# c++/106851 <map>,pmr::map,1,no
+# c++/106851 <map>,pmr::multimap,1,no
+# unimplemented <mdspan>,extents,1,no
+# unimplemented <mdspan>,dextents,1,no
+# unimplemented <mdspan>,layout_left,1,no
+# unimplemented <mdspan>,layout_right,1,no
+# unimplemented <mdspan>,layout_stride,1,no
+# unimplemented <mdspan>,default_accessor,1,no
+# unimplemented <mdspan>,mdspan,1,cxx23
+<memory>,pointer_traits,1,cxx11
+<memory>,to_address,1,cxx11
+<memory>,align,1,cxx11
+<memory>,assume_aligned,1,cxx20
+<memory>,allocator_arg_t,1,cxx11
+<memory>,allocator_arg,1,cxx11
+<memory>,uses_allocator,1,cxx11
+<memory>,uses_allocator_v,1,cxx17
+<memory>,uses_allocator_construction_args,1,cxx20
+<memory>,make_obj_using_allocator,1,cxx20
+<memory>,uninitialized_construct_using_allocator,1,cxx20
+<memory>,allocator_traits,1,cxx11
+<memory>,allocator,1,cxx98
+<memory>,operator==,1,no
+<memory>,addressof,1,cxx11
+# TODO uninitialized memory algos
+<memory>,construct_at,1,cxx20
+# c++/106851 <memory>,ranges::construct_at,1,cxx20
+<memory>,destroy_at,1,cxx20
+<memory>,destroy,1,cxx20
+<memory>,destroy_n,1,cxx20
+# c++/106851 <memory>,ranges::destroy_at,1,cxx20
+# c++/106851 <memory>,ranges::destroy,1,cxx20
+# c++/106851 <memory>,ranges::destroy_n,1,cxx20
+<memory>,default_delete,1,cxx11
+<memory>,unique_ptr,1,cxx11
+<memory>,make_unique,1,cxx14
+<memory>,make_unique_for_overwrite,1,cxx20
+<memory>,swap,1,no
+<memory>,operator==,1,no
+<memory>,operator<=>,1,no
+<memory>,operator>,1,no
+<memory>,operator<=,1,no
+<memory>,operator>=,1,no
+<memory>,operator<=>,1,no
+<memory>,operator<<,1,no
+<memory>,bad_weak_ptr,1,cxx11
+<memory>,shared_ptr,1,cxx11
+<memory>,make_shared,1,cxx11
+<memory>,allocate_shared,1,cxx11
+<memory>,make_shared_for_overwrite,1,cxx20
+<memory>,allocate_shared_for_overwrite,1,cxx20
+<memory>,get_deleter,1,cxx11
+<memory>,static_pointer_cast,1,cxx11
+<memory>,dynamic_pointer_cast,1,cxx11
+<memory>,const_pointer_cast,1,cxx11
+<memory>,reinterpret_pointer_cast,1,cxx17
+<memory>,weak_ptr,1,cxx11
+<memory>,owner_less,1,cxx11
+<memory>,enable_shared_from_this,1,cxx11
+<memory>,hash,1,no
+<memory_resource>,pmr,0,cxx17
+<memory_resource>,pmr::memory_resource,1,cxx17
+<memory_resource>,pmr::operator==,1,no
+<memory_resource>,pmr::polymorphic_allocator,1,cxx17
+<memory_resource>,pmr::new_delete_resource,1,cxx17
+<memory_resource>,pmr::set_default_resource,1,cxx17
+<memory_resource>,pmr::get_default_resource,1,cxx17
+<memory_resource>,pmr::pool_options,1,cxx17
+<memory_resource>,pmr::synchronized_pool_resource,1,cxx17
+<memory_resource>,pmr::unsynchronized_pool_resource,1,cxx17
+<memory_resource>,pmr::monotonic_buffer_resource,1,cxx17
+<mutex>,mutex,1,cxx11
+<mutex>,recursive_mutex,1,cxx11
+<mutex>,timed_mutex,1,cxx11
+<mutex>,recursive_timed_mutex,1,cxx11
+<mutex>,defer_lock_t,1,no
+<mutex>,try_to_lock_t,1,no
+<mutex>,adopt_lock_t,1,no
+<mutex>,defer_lock,1,no
+<mutex>,try_to_lock,1,no
+<mutex>,adopt_lock,1,no
+<mutex>,lock_guard,1,cxx11
+<mutex>,scoped_lock,1,cxx17
+<mutex>,unique_lock,1,cxx11
+<mutex>,swap,1,no
+<mutex>,try_lock,1,cxx11
+<mutex>,lock,1,cxx11
+<mutex>,once_flag,1,cxx11
+<mutex>,call_once,1,cxx11
+<new>,bad_alloc,1,cxx98
+<new>,bad_array_new_length,1,no
+<new>,destroying_delete_t,1,no
+<new>,destroying_delete,1,no
+<new>,align_val_t,1,no
+<new>,nothrow_t,1,cxx98
+<new>,nothrow,1,cxx98
+<new>,new_handler,1,no
+<new>,get_new_handler,1,no
+<new>,set_new_handler,1,no
+<new>,launder,1,cxx17
+<new>,hardware_destructive_interference_size,1,cxx17
+<new>,hardware_constructive_interference_size,1,cxx17
+<numbers>,numbers::e_v,1,cxx20
+<numbers>,numbers::log2e_v,1,cxx20
+<numbers>,numbers::log10e_v,1,cxx20
+<numbers>,numbers::pi_v,1,cxx20
+<numbers>,numbers::inv_pi_v,1,cxx20
+<numbers>,numbers::inv_sqrtpi_v,1,cxx20
+<numbers>,numbers::ln2_v,1,cxx20
+<numbers>,numbers::ln10_v,1,cxx20
+<numbers>,numbers::sqrt2_v,1,cxx20
+<numbers>,numbers::sqrt3_v,1,cxx20
+<numbers>,numbers::inv_sqrt3_v,1,cxx20
+<numbers>,numbers::egamma_v,1,cxx20
+<numbers>,numbers::phi_v,1,cxx20
+<optional>,optional,1,cxx17
+<optional>,nullopt_t,1,no
+<optional>,nullopt,1,cxx17
+<optional>,bad_optional_access,1,no
+<optional>,operator==,1,no
+<optional>,operator!=,1,no
+<optional>,operator<,1,no
+<optional>,operator>,1,no
+<optional>,operator<=,1,no
+<optional>,operator>=,1,no
+<optional>,operator<=>,1,no
+<optional>,swap,1,no
+<optional>,make_optional,1,cxx17
+<optional>,hash,1,no
+<ostream>,basic_ostream,1,no
+<ostream>,ostream,1,cxx98
+<ostream>,wostream,1,cxx98
+<ostream>,endl,1,cxx98
+<ostream>,ends,1,cxx98
+<ostream>,flush,1,cxx98
+<ostream>,emit_on_flush,1,cxx20
+<ostream>,noemit_on_flush,1,cxx20
+<ostream>,flush_emit,1,cxx20
+<ostream>,operator<<,1,no
+# <numeric> TODO
+<queue>,queue,1,cxx98
+<queue>,operator==,1,no
+<queue>,operator!=,1,no
+<queue>,operator<,1,no
+<queue>,operator>,1,no
+<queue>,operator<=,1,no
+<queue>,operator>=,1,no
+<queue>,operator<=>,1,no
+<queue>,swap,1,no
+<queue>,uses_allocator,1,no
+<queue>,priority_queue,1,cxx98
+# <random> TODO
+<ranges>,ranges::enable_view,1,cxx20
+<ranges>,ranges::enable_borrowed_range,1,cxx20
+# <ranges> TODO the rest
+<ratio>,ratio,1,no
+<ratio>,ratio_add,1,no
+<ratio>,ratio_subtract,1,no
+<ratio>,ratio_multiply,1,no
+<ratio>,ratio_divide,1,no
+<ratio>,ratio_equal,1,no
+<ratio>,ratio_not_equal,1,no
+<ratio>,ratio_less,1,no
+<ratio>,ratio_less_equal,1,no
+<ratio>,ratio_greater,1,no
+<ratio>,ratio_greater_equal,1,no
+<ratio>,ratio_equal_v,1,no
+<ratio>,ratio_not_equal_v,1,no
+<ratio>,ratio_less_v,1,no
+<ratio>,ratio_less_equal_v,1,no
+<ratio>,ratio_greater_v,1,no
+<ratio>,ratio_greater_equal_v,1,no
+<ratio>,yocto,1,no,__INTMAX_WIDTH__ > 80
+<ratio>,zepto,1,no,__INTMAX_WIDTH__ > 70
+<ratio>,atto,1,no
+<ratio>,femto,1,no
+<ratio>,pico,1,no
+<ratio>,nano,1,no
+<ratio>,micro,1,no
+<ratio>,milli,1,no
+<ratio>,centi,1,no
+<ratio>,deci,1,no
+<ratio>,deca,1,no
+<ratio>,hecto,1,no
+<ratio>,kilo,1,no
+<ratio>,mega,1,no
+<ratio>,giga,1,no
+<ratio>,tera,1,no
+<ratio>,peta,1,no
+<ratio>,exa,1,no
+<ratio>,zetta,1,no,__INTMAX_WIDTH__ > 70
+<ratio>,yotta,1,no,__INTMAX_WIDTH__ > 80
+# <regex> TODO
+<scoped_allocator>,scoped_allocator_adaptor,1,cxx11
+<scoped_allocator>,operator==,1,no
+<semaphore>,counting_semaphore,1,cxx20
+<semaphore>,binary_semaphore,1,cxx20
+<set>,set,1,cxx98
+<set>,multiset,1,cxx98
+<set>,operator==,1,no
+<set>,operator<=>,1,no
+<set>,swap,1,no
+<set>,erase,1,no
+<set>,erase_if,1,no
+# c++/106851 <set>,pmr::set,1,no
+# c++/106851 <set>,pmr::multiset,1,no
+<shared_mutex>,shared_mutex,1,cxx17
+<shared_mutex>,shared_timed_mutex,1,cxx14
+<shared_mutex>,shared_lock,1,cxx14
+<shared_mutex>,swap,1,no
+<source_location>,source_location,1,cxx20
+<span>,dynamic_extent,1,no
+<span>,span,1,cxx20
+<span>,ranges::enable_view,1,no
+<span>,ranges::enable_borrowed_range,1,no
+<span>,as_bytes,1,no
+<span>,as_writable_bytes,1,no
+<spanstream>,basic_spanbuf,1,cxx23
+<spanstream>,swap,1,no
+<spanstream>,spanbuf,1,cxx23
+<spanstream>,wspanbuf,1,cxx23
+<spanstream>,basic_ispanstream,1,cxx23
+<spanstream>,ispanstream,1,cxx23
+<spanstream>,wispanstream,1,cxx23
+<spanstream>,basic_ospanstream,1,cxx23
+<spanstream>,ospanstream,1,cxx23
+<spanstream>,wospanstream,1,cxx23
+<spanstream>,basic_spanstream,1,cxx23
+<spanstream>,spanstream,1,cxx23
+<spanstream>,ispanstream,1,cxx23
+<sstream>,basic_stringbuf,1,cxx98
+<sstream>,swap,1,no
+<sstream>,stringbuf,1,cxx98
+<sstream>,wstringbuf,1,cxx98
+<sstream>,basic_istringstream,1,cxx98
+<sstream>,istringstream,1,cxx98
+<sstream>,wistringstream,1,cxx98
+<sstream>,basic_ostringstream,1,cxx98
+<sstream>,ostringstream,1,cxx98
+<sstream>,wostringstream,1,cxx98
+<sstream>,basic_stringstream,1,cxx98
+<sstream>,stringstream,1,cxx98
+<sstream>,istringstream,1,cxx98
+<stack>,stack,1,cxx98
+<stack>,operator==,1,no
+<stack>,operator!=,1,no
+<stack>,operator<,1,no
+<stack>,operator>,1,no
+<stack>,operator<=,1,no
+<stack>,operator>=,1,no
+<stack>,operator<=>,1,no
+<stack>,swap,1,no
+<stack>,uses_allocator,1,no
+<stacktrace>,stacktrace_entry,1,no
+<stacktrace>,basic_stacktrace,1,no
+<stacktrace>,stacktrace,1,cxx23
+<stacktrace>,swap,1,no
+<stacktrace>,to_string,1,no
+<stacktrace>,operator<<,1,no
+# c++/106851 <stacktrace>,pmr::stacktrace,1,no
+<stacktrace>,hash,1,no
+<stdexcept>,logic_error,1,cxx98
+<stdexcept>,domain_error,1,cxx98
+<stdexcept>,invalid_argument,1,cxx98
+<stdexcept>,length_error,1,cxx98
+<stdexcept>,out_of_range,1,cxx98
+<stdexcept>,runtime_error,1,cxx98
+<stdexcept>,range_error,1,cxx98
+<stdexcept>,overflow_error,1,cxx98
+<stdexcept>,underflow_error,1,cxx98
+<stop_token>,stop_token,1,cxx20
+<stop_token>,stop_source,1,cxx20
+<stop_token>,nostopstate_t,1,no
+<stop_token>,nostopstate,1,no
+<stop_token>,stop_callback,1,cxx20
+<streambuf>,basic_streambuf,1,cxx98
+<streambuf>,streambuf,1,cxx98
+<streambuf>,wstreambuf,1,cxx98
+<string>,char_traits,1,cxx98
+<string>,basic_string,1,cxx98
+<string>,operator+,1,no
+<string>,operator==,1,no
+<string>,operator<=>,1,no
+<string>,swap,1,no
+<string>,operator<<,1,no
+<string>,operator>>,1,no
+<string>,getline,1,no
+<string>,erase,1,no
+<string>,erase_if,1,no
+<string>,string,1,cxx98
+<string>,wstring,1,cxx98
+<string>,u8string,1,cxx20
+<string>,u16string,1,cxx11
+<string>,u32string,1,cxx11
+<string>,stoi,1,cxx11
+<string>,stol,1,cxx11
+<string>,stoul,1,cxx11
+<string>,stoll,1,cxx11
+<string>,stoull,1,cxx11
+<string>,stof,1,cxx11
+<string>,stod,1,cxx11
+<string>,stold,1,cxx11
+<string>,to_string,1,cxx17
+<string>,to_wstring,1,cxx17
+# c++/106851 <string>,pmr::string,1,cxx17
+# c++/106851 <string>,pmr::wstring,1,cxx17
+# c++/106851 <string>,pmr::u8string,1,cxx20
+# c++/106851 <string>,pmr::u16string,1,cxx17
+# c++/106851 <string>,pmr::u32string,1,cxx17
+<string_view>,basic_string_view,1,cxx17
+<string_view>,ranges::enable_view,1,no
+<string_view>,ranges::enable_borrowed_range,1,no
+<string_view>,operator==,1,no
+<string_view>,operator<=>,1,no
+<string_view>,operator<<,1,no
+<string_view>,string_view,1,cxx17
+<string_view>,hash,1,no
+<string_view>,literals::string_literals::operator""sv,1,no
+<system_error>,error_category,1,cxx11
+<system_error>,generic_category,1,cxx11
+<system_error>,system_category,1,cxx11
+<system_error>,error_code,1,cxx11
+<system_error>,error_condition,1,cxx11
+<system_error>,is_error_code_enum,1,cxx11
+<system_error>,is_error_condition_enum,1,cxx11
+<system_error>,errc,1,cxx11
+<system_error>,make_error_code,1,cxx11
+<system_error>,make_error_condition,1,cxx11
+<system_error>,operator==,1,no
+<system_error>,operator<=>,1,no
+<system_error>,hash,1,no
+<system_error>,is_error_code_enum_v,1,cxx17
+<system_error>,is_error_condition_enum_v,1,cxx17
+<syncstream>,basic_syncbuf,1,no
+<syncstream>,swap,1,no
+<syncstream>,syncbuf,1,no
+<syncstream>,wsyncbuf,1,no
+<syncstream>,basic_osyncstream,1,no
+<syncstream>,osyncstream,1,no
+<syncstream>,wosyncstream,1,no
+<thread>,thread,1,cxx11
+<thread>,swap,1,no
+<thread>,jthread,1,cxx20
+<thread>,this_thread,0,cxx11
+<thread>,this_thread::get_id,1,no
+<thread>,this_thread::yield,1,no
+<thread>,this_thread::sleep_until,1,no
+<thread>,this_thread::sleep_for,1,no
+<tuple>,tuple,1,cxx11
+<tuple>,basic_common_reference,1,no
+<tuple>,common_type,1,no
+<tuple>,ignore,1,no
+<tuple>,make_tuple,1,cxx11
+<tuple>,forward_as_tuple,1,cxx11
+<tuple>,tie,1,cxx11
+<tuple>,tuple_cat,1,cxx11
+<tuple>,apply,1,cxx17
+<tuple>,make_from_tuple,1,cxx17
+<tuple>,tuple_size,1,cxx11
+<tuple>,tuple_size_v,1,cxx17
+<tuple>,tuple_element,1,cxx11
+<tuple>,tuple_element_t,1,cxx14
+<tuple>,get,1,no
+<tuple>,operator==,1,no
+<tuple>,operator<=>,1,no
+<tuple>,uses_allocator,1,no
+<tuple>,swap,1,no
+<typeindex>,type_index,1,cxx11
+<typeindex>,hash,1,no
+<typeinfo>,type_info,1,no
+<typeinfo>,bad_cast,1,cxx98
+<typeinfo>,bad_typeid,1,cxx98
+<type_traits>,enable_if,1,cxx11
+<type_traits>,enable_if_t,1,cxx14
+<type_traits>,invoke_result,1,cxx17
+<type_traits>,invoke_result_t,1,cxx17
+<type_traits>,remove_cvref,1,cxx20
+<type_traits>,remove_cvref_t,1,cxx20
+<type_traits>,type_identity,1,cxx20
+<type_traits>,type_identity_t,1,cxx20
+<type_traits>,void_t,1,cxx17
+<type_traits>,conjunction,1,cxx17
+<type_traits>,conjunction_v,1,cxx17
+<type_traits>,disjunction,1,cxx17
+<type_traits>,disjunction_v,1,cxx17
+<type_traits>,negation,1,cxx17
+<type_traits>,negation_v,1,cxx17
+<unordered_map>,unordered_map,1,cxx11
+<unordered_map>,unordered_multimap,1,cxx11
+<unordered_map>,operator==,1,no
+<unordered_map>,operator<=>,1,no
+<unordered_map>,swap,1,no
+<unordered_map>,erase,1,no
+<unordered_map>,erase_if,1,no
+# c++/106851 <unordered_map>,pmr::unordered_map,1,cxx17
+# c++/106851 <unordered_map>,pmr::unordered_multimap,1,cxx17
+<unordered_set>,unordered_set,1,cxx11
+<unordered_set>,unordered_multiset,1,cxx11
+<unordered_set>,operator==,1,no
+<unordered_set>,operator<=>,1,no
+<unordered_set>,swap,1,no
+<unordered_set>,erase,1,no
+<unordered_set>,erase_if,1,no
+# c++/106851 <unordered_set>,pmr::unordered_set,1,no
+# c++/106851 <unordered_set>,pmr::unordered_multiset,1,no
+<utility>,swap,1,no
+<utility>,exchange,1,cxx14
+<utility>,forward,1,cxx11
+# unimplemented <utility>,forward_like,1,cxx23
+<utility>,move,1,cxx11
+<utility>,move_if_noexcept,1,cxx11
+<utility>,as_const,1,cxx17
+<utility>,declval,1,cxx11
+<utility>,cmp_equal,1,cxx20
+<utility>,cmp_not_equal,1,cxx20
+<utility>,cmp_less,1,cxx20
+<utility>,cmp_greater,1,cxx20
+<utility>,cmp_less_equal,1,cxx20
+<utility>,cmp_greater_equal,1,cxx20
+<utility>,in_range,1,cxx20
+<utility>,to_underlying,1,cxx23
+<utility>,unreachable,1,cxx23
+<utility>,integer_sequence,1,cxx14
+<utility>,index_sequence,1,cxx14
+<utility>,make_integer_sequence,1,cxx14
+<utility>,make_index_sequence,1,cxx14
+<utility>,index_sequence_for,1,cxx14
+<utility>,pair,1,cxx98
+<utility>,operator==,1,no
+<utility>,operator<=>,1,no
+<utility>,basic_common_reference,1,no
+<utility>,common_type,1,no
+<utility>,make_pair,1,cxx98
+<utility>,tuple_size,1,no
+<utility>,tuple_element,1,no
+<utility>,get,1,no
+<utility>,piecewise_construct_t,1,cxx11
+<utility>,piecewise_construct,1,cxx11
+<utility>,in_place_t,1,cxx17
+<utility>,in_place,1,cxx17
+<utility>,in_place_type_t,1,cxx17
+<utility>,in_place_type,1,cxx17
+<utility>,in_place_index_t,1,cxx17
+<utility>,in_place_index,1,cxx17
+# <valarray> TODO
+<variant>,variant,1,cxx17
+<variant>,variant_size,1,cxx17
+<variant>,variant_size_v,1,cxx17
+<variant>,variant_alternative,1,cxx17
+<variant>,variant_alternative_t,1,cxx17
+<variant>,variant_npos,1,cxx17
+<variant>,holds_alternative,1,cxx17
+<variant>,get,1,no
+<variant>,get_if,1,no
+<variant>,operator==,1,no
+<variant>,operator!=,1,no
+<variant>,operator<,1,no
+<variant>,operator>,1,no
+<variant>,operator<=,1,no
+<variant>,operator>=,1,no
+<variant>,operator<=>,1,no
+<variant>,visit,1,cxx17
+<variant>,monostate,1,cxx17
+<variant>,swap,1,no
+<variant>,bad_variant_access,1,cxx17
+<variant>,hash,1,no
+<vector>,vector,1,cxx98
+<vector>,operator==,1,no
+<vector>,operator<=>,1,no
+<vector>,swap,1,no
+<vector>,erase,1,no
+<vector>,erase_if,1,no
+<vector>,hash,1,no
+# <version> contains no exportable names
+# <cassert> contains no exportable names
+# <cctype> TODO
+<cfenv>,fenv_t,1,no
+<cfenv>,fexcept_t,1,no
+<cfenv>,feclearexcept,1,no
+<cfenv>,fegetexceptflag,1,no
+<cfenv>,feraiseexcept,1,no
+<cfenv>,fesetexceptflag,1,no
+<cfenv>,fetestexcept,1,no
+<cfenv>,fegetround,1,no
+<cfenv>,fesetround,1,no
+<cfenv>,fegetenv,1,no
+<cfenv>,feholdexcept,1,no
+<cfenv>,fesetenv,1,no
+<cfenv>,feupdateenv,1,no
+<cinttypes>,imaxdiv_t,1,no
+<cinttypes>,imaxabs,1,no
+<cinttypes>,imaxdiv,1,no
+<cinttypes>,strtoimax,1,no
+<cinttypes>,strtoumax,1,no
+<cinttypes>,wcstoimax,1,no
+<cinttypes>,wcstoumax,1,no
+<cinttypes>,abs,1,no
+<cinttypes>,div,1,no
+# <climits> only contains macros, handled by get_stdlib_header_for_name
+# <climits>,CHAR_BIT,0,cxx98
+# <climits>,SCHAR_MIN,0,cxx98
+# <climits>,SCHAR_MAX,0,cxx98
+# <climits>,UCHAR_MAX,0,cxx98
+# <climits>,CHAR_MIN,0,cxx98
+# <climits>,CHAR_MAX,0,cxx98
+# <climits>,MB_LEN_MAX,0,cxx98
+# <climits>,SHRT_MIN,0,cxx98
+# <climits>,SHRT_MAX,0,cxx98
+# <climits>,USHRT_MAX,0,cxx98
+# <climits>,INT_MIN,0,cxx98
+# <climits>,INT_MAX,0,cxx98
+# <climits>,UINT_MAX,0,cxx98
+# <climits>,LONG_MIN,0,cxx98
+# <climits>,LONG_MAX,0,cxx98
+# <climits>,ULONG_MAX,0,cxx98
+# <climits>,LLONG_MIN,0,cxx98
+# <climits>,LLONG_MAX,0,cxx11
+# <climits>,ULLONG_MAX,0,cxx11
+<clocale>,lconv,1,no
+<clocale>,setlocale,1,no
+<clocale>,localeconv,1,no
+# <cmath> TODO 
+<csetjmp>,jmp_buf,1,no
+<csetjmp>,longjmp,1,no
+<csignal>,sig_atomic_t,1,no
+<csignal>,signal,1,no
+<csignal>,raise,1,no
+<csignal>,va_list,1,no
+<cstddef>,ptrdiff_t,1,no
+<cstddef>,size_t,1,no
+<cstddef>,max_align_t,1,no
+<cstddef>,nullptr_t,1,no
+<cstddef>,byte,1,no
+<cstddef>,operator<<=,1,no
+<cstddef>,operator<<,1,no
+<cstddef>,operator>>=,1,no
+<cstddef>,operator>>,1,no
+<cstddef>,operator|=,1,no
+<cstddef>,operator|,1,no
+<cstddef>,operator&=,1,no
+<cstddef>,operator&,1,no
+<cstddef>,operator^=,1,no
+<cstddef>,operator^,1,no
+<cstddef>,operator~,1,no
+<cstddef>,to_integer,1,no
+<cstdint>,int8_t,1,no
+<cstdint>,int16_t,1,no
+<cstdint>,int32_t,1,no
+<cstdint>,int64_t,1,no
+<cstdint>,int_fast8_t,1,no
+<cstdint>,int_fast16_t,1,no
+<cstdint>,int_fast32_t,1,no
+<cstdint>,int_fast64_t,1,no
+<cstdint>,int_least8_t,1,no
+<cstdint>,int_least16_t,1,no
+<cstdint>,int_least32_t,1,no
+<cstdint>,int_least64_t,1,no
+<cstdint>,intmax_t,1,no
+<cstdint>,intptr_t,1,no
+<cstdint>,uint8_t,1,no
+<cstdint>,uint16_t,1,no
+<cstdint>,uint32_t,1,no
+<cstdint>,uint64_t,1,no
+<cstdint>,uint_fast8_t,1,cxx11
+<cstdint>,uint_fast16_t,1,cxx11
+<cstdint>,uint_fast32_t,1,cxx11
+<cstdint>,uint_fast64_t,1,cxx11
+<cstdint>,uint_least8_t,1,cxx11
+<cstdint>,uint_least16_t,1,cxx11
+<cstdint>,uint_least32_t,1,cxx11
+<cstdint>,uint_least64_t,1,cxx11
+<cstdint>,uintmax_t,1,cxx11
+<cstdint>,uintptr_t,1,cxx11
+# <cstdio> TODO
+# <cstdlib> TODO
+# <cstring> TODO
+# <ctime> TODO
+# <cuchar> TODO
+# <cwchar> TODO
+# <cwctype> TODO
--- /dev/null	2022-10-17 14:59:39.320142690 +0200
+++ b/gcc/cp/gen-cxxapi-file.py	2022-10-18 15:50:04.883688760 +0200
@@ -0,0 +1,190 @@
+#!/usr/bin/env python3
+
+# Copyright (C) 2022 Free Software Foundation, Inc.
+# This file is part of GCC.
+
+# GCC 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.
+
+# GCC 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 GCC; see the file COPYING3.  If not see
+# <http://www.gnu.org/licenses/>.
+
+
+# Generate gcc source files:
+# - the export description of the standard C++ library module
+# - the gperf tables used to hint at actions to fix problems
+#   related to missing symbols in the std:: namespace
+
+import csv
+import os
+import time
+
+# The CSV file contains the following columns:
+#  column  value
+#       1  header file, including angle brackets
+#       2  symbol name without std:: prefix
+#       3  nonzero if to be exported
+#       4  "no" if not to be added to the hint table else the appropriate enum cxx_dialect value
+#       5  optional, a string used after #if in a line inserted first to enable conditional definitions
+
+
+def print_condition(prev, e):
+    if len(e) > 4 and e[4] != '':
+        if not prev or prev != e[4]:
+            if prev:
+                print('#endif')
+            print(f'#if {e[4]}')
+        return e[4]
+    if prev:
+        print('#endif')
+    return None
+
+
+def export(script, content):
+    print("""// This file is auto-generated by {:s}.
+#if __cplusplus <= 202002L
+# if __cplusplus == 202002L
+#  ifdef __STRICT_ANSI__
+#   error "module `std' is only available before C++23 if using -std=gnu++20"
+#  endif
+# else
+#  error "module `std' is not available before C++23"
+# endif
+#endif
+
+export module std;
+
+import <bits/stdc++.h>;
+
+// new/delete operators in global namespace from <new>
+export using ::operator new;
+export using ::operator delete;
+export using ::operator new[];
+export using ::operator delete[];""".format(script))
+    header = ''
+    printed_header = False
+    cond = None
+    for e in content:
+        if e[0] != header:
+            header = e[0]
+            printed_header = False
+        if e[2] != 0:
+            if not printed_header:
+                if cond:
+                    print('#endif')
+                    cond = None
+                print(f'\n// {header}')
+                printed_header = True
+            cond = print_condition(cond, e)
+            print(f'export using std::{e[1]};')
+    if cond:
+        print('#endif')
+
+
+def hints(script, content):
+    print("""%language=C++
+%define class-name std_name_hint_lookup
+%struct-type
+%{{
+/* This file is auto-generated by {:s}.  */
+/* Copyright (C) {:s} Free Software Foundation, Inc.
+
+This file is part of GCC.
+
+GCC 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.
+
+GCC 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 GCC; see the file COPYING3.  If not see
+<http://www.gnu.org/licenses/>.  */
+%}}
+struct std_name_hint
+{{
+  /* A name within "std::".  */
+  const char *name;
+
+  /* The header name defining it within the C++ Standard Library
+     (with '<' and '>').  */
+  const char* header;
+
+  /* The dialect of C++ in which this was added.  */
+  enum cxx_dialect min_dialect;
+}};
+%%
+# The standard-defined types, functions, and options in the std:: namespace
+# as defined in the C++ language specification.  The result is used in the
+# get_std_name_hint functions.
+#   throws an exception.
+#""".format(script, time.strftime('%Y')))
+    header = ''
+    printed_header = False
+    for e in content:
+        if e[0] != header:
+            header = e[0]
+            printed_header = False
+        if e[3] != 'no':
+            if not printed_header:
+                print(f'# {header}')
+                printed_header = True
+            print(f'{e[1]}, "{e[0]}", {e[3]}')
+
+
+def remove_comment(f):
+    for row in f:
+        row = row.strip()
+        if row[0] != '#':
+            yield row
+
+
+modes = {
+    'export': export,
+    'hints': hints
+}
+
+
+def usage(script):
+    print(f'Usage: {script} [{"|".join(modes.keys())}] CSVFILE')
+    exit(1)
+
+
+def main(argv):
+    if len(argv) < 3:
+        usage(argv[0] if len(argv) > 0 else '???')
+
+    script = argv[0]
+    mode = argv[1]
+    filename = argv[2]
+
+    if mode not in modes:
+        print(f"{script}: unrecognized mode '{mode}'")
+        usage(script)
+
+    try:
+        with open(filename, 'r') as csvfile:
+            modes[mode](os.path.basename(script), sorted(csv.reader(remove_comment(csvfile), delimiter=',')))
+    except FileNotFoundError:
+        print(f"{script}: cannot find CSV file '{filename}'")
+        exit(1)
+    except PermissionError:
+        print(f"{script}: insufficient permission to read CSV file '{filename}'")
+        exit(1)
+
+
+if __name__ == '__main__':
+    import sys
+    main(sys.argv)

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

* Re: [PATCH] introduce C++ API data base and generator for C++ hints
  2022-10-18 15:06 [PATCH] introduce C++ API data base and generator for C++ hints Ulrich Drepper
@ 2022-10-19 19:09 ` Jason Merrill
  0 siblings, 0 replies; 2+ messages in thread
From: Jason Merrill @ 2022-10-19 19:09 UTC (permalink / raw)
  To: Ulrich Drepper, gcc-patches

On 10/18/22 11:06, Ulrich Drepper wrote:
> I updated the patch based on the feedback from Jason and Martin.  It 
> keeps the CSV file and the python script in the cp/ directory.  There 
> also is still only one Python script.
> 
> If there is agreement that either of those should change despite the 
> arguments I gave in the reply to Jason's email I'll change it.  
> Otherwise I think the patch is ready to be applied.
> 
> There should be no change for the non-developer, I've adjusted the 
> Makefile so that no file is generated based on time stamps unless the 
> maintainer mode is selected.
> 
> I added the comment about the shared ownership only to the CSV file, not 
> the Python script.  The latter shouldn't need frequent updates and 
> therefore the issue is less critical.
> 
> OK?

OK.

> 2022-10-18  Jonathan Wakely   <jwakely@redhat.com 
> <mailto:jwakely@redhat.com>>
>              Ulrich Drepper  <drepper@redhat.com 
> <mailto:drepper@redhat.com>>
> 
> contrib/
>          * gcc_update: Add rule for gcc/cp/std-name-hint.gperf.
> 
> gcc/cp/
>          * Make-lang.in: Add rules to generate std-name-hint.gperf.  Adjust
>          rule to generate std-name-hint.h to allow chain rule.
>          * std-name-hint.h: Regenerated.
>          * std-name-hint.gperf: This file is now generated.
>          * cxxapi-data-.csv: New file.  CSV file with C++ API data.
>          * gen-cxxapi-file.py: New file.  Generate std-name-hint.gperf
>          and module export source (in future).
> 


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

end of thread, other threads:[~2022-10-19 19:09 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-18 15:06 [PATCH] introduce C++ API data base and generator for C++ hints Ulrich Drepper
2022-10-19 19:09 ` Jason Merrill

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).