aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikhnenko <mikhnenko@yandex-team.com>2025-02-01 14:09:02 +0300
committermikhnenko <mikhnenko@yandex-team.com>2025-02-01 14:33:00 +0300
commit5ef4578b282eef07d27f8d0cb56d2c1aac00042c (patch)
tree1fbf9195e0b8c4e47bd7f84aba089ba3c13474f3
parent6be27609101cab343f3fedd9204990737b6ecddd (diff)
downloadydb-5ef4578b282eef07d27f8d0cb56d2c1aac00042c.tar.gz
Update libcxx to 2 Apr 2024 239236b8c2154aa49e98bc7ed774a7d2712edf50
``` [libc++] Remove pair dependency (#85621) [libc++] Simplify the implementation of <stddef.h> (#86843) Update the "Current Status" section of the website to be current. (#84507) [libc++] Optimize the two range overload of mismatch (#86853) [libc++] Refactor __tuple_like and __pair_like (#85206) [libc++][test] Improves src include paths. (#86864) [libc++] Document guidelines for applying [[nodiscard]] (#84000) [libc++] Optimize the std::mismatch tail (#83440) [libc++] Remove <queue> and <stack> includes from <format> (#85520) [libc++] Switch FreeBSD to C++26 (#86658) [libc++] Fix one case in saturate_cast.pass.cpp for 64-bit on z/OS (#86724) [libc++][test] Remove tests that testing std::variant<T&> (#84222) [libc++] <experimental/simd> Reduce types for template parameter U in tests (#83781) [libc++] Switch FreeBSD CI job to Clang 17 (#86320) [libc++][CI] Updates the documentation. (#85264) [libc++][format] Adds ABI tags to inline constexpr variables. (#86293) [libc++][test] Fix race condition in condition_variable_any tests (#84788) [libc++] Vectorize mismatch (#73255) [libc++] Don't push and pop extensions diagnostics when using clang modules (#85917) [libc++][ranges] use `static operator()` for C++23 ranges (#86052) [libc++] Implement LWG3528 (`make_from_tuple` can perform (the equivalent of) a C-style cast) (#85263) [libc++] Remove macros for keeping std::allocator members and void specialization after C++20 (#85806) [libc++] Deprecates std::errc constants. (#80542) [libcxx] [cmake] Fix cmake_path(ABSOLUTE_PATH) for empty CMAKE_INSTALL_PREFIX [libc++][CI] Reenables the module tests. (#85799) [libc++][ranges] remove `__workaround_52970` (#85683) [libc++][ranges] LWG3715: `view_interface::empty` is overconstrained (#85004) [libcxx] [modules] Fix relative paths with absolute LIBCXX_INSTALL_MODULES_DIR (#85756) [libc++][format] Fixes nested concept evaluation. (#85548) [libc++][CMake] Removes LIBCXX_ENABLE_CLANG_TIDY. (#85262) [libc++] Remove __unconstrained_reverse_iterator (#85582) [libc++] Simplify the implementation of remove_reference (#85207) [libcxx][test] Create feature host-can-create-symlinks (#82204) [libc++] Use __is_scoped_enum for the implementation of is_scoped_enum if it's available (#85580) [libc++] Add missing hide-from-ABI annotations on virtual functions (#85439) [libc++] Optimize ranges::fill{,_n} for vector<bool>::iterator (#84642) [libc++] Add <locale> include in <chrono> (#85521) [libc++] Remove <locale> includes from <format> (#85478) [libc++] P2602R2 Poison Pills are Too Toxic (#74534) [libc++] Fixes run-buildbot-container. (#84644) [libc++] Add [[nodiscard]] to static numeric limit functions (#83748) Rework Modules CMake to be (more) idiomatic. (#84936) [libc++] Enables TZDB tests. (#82108) [libc++] Remove a few includes from <__functional/hash.h> (#83254) [libc++] Implements filebuf unbuffered. (#76629) [libc++][CI] Updates the version number of the latest release. [libc++] Remove <tuple> include from <__format/concepts.h> (#80214) [runtimes] Prefer -fvisibility-global-new-delete=force-hidden (#84917) [libc++] Fix tests on musl (#85085) [libc++] Remove _LIBCPP_ENABLE_NARROWING_CONVERSIONS_IN_VARIANT (#83928) [libcxx] Fix incorrect type in the has-1024-bit-atomics feature test (#84904) [libc++] Improves UB handling in ios_base destructor. (#76525) [libc++][CI] Installs tzdata package in Docker. (#84643) [libc++][TZDB] Fixes parsing interleaved rules. (#84808) [libc++][hardening] Check bounds on arithmetic in __bounded_iter (#78876) [libc++][hardening] Add iterator validity checks on unordered containers (#80230) [libc++][hardening] Reclassify string_view(ptr, len)'s size assertion (#79297) [libc++] Re-enable the clang_modules_include test for Objective-C++ (#66801) [libc++] Remove XFAIL for SIMD in optimized build (#84767) [libcxx] Update 128-bit-atomics feature test (#83841) [libc++] Only forward-declare ABI-functions in exception_ptr.h if they are meant to be used (#84707) [libc++][test] Don't include `test_format_context.h` in `parse.pass.cpp` (#83734) [libc++] Add missing include in test (#84579) [libc++] Remove <tuple> from <variant> (#83183) [RFC][libc++] Reworks clang-tidy selection. (#81362) [libc++] Remove <array> include from <span> (#83742) [libc++][format] Updates LWG3462 status. (#80550) [libc++][format] Update LWG3701 status. (#80545) [libc++][test] Fix MSVC warning C4127 in `array.cons/initialization.pass.cpp` (#79793) [libc++] Simplify the std::pair constructor overload set (#81448) [libc++] Allow the use of extensions in the implementation (#79532) [libc++] Don't build against libcxxrt by default on FreeBSD (#84484) Actually disable the module generation tests. [libc++] Disable module_std and module_std_compat tests [libc++] Enable availability based on the compiler instead of __has_extension (#84065) [libc++] Fixes time formatter test output for Linux on PowerPC (#75526) [libc++] Remove unused includes from __type_traits/is_convertible.h (#83747) ``` commit_hash:171258d93ab92f516dfb1789300677a164e63219
-rw-r--r--build/sysincl/stl-to-libcxx.yml26
-rw-r--r--contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym4
-rw-r--r--contrib/libs/cxxsupp/libcxx/.yandex_meta/devtools.licenses.report104
-rw-r--r--contrib/libs/cxxsupp/libcxx/.yandex_meta/licenses.list.txt4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/copy.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_backward.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_move_common.h41
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/equal.h66
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/equal_range.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/fill_n.h58
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/inplace_merge.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/lexicographical_compare_three_way.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/mismatch.h145
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/move.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/move_backward.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/partial_sort.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/pop_heap.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/push_heap.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_ends_with.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_mismatch.h22
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_starts_with.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/rotate.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/simd_utils.h130
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_sort.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/unwrap_iter.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__algorithm/upper_bound.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__atomic/atomic_base.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__availability7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__bit/bit_cast.h9
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__bit/countr.h13
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__bit_reference59
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__chrono/tzdb_list.h22
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__compare/partial_order.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__compare/strong_order.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__compare/weak_order.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__concepts/class_or_enum.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__concepts/swappable.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__config81
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__exception/exception_ptr.h12
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__exception/nested_exception.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__exception/operations.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__expected/expected.h14
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/copy_options.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/directory_options.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/file_status.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/file_time_type.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/file_type.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/perm_options.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/perms.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__filesystem/space_info.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/concepts.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/container_adaptor.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/escaped_output_table.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/extended_grapheme_cluster_table.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_arg.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_arg_store.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_args.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_context.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_bool.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_char.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_floating_point.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_integer.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_pointer.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/formatter_string.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__format/width_estimation_table.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__functional/bind_front.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__functional/function.h22
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__functional/hash.h11
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__functional/not_fn.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/array.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/deque.h26
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/format.h (renamed from contrib/libs/cxxsupp/libcxx/include/__format/format_fwd.h)7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/memory.h (renamed from contrib/libs/cxxsupp/libcxx/include/__tuple/pair_like.h)19
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/queue.h31
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/stack.h26
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/string.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__fwd/vector.h26
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__hash_table47
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/bounded_iter.h71
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/cpp17_iterator_concepts.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/iterator_traits.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/ranges_iterator_traits.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__iterator/reverse_iterator.h196
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__locale1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__mdspan/mdspan.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/compressed_pair.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/uninitialized_algorithms.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/unique_ptr.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory/uses_allocator_construction.h12
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__memory_resource/polymorphic_allocator.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__mutex/mutex.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/access.h10
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/as_rvalue_view.h16
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/data.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/movable_box.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/repeat_view.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/size.h5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/to.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h17
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__ranges/zip_view.h11
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__split_buffer5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__string/char_traits.h11
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__system_error/errc.h70
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__thread/support/pthread.h1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tree8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/find_index.h62
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h9
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h32
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_no_subrange.h61
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/apply_cv.h50
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/conjunction.h7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/copy_cv.h9
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_assignable.h21
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h28
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h6
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_assignable.h36
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_constructible.h35
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_default_constructible.h31
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_implicitly_default_constructible.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_assignable.h34
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_constructible.h33
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h24
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h51
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_assignable.h36
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_constructible.h48
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_default_constructible.h32
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_assignable.h36
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_constructible.h45
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_scoped_enum.h17
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_swappable.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h25
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h29
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_assignable.h36
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_constructible.h33
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_default_constructible.h32
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_assignable.h36
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_constructible.h33
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/noexcept_move_assign_container.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__type_traits/remove_reference.h10
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/exception_guard.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/exchange.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/move.h4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/pair.h134
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/small_buffer.h2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/__utility/swap.h8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/any4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/array3
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/cerrno7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/chrono2
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/complex7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/coroutine1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/cwchar4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/deque4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/execution4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/experimental/memory4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/format8
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/forward_list5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/fstream60
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/future1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/ios12
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/iosfwd5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/libcxx.imp26
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/limits126
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/list5
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/module.modulemap73
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/mutex20
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/new1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/optional15
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/queue7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/shared_mutex1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/span18
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/stack4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/stddef.h29
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/stlfwd28
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/string4
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/string_view7
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/thread1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/tuple94
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/type_traits15
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/typeinfo1
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/variant70
-rw-r--r--contrib/libs/cxxsupp/libcxx/include/vector6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/00-future-2024-04-11-gnu-include-next.patch26
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-12-undeprecate-macro.patch28
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-22-wasm-eptr.patch18
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/01-commit-e0e82fc-initial.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/14-has-no-threads.patch10
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/15-unique-ptr.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/22__config.patch12
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/23__locale.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/25__tuple.patch10
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/28-cudacc.patch27
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/33__split_buffer.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/38-complex.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/39-optional.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/40-deque.patch8
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/41-exception.patch10
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/43-string.patch2
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/45-type-traits.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/46-typeinfo-variant-valarray.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/47-vector.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/49-string-view.patch6
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/60-chrono.patch2
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/65-string-iterator-pointer.patch2
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/66-vector-iterator-pointer.patch2
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/68-asan-contiguous-container.patch12
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/71-char-traits-deprecated.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/72-abi-has-no-init_primary_exception.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/73-deque-disable-harderning.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/74-no-builtin_remove_reference_clang14.patch19
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/75-allocator-removed-members.patch46
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/77-__builtin_convertvector-win-clang18.patch13
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/xxx-config-epilogue.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/patches/yyy-enable-std-expected.patch4
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/include/tzdb/tzdb_list_private.h11
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/ios.cpp4
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/random.cpp4
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/tzdb.cpp27
-rw-r--r--contrib/libs/cxxsupp/libcxx/src/tzdb_list.cpp24
-rw-r--r--contrib/libs/cxxsupp/libcxx/ya.make4
236 files changed, 1960 insertions, 1971 deletions
diff --git a/build/sysincl/stl-to-libcxx.yml b/build/sysincl/stl-to-libcxx.yml
index 4838f72244..10ba71375a 100644
--- a/build/sysincl/stl-to-libcxx.yml
+++ b/build/sysincl/stl-to-libcxx.yml
@@ -418,6 +418,7 @@
- __algorithm/shift_right.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/shift_right.h
- __algorithm/shuffle.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/shuffle.h
- __algorithm/sift_down.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/sift_down.h
+ - __algorithm/simd_utils.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/simd_utils.h
- __algorithm/sort.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/sort.h
- __algorithm/sort_heap.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h
- __algorithm/stable_partition.h: contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_partition.h
@@ -577,7 +578,6 @@
- __format/format_context.h: contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
- __format/format_error.h: contrib/libs/cxxsupp/libcxx/include/__format/format_error.h
- __format/format_functions.h: contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h
- - __format/format_fwd.h: contrib/libs/cxxsupp/libcxx/include/__format/format_fwd.h
- __format/format_parse_context.h: contrib/libs/cxxsupp/libcxx/include/__format/format_parse_context.h
- __format/format_string.h: contrib/libs/cxxsupp/libcxx/include/__format/format_string.h
- __format/format_to_n_result.h: contrib/libs/cxxsupp/libcxx/include/__format/format_to_n_result.h
@@ -627,21 +627,27 @@
- __fwd/array.h: contrib/libs/cxxsupp/libcxx/include/__fwd/array.h
- __fwd/bit_reference.h: contrib/libs/cxxsupp/libcxx/include/__fwd/bit_reference.h
- __fwd/complex.h: contrib/libs/cxxsupp/libcxx/include/__fwd/complex.h
+ - __fwd/deque.h: contrib/libs/cxxsupp/libcxx/include/__fwd/deque.h
+ - __fwd/format.h: contrib/libs/cxxsupp/libcxx/include/__fwd/format.h
- __fwd/fstream.h: contrib/libs/cxxsupp/libcxx/include/__fwd/fstream.h
- __fwd/functional.h: contrib/libs/cxxsupp/libcxx/include/__fwd/functional.h
- __fwd/ios.h: contrib/libs/cxxsupp/libcxx/include/__fwd/ios.h
- __fwd/istream.h: contrib/libs/cxxsupp/libcxx/include/__fwd/istream.h
- __fwd/mdspan.h: contrib/libs/cxxsupp/libcxx/include/__fwd/mdspan.h
+ - __fwd/memory.h: contrib/libs/cxxsupp/libcxx/include/__fwd/memory.h
- __fwd/memory_resource.h: contrib/libs/cxxsupp/libcxx/include/__fwd/memory_resource.h
- __fwd/ostream.h: contrib/libs/cxxsupp/libcxx/include/__fwd/ostream.h
- __fwd/pair.h: contrib/libs/cxxsupp/libcxx/include/__fwd/pair.h
+ - __fwd/queue.h: contrib/libs/cxxsupp/libcxx/include/__fwd/queue.h
- __fwd/span.h: contrib/libs/cxxsupp/libcxx/include/__fwd/span.h
- __fwd/sstream.h: contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h
+ - __fwd/stack.h: contrib/libs/cxxsupp/libcxx/include/__fwd/stack.h
- __fwd/streambuf.h: contrib/libs/cxxsupp/libcxx/include/__fwd/streambuf.h
- __fwd/string.h: contrib/libs/cxxsupp/libcxx/include/__fwd/string.h
- __fwd/string_view.h: contrib/libs/cxxsupp/libcxx/include/__fwd/string_view.h
- __fwd/subrange.h: contrib/libs/cxxsupp/libcxx/include/__fwd/subrange.h
- __fwd/tuple.h: contrib/libs/cxxsupp/libcxx/include/__fwd/tuple.h
+ - __fwd/vector.h: contrib/libs/cxxsupp/libcxx/include/__fwd/vector.h
- __ios/fpos.h: contrib/libs/cxxsupp/libcxx/include/__ios/fpos.h
- __iterator/access.h: contrib/libs/cxxsupp/libcxx/include/__iterator/access.h
- __iterator/advance.h: contrib/libs/cxxsupp/libcxx/include/__iterator/advance.h
@@ -892,13 +898,14 @@
- __thread/this_thread.h: contrib/libs/cxxsupp/libcxx/include/__thread/this_thread.h
- __thread/thread.h: contrib/libs/cxxsupp/libcxx/include/__thread/thread.h
- __thread/timed_backoff_policy.h: contrib/libs/cxxsupp/libcxx/include/__thread/timed_backoff_policy.h
+ - __tuple/find_index.h: contrib/libs/cxxsupp/libcxx/include/__tuple/find_index.h
- __tuple/make_tuple_types.h: contrib/libs/cxxsupp/libcxx/include/__tuple/make_tuple_types.h
- - __tuple/pair_like.h: contrib/libs/cxxsupp/libcxx/include/__tuple/pair_like.h
- __tuple/sfinae_helpers.h: contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h
- __tuple/tuple_element.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h
- __tuple/tuple_indices.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_indices.h
- __tuple/tuple_like.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h
- __tuple/tuple_like_ext.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_ext.h
+ - __tuple/tuple_like_no_subrange.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_no_subrange.h
- __tuple/tuple_size.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h
- __tuple/tuple_types.h: contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_types.h
- __type_traits/add_const.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/add_const.h
@@ -945,10 +952,7 @@
- __type_traits/is_constant_evaluated.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constant_evaluated.h
- __type_traits/is_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h
- __type_traits/is_convertible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h
- - __type_traits/is_copy_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_assignable.h
- - __type_traits/is_copy_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_constructible.h
- __type_traits/is_core_convertible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_core_convertible.h
- - __type_traits/is_default_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_default_constructible.h
- __type_traits/is_destructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_destructible.h
- __type_traits/is_empty.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_empty.h
- __type_traits/is_enum.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_enum.h
@@ -964,17 +968,10 @@
- __type_traits/is_member_function_pointer.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_member_function_pointer.h
- __type_traits/is_member_object_pointer.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_member_object_pointer.h
- __type_traits/is_member_pointer.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_member_pointer.h
- - __type_traits/is_move_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_assignable.h
- - __type_traits/is_move_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_constructible.h
- __type_traits/is_nothrow_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h
- __type_traits/is_nothrow_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h
- __type_traits/is_nothrow_convertible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_convertible.h
- - __type_traits/is_nothrow_copy_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_assignable.h
- - __type_traits/is_nothrow_copy_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_constructible.h
- - __type_traits/is_nothrow_default_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_default_constructible.h
- __type_traits/is_nothrow_destructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_destructible.h
- - __type_traits/is_nothrow_move_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_assignable.h
- - __type_traits/is_nothrow_move_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_constructible.h
- __type_traits/is_null_pointer.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_null_pointer.h
- __type_traits/is_object.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_object.h
- __type_traits/is_pod.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_pod.h
@@ -995,14 +992,9 @@
- __type_traits/is_trivial.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivial.h
- __type_traits/is_trivially_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h
- __type_traits/is_trivially_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h
- - __type_traits/is_trivially_copy_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_assignable.h
- - __type_traits/is_trivially_copy_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_constructible.h
- __type_traits/is_trivially_copyable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copyable.h
- - __type_traits/is_trivially_default_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_default_constructible.h
- __type_traits/is_trivially_destructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_destructible.h
- __type_traits/is_trivially_lexicographically_comparable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_lexicographically_comparable.h
- - __type_traits/is_trivially_move_assignable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_assignable.h
- - __type_traits/is_trivially_move_constructible.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_constructible.h
- __type_traits/is_trivially_relocatable.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_relocatable.h
- __type_traits/is_unbounded_array.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_unbounded_array.h
- __type_traits/is_union.h: contrib/libs/cxxsupp/libcxx/include/__type_traits/is_union.h
diff --git a/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym b/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
index 8f91e0b60e..2ba2f81dd1 100644
--- a/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
+++ b/contrib/libs/cxxsupp/libcxx/.yandex_meta/build.ym
@@ -1,7 +1,7 @@
{% extends '//builtin/run.ym' %}
-{% block current_version %}80f9458cf30d13eef21b09042ea590945c5e64db{% endblock %}
-{% block current_date %}2024-03-05{% endblock %}
+{% block current_version %}239236b8c2154aa49e98bc7ed774a7d2712edf50{% endblock %}
+{% block current_date %}2024-04-02{% endblock %}
{% block keep_sources %}
.yandex_meta/scripts/sysincls.py
diff --git a/contrib/libs/cxxsupp/libcxx/.yandex_meta/devtools.licenses.report b/contrib/libs/cxxsupp/libcxx/.yandex_meta/devtools.licenses.report
index 084968d353..f65377500e 100644
--- a/contrib/libs/cxxsupp/libcxx/.yandex_meta/devtools.licenses.report
+++ b/contrib/libs/cxxsupp/libcxx/.yandex_meta/devtools.licenses.report
@@ -348,6 +348,7 @@ BELONGS ya.make
include/__algorithm/shift_right.h [3:4]
include/__algorithm/shuffle.h [3:4]
include/__algorithm/sift_down.h [3:4]
+ include/__algorithm/simd_utils.h [3:4]
include/__algorithm/sort.h [3:4]
include/__algorithm/sort_heap.h [3:4]
include/__algorithm/stable_partition.h [3:4]
@@ -513,7 +514,6 @@ BELONGS ya.make
include/__format/format_context.h [4:5]
include/__format/format_error.h [4:5]
include/__format/format_functions.h [4:5]
- include/__format/format_fwd.h [4:5]
include/__format/format_parse_context.h [4:5]
include/__format/format_string.h [4:5]
include/__format/format_to_n_result.h [4:5]
@@ -563,21 +563,27 @@ BELONGS ya.make
include/__fwd/array.h [3:4]
include/__fwd/bit_reference.h [3:4]
include/__fwd/complex.h [3:4]
+ include/__fwd/deque.h [3:4]
+ include/__fwd/format.h [4:5]
include/__fwd/fstream.h [3:4]
include/__fwd/functional.h [3:4]
include/__fwd/ios.h [3:4]
include/__fwd/istream.h [3:4]
include/__fwd/mdspan.h [4:5]
+ include/__fwd/memory.h [3:4]
include/__fwd/memory_resource.h [3:4]
include/__fwd/ostream.h [3:4]
include/__fwd/pair.h [3:4]
+ include/__fwd/queue.h [3:4]
include/__fwd/span.h [4:5]
include/__fwd/sstream.h [3:4]
+ include/__fwd/stack.h [3:4]
include/__fwd/streambuf.h [3:4]
include/__fwd/string.h [3:4]
include/__fwd/string_view.h [4:5]
include/__fwd/subrange.h [3:4]
include/__fwd/tuple.h [3:4]
+ include/__fwd/vector.h [3:4]
include/__hash_table [4:5]
include/__ios/fpos.h [4:5]
include/__iterator/access.h [4:5]
@@ -835,13 +841,14 @@ BELONGS ya.make
include/__thread/thread.h [4:5]
include/__thread/timed_backoff_policy.h [4:5]
include/__tree [4:5]
+ include/__tuple/find_index.h [3:4]
include/__tuple/make_tuple_types.h [3:4]
- include/__tuple/pair_like.h [3:4]
include/__tuple/sfinae_helpers.h [3:4]
include/__tuple/tuple_element.h [3:4]
include/__tuple/tuple_indices.h [3:4]
include/__tuple/tuple_like.h [3:4]
include/__tuple/tuple_like_ext.h [3:4]
+ include/__tuple/tuple_like_no_subrange.h [3:4]
include/__tuple/tuple_size.h [3:4]
include/__tuple/tuple_types.h [3:4]
include/__type_traits/add_const.h [3:4]
@@ -888,10 +895,7 @@ BELONGS ya.make
include/__type_traits/is_constant_evaluated.h [3:4]
include/__type_traits/is_constructible.h [3:4]
include/__type_traits/is_convertible.h [3:4]
- include/__type_traits/is_copy_assignable.h [3:4]
- include/__type_traits/is_copy_constructible.h [3:4]
include/__type_traits/is_core_convertible.h [3:4]
- include/__type_traits/is_default_constructible.h [3:4]
include/__type_traits/is_destructible.h [3:4]
include/__type_traits/is_empty.h [3:4]
include/__type_traits/is_enum.h [3:4]
@@ -907,17 +911,10 @@ BELONGS ya.make
include/__type_traits/is_member_function_pointer.h [3:4]
include/__type_traits/is_member_object_pointer.h [3:4]
include/__type_traits/is_member_pointer.h [3:4]
- include/__type_traits/is_move_assignable.h [3:4]
- include/__type_traits/is_move_constructible.h [3:4]
include/__type_traits/is_nothrow_assignable.h [3:4]
include/__type_traits/is_nothrow_constructible.h [3:4]
include/__type_traits/is_nothrow_convertible.h [3:4]
- include/__type_traits/is_nothrow_copy_assignable.h [3:4]
- include/__type_traits/is_nothrow_copy_constructible.h [3:4]
- include/__type_traits/is_nothrow_default_constructible.h [3:4]
include/__type_traits/is_nothrow_destructible.h [3:4]
- include/__type_traits/is_nothrow_move_assignable.h [3:4]
- include/__type_traits/is_nothrow_move_constructible.h [3:4]
include/__type_traits/is_null_pointer.h [3:4]
include/__type_traits/is_object.h [3:4]
include/__type_traits/is_pod.h [3:4]
@@ -938,14 +935,9 @@ BELONGS ya.make
include/__type_traits/is_trivial.h [3:4]
include/__type_traits/is_trivially_assignable.h [3:4]
include/__type_traits/is_trivially_constructible.h [3:4]
- include/__type_traits/is_trivially_copy_assignable.h [3:4]
- include/__type_traits/is_trivially_copy_constructible.h [3:4]
include/__type_traits/is_trivially_copyable.h [3:4]
- include/__type_traits/is_trivially_default_constructible.h [3:4]
include/__type_traits/is_trivially_destructible.h [3:4]
include/__type_traits/is_trivially_lexicographically_comparable.h [3:4]
- include/__type_traits/is_trivially_move_assignable.h [3:4]
- include/__type_traits/is_trivially_move_constructible.h [3:4]
include/__type_traits/is_trivially_relocatable.h [3:4]
include/__type_traits/is_unbounded_array.h [3:4]
include/__type_traits/is_union.h [3:4]
@@ -1481,6 +1473,7 @@ BELONGS ya.make
include/__algorithm/shift_right.h [3:4]
include/__algorithm/shuffle.h [3:4]
include/__algorithm/sift_down.h [3:4]
+ include/__algorithm/simd_utils.h [3:4]
include/__algorithm/sort.h [3:4]
include/__algorithm/sort_heap.h [3:4]
include/__algorithm/stable_partition.h [3:4]
@@ -1646,7 +1639,6 @@ BELONGS ya.make
include/__format/format_context.h [4:5]
include/__format/format_error.h [4:5]
include/__format/format_functions.h [4:5]
- include/__format/format_fwd.h [4:5]
include/__format/format_parse_context.h [4:5]
include/__format/format_string.h [4:5]
include/__format/format_to_n_result.h [4:5]
@@ -1696,21 +1688,27 @@ BELONGS ya.make
include/__fwd/array.h [3:4]
include/__fwd/bit_reference.h [3:4]
include/__fwd/complex.h [3:4]
+ include/__fwd/deque.h [3:4]
+ include/__fwd/format.h [4:5]
include/__fwd/fstream.h [3:4]
include/__fwd/functional.h [3:4]
include/__fwd/ios.h [3:4]
include/__fwd/istream.h [3:4]
include/__fwd/mdspan.h [4:5]
+ include/__fwd/memory.h [3:4]
include/__fwd/memory_resource.h [3:4]
include/__fwd/ostream.h [3:4]
include/__fwd/pair.h [3:4]
+ include/__fwd/queue.h [3:4]
include/__fwd/span.h [4:5]
include/__fwd/sstream.h [3:4]
+ include/__fwd/stack.h [3:4]
include/__fwd/streambuf.h [3:4]
include/__fwd/string.h [3:4]
include/__fwd/string_view.h [4:5]
include/__fwd/subrange.h [3:4]
include/__fwd/tuple.h [3:4]
+ include/__fwd/vector.h [3:4]
include/__hash_table [4:5]
include/__ios/fpos.h [4:5]
include/__iterator/access.h [4:5]
@@ -1968,13 +1966,14 @@ BELONGS ya.make
include/__thread/thread.h [4:5]
include/__thread/timed_backoff_policy.h [4:5]
include/__tree [4:5]
+ include/__tuple/find_index.h [3:4]
include/__tuple/make_tuple_types.h [3:4]
- include/__tuple/pair_like.h [3:4]
include/__tuple/sfinae_helpers.h [3:4]
include/__tuple/tuple_element.h [3:4]
include/__tuple/tuple_indices.h [3:4]
include/__tuple/tuple_like.h [3:4]
include/__tuple/tuple_like_ext.h [3:4]
+ include/__tuple/tuple_like_no_subrange.h [3:4]
include/__tuple/tuple_size.h [3:4]
include/__tuple/tuple_types.h [3:4]
include/__type_traits/add_const.h [3:4]
@@ -2021,10 +2020,7 @@ BELONGS ya.make
include/__type_traits/is_constant_evaluated.h [3:4]
include/__type_traits/is_constructible.h [3:4]
include/__type_traits/is_convertible.h [3:4]
- include/__type_traits/is_copy_assignable.h [3:4]
- include/__type_traits/is_copy_constructible.h [3:4]
include/__type_traits/is_core_convertible.h [3:4]
- include/__type_traits/is_default_constructible.h [3:4]
include/__type_traits/is_destructible.h [3:4]
include/__type_traits/is_empty.h [3:4]
include/__type_traits/is_enum.h [3:4]
@@ -2040,17 +2036,10 @@ BELONGS ya.make
include/__type_traits/is_member_function_pointer.h [3:4]
include/__type_traits/is_member_object_pointer.h [3:4]
include/__type_traits/is_member_pointer.h [3:4]
- include/__type_traits/is_move_assignable.h [3:4]
- include/__type_traits/is_move_constructible.h [3:4]
include/__type_traits/is_nothrow_assignable.h [3:4]
include/__type_traits/is_nothrow_constructible.h [3:4]
include/__type_traits/is_nothrow_convertible.h [3:4]
- include/__type_traits/is_nothrow_copy_assignable.h [3:4]
- include/__type_traits/is_nothrow_copy_constructible.h [3:4]
- include/__type_traits/is_nothrow_default_constructible.h [3:4]
include/__type_traits/is_nothrow_destructible.h [3:4]
- include/__type_traits/is_nothrow_move_assignable.h [3:4]
- include/__type_traits/is_nothrow_move_constructible.h [3:4]
include/__type_traits/is_null_pointer.h [3:4]
include/__type_traits/is_object.h [3:4]
include/__type_traits/is_pod.h [3:4]
@@ -2071,14 +2060,9 @@ BELONGS ya.make
include/__type_traits/is_trivial.h [3:4]
include/__type_traits/is_trivially_assignable.h [3:4]
include/__type_traits/is_trivially_constructible.h [3:4]
- include/__type_traits/is_trivially_copy_assignable.h [3:4]
- include/__type_traits/is_trivially_copy_constructible.h [3:4]
include/__type_traits/is_trivially_copyable.h [3:4]
- include/__type_traits/is_trivially_default_constructible.h [3:4]
include/__type_traits/is_trivially_destructible.h [3:4]
include/__type_traits/is_trivially_lexicographically_comparable.h [3:4]
- include/__type_traits/is_trivially_move_assignable.h [3:4]
- include/__type_traits/is_trivially_move_constructible.h [3:4]
include/__type_traits/is_trivially_relocatable.h [3:4]
include/__type_traits/is_unbounded_array.h [3:4]
include/__type_traits/is_union.h [3:4]
@@ -2673,6 +2657,7 @@ BELONGS ya.make
include/__algorithm/shift_right.h [5:5]
include/__algorithm/shuffle.h [5:5]
include/__algorithm/sift_down.h [5:5]
+ include/__algorithm/simd_utils.h [5:5]
include/__algorithm/sort.h [5:5]
include/__algorithm/sort_heap.h [5:5]
include/__algorithm/stable_partition.h [5:5]
@@ -2838,7 +2823,6 @@ BELONGS ya.make
include/__format/format_context.h [6:6]
include/__format/format_error.h [6:6]
include/__format/format_functions.h [6:6]
- include/__format/format_fwd.h [6:6]
include/__format/format_parse_context.h [6:6]
include/__format/format_string.h [6:6]
include/__format/format_to_n_result.h [6:6]
@@ -2888,21 +2872,27 @@ BELONGS ya.make
include/__fwd/array.h [5:5]
include/__fwd/bit_reference.h [5:5]
include/__fwd/complex.h [5:5]
+ include/__fwd/deque.h [5:5]
+ include/__fwd/format.h [6:6]
include/__fwd/fstream.h [5:5]
include/__fwd/functional.h [5:5]
include/__fwd/ios.h [5:5]
include/__fwd/istream.h [5:5]
include/__fwd/mdspan.h [6:6]
+ include/__fwd/memory.h [5:5]
include/__fwd/memory_resource.h [5:5]
include/__fwd/ostream.h [5:5]
include/__fwd/pair.h [5:5]
+ include/__fwd/queue.h [5:5]
include/__fwd/span.h [6:6]
include/__fwd/sstream.h [5:5]
+ include/__fwd/stack.h [5:5]
include/__fwd/streambuf.h [5:5]
include/__fwd/string.h [5:5]
include/__fwd/string_view.h [6:6]
include/__fwd/subrange.h [5:5]
include/__fwd/tuple.h [5:5]
+ include/__fwd/vector.h [5:5]
include/__hash_table [6:6]
include/__ios/fpos.h [6:6]
include/__iterator/access.h [6:6]
@@ -3160,13 +3150,14 @@ BELONGS ya.make
include/__thread/thread.h [6:6]
include/__thread/timed_backoff_policy.h [6:6]
include/__tree [6:6]
+ include/__tuple/find_index.h [5:5]
include/__tuple/make_tuple_types.h [5:5]
- include/__tuple/pair_like.h [5:5]
include/__tuple/sfinae_helpers.h [5:5]
include/__tuple/tuple_element.h [5:5]
include/__tuple/tuple_indices.h [5:5]
include/__tuple/tuple_like.h [5:5]
include/__tuple/tuple_like_ext.h [5:5]
+ include/__tuple/tuple_like_no_subrange.h [5:5]
include/__tuple/tuple_size.h [5:5]
include/__tuple/tuple_types.h [5:5]
include/__type_traits/add_const.h [5:5]
@@ -3213,10 +3204,7 @@ BELONGS ya.make
include/__type_traits/is_constant_evaluated.h [5:5]
include/__type_traits/is_constructible.h [5:5]
include/__type_traits/is_convertible.h [5:5]
- include/__type_traits/is_copy_assignable.h [5:5]
- include/__type_traits/is_copy_constructible.h [5:5]
include/__type_traits/is_core_convertible.h [5:5]
- include/__type_traits/is_default_constructible.h [5:5]
include/__type_traits/is_destructible.h [5:5]
include/__type_traits/is_empty.h [5:5]
include/__type_traits/is_enum.h [5:5]
@@ -3232,17 +3220,10 @@ BELONGS ya.make
include/__type_traits/is_member_function_pointer.h [5:5]
include/__type_traits/is_member_object_pointer.h [5:5]
include/__type_traits/is_member_pointer.h [5:5]
- include/__type_traits/is_move_assignable.h [5:5]
- include/__type_traits/is_move_constructible.h [5:5]
include/__type_traits/is_nothrow_assignable.h [5:5]
include/__type_traits/is_nothrow_constructible.h [5:5]
include/__type_traits/is_nothrow_convertible.h [5:5]
- include/__type_traits/is_nothrow_copy_assignable.h [5:5]
- include/__type_traits/is_nothrow_copy_constructible.h [5:5]
- include/__type_traits/is_nothrow_default_constructible.h [5:5]
include/__type_traits/is_nothrow_destructible.h [5:5]
- include/__type_traits/is_nothrow_move_assignable.h [5:5]
- include/__type_traits/is_nothrow_move_constructible.h [5:5]
include/__type_traits/is_null_pointer.h [5:5]
include/__type_traits/is_object.h [5:5]
include/__type_traits/is_pod.h [5:5]
@@ -3263,14 +3244,9 @@ BELONGS ya.make
include/__type_traits/is_trivial.h [5:5]
include/__type_traits/is_trivially_assignable.h [5:5]
include/__type_traits/is_trivially_constructible.h [5:5]
- include/__type_traits/is_trivially_copy_assignable.h [5:5]
- include/__type_traits/is_trivially_copy_constructible.h [5:5]
include/__type_traits/is_trivially_copyable.h [5:5]
- include/__type_traits/is_trivially_default_constructible.h [5:5]
include/__type_traits/is_trivially_destructible.h [5:5]
include/__type_traits/is_trivially_lexicographically_comparable.h [5:5]
- include/__type_traits/is_trivially_move_assignable.h [5:5]
- include/__type_traits/is_trivially_move_constructible.h [5:5]
include/__type_traits/is_trivially_relocatable.h [5:5]
include/__type_traits/is_unbounded_array.h [5:5]
include/__type_traits/is_union.h [5:5]
@@ -3820,6 +3796,7 @@ BELONGS ya.make
include/__algorithm/shift_right.h [5:5]
include/__algorithm/shuffle.h [5:5]
include/__algorithm/sift_down.h [5:5]
+ include/__algorithm/simd_utils.h [5:5]
include/__algorithm/sort.h [5:5]
include/__algorithm/sort_heap.h [5:5]
include/__algorithm/stable_partition.h [5:5]
@@ -3985,7 +3962,6 @@ BELONGS ya.make
include/__format/format_context.h [6:6]
include/__format/format_error.h [6:6]
include/__format/format_functions.h [6:6]
- include/__format/format_fwd.h [6:6]
include/__format/format_parse_context.h [6:6]
include/__format/format_string.h [6:6]
include/__format/format_to_n_result.h [6:6]
@@ -4035,21 +4011,27 @@ BELONGS ya.make
include/__fwd/array.h [5:5]
include/__fwd/bit_reference.h [5:5]
include/__fwd/complex.h [5:5]
+ include/__fwd/deque.h [5:5]
+ include/__fwd/format.h [6:6]
include/__fwd/fstream.h [5:5]
include/__fwd/functional.h [5:5]
include/__fwd/ios.h [5:5]
include/__fwd/istream.h [5:5]
include/__fwd/mdspan.h [6:6]
+ include/__fwd/memory.h [5:5]
include/__fwd/memory_resource.h [5:5]
include/__fwd/ostream.h [5:5]
include/__fwd/pair.h [5:5]
+ include/__fwd/queue.h [5:5]
include/__fwd/span.h [6:6]
include/__fwd/sstream.h [5:5]
+ include/__fwd/stack.h [5:5]
include/__fwd/streambuf.h [5:5]
include/__fwd/string.h [5:5]
include/__fwd/string_view.h [6:6]
include/__fwd/subrange.h [5:5]
include/__fwd/tuple.h [5:5]
+ include/__fwd/vector.h [5:5]
include/__hash_table [6:6]
include/__ios/fpos.h [6:6]
include/__iterator/access.h [6:6]
@@ -4307,13 +4289,14 @@ BELONGS ya.make
include/__thread/thread.h [6:6]
include/__thread/timed_backoff_policy.h [6:6]
include/__tree [6:6]
+ include/__tuple/find_index.h [5:5]
include/__tuple/make_tuple_types.h [5:5]
- include/__tuple/pair_like.h [5:5]
include/__tuple/sfinae_helpers.h [5:5]
include/__tuple/tuple_element.h [5:5]
include/__tuple/tuple_indices.h [5:5]
include/__tuple/tuple_like.h [5:5]
include/__tuple/tuple_like_ext.h [5:5]
+ include/__tuple/tuple_like_no_subrange.h [5:5]
include/__tuple/tuple_size.h [5:5]
include/__tuple/tuple_types.h [5:5]
include/__type_traits/add_const.h [5:5]
@@ -4360,10 +4343,7 @@ BELONGS ya.make
include/__type_traits/is_constant_evaluated.h [5:5]
include/__type_traits/is_constructible.h [5:5]
include/__type_traits/is_convertible.h [5:5]
- include/__type_traits/is_copy_assignable.h [5:5]
- include/__type_traits/is_copy_constructible.h [5:5]
include/__type_traits/is_core_convertible.h [5:5]
- include/__type_traits/is_default_constructible.h [5:5]
include/__type_traits/is_destructible.h [5:5]
include/__type_traits/is_empty.h [5:5]
include/__type_traits/is_enum.h [5:5]
@@ -4379,17 +4359,10 @@ BELONGS ya.make
include/__type_traits/is_member_function_pointer.h [5:5]
include/__type_traits/is_member_object_pointer.h [5:5]
include/__type_traits/is_member_pointer.h [5:5]
- include/__type_traits/is_move_assignable.h [5:5]
- include/__type_traits/is_move_constructible.h [5:5]
include/__type_traits/is_nothrow_assignable.h [5:5]
include/__type_traits/is_nothrow_constructible.h [5:5]
include/__type_traits/is_nothrow_convertible.h [5:5]
- include/__type_traits/is_nothrow_copy_assignable.h [5:5]
- include/__type_traits/is_nothrow_copy_constructible.h [5:5]
- include/__type_traits/is_nothrow_default_constructible.h [5:5]
include/__type_traits/is_nothrow_destructible.h [5:5]
- include/__type_traits/is_nothrow_move_assignable.h [5:5]
- include/__type_traits/is_nothrow_move_constructible.h [5:5]
include/__type_traits/is_null_pointer.h [5:5]
include/__type_traits/is_object.h [5:5]
include/__type_traits/is_pod.h [5:5]
@@ -4410,14 +4383,9 @@ BELONGS ya.make
include/__type_traits/is_trivial.h [5:5]
include/__type_traits/is_trivially_assignable.h [5:5]
include/__type_traits/is_trivially_constructible.h [5:5]
- include/__type_traits/is_trivially_copy_assignable.h [5:5]
- include/__type_traits/is_trivially_copy_constructible.h [5:5]
include/__type_traits/is_trivially_copyable.h [5:5]
- include/__type_traits/is_trivially_default_constructible.h [5:5]
include/__type_traits/is_trivially_destructible.h [5:5]
include/__type_traits/is_trivially_lexicographically_comparable.h [5:5]
- include/__type_traits/is_trivially_move_assignable.h [5:5]
- include/__type_traits/is_trivially_move_constructible.h [5:5]
include/__type_traits/is_trivially_relocatable.h [5:5]
include/__type_traits/is_unbounded_array.h [5:5]
include/__type_traits/is_union.h [5:5]
diff --git a/contrib/libs/cxxsupp/libcxx/.yandex_meta/licenses.list.txt b/contrib/libs/cxxsupp/libcxx/.yandex_meta/licenses.list.txt
index 17823c2647..c0f49ab3af 100644
--- a/contrib/libs/cxxsupp/libcxx/.yandex_meta/licenses.list.txt
+++ b/contrib/libs/cxxsupp/libcxx/.yandex_meta/licenses.list.txt
@@ -576,7 +576,6 @@ namespace std {
*/
-#include <__availability>
#include <__config>
#include <__memory/allocator.h>
#include <__memory/allocator_destructor.h>
@@ -588,9 +587,8 @@ namespace std {
#include <__type_traits/conditional.h>
#include <__type_traits/decay.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_copy_constructible.h>
#include <__type_traits/is_function.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_void.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy.h
index 4c3815405a..0890b895f5 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy.h
@@ -32,7 +32,7 @@ template <class, class _InIter, class _Sent, class _OutIter>
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter> __copy(_InIter, _Sent, _OutIter);
template <class _AlgPolicy>
-struct __copy_loop {
+struct __copy_impl {
template <class _InIter, class _Sent, class _OutIter>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter>
operator()(_InIter __first, _Sent __last, _OutIter __result) const {
@@ -94,9 +94,7 @@ struct __copy_loop {
__local_first = _Traits::__begin(++__segment_iterator);
}
}
-};
-struct __copy_trivial {
// At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer.
template <class _In, class _Out, __enable_if_t<__can_lower_copy_assignment_to_memmove<_In, _Out>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*>
@@ -108,7 +106,7 @@ struct __copy_trivial {
template <class _AlgPolicy, class _InIter, class _Sent, class _OutIter>
pair<_InIter, _OutIter> inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14
__copy(_InIter __first, _Sent __last, _OutIter __result) {
- return std::__dispatch_copy_or_move<_AlgPolicy, __copy_loop<_AlgPolicy>, __copy_trivial>(
+ return std::__copy_move_unwrap_iters<__copy_impl<_AlgPolicy> >(
std::move(__first), std::move(__last), std::move(__result));
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_backward.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_backward.h
index 3ec88d8bd5..73dc846a97 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_backward.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_backward.h
@@ -15,7 +15,7 @@
#include <__config>
#include <__iterator/segmented_iterator.h>
#include <__type_traits/common_type.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#include <__utility/pair.h>
@@ -33,7 +33,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InIter, _OutIter>
__copy_backward(_InIter __first, _Sent __last, _OutIter __result);
template <class _AlgPolicy>
-struct __copy_backward_loop {
+struct __copy_backward_impl {
template <class _InIter, class _Sent, class _OutIter>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter>
operator()(_InIter __first, _Sent __last, _OutIter __result) const {
@@ -104,9 +104,7 @@ struct __copy_backward_loop {
__local_last = _Traits::__end(__segment_iterator);
}
}
-};
-struct __copy_backward_trivial {
// At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer.
template <class _In, class _Out, __enable_if_t<__can_lower_copy_assignment_to_memmove<_In, _Out>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*>
@@ -118,7 +116,7 @@ struct __copy_backward_trivial {
template <class _AlgPolicy, class _BidirectionalIterator1, class _Sentinel, class _BidirectionalIterator2>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator1, _BidirectionalIterator2>
__copy_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result) {
- return std::__dispatch_copy_or_move<_AlgPolicy, __copy_backward_loop<_AlgPolicy>, __copy_backward_trivial>(
+ return std::__copy_move_unwrap_iters<__copy_backward_impl<_AlgPolicy> >(
std::move(__first), std::move(__last), std::move(__result));
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_move_common.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_move_common.h
index 0fc7a5e3ce..12a26c6d6a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_move_common.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/copy_move_common.h
@@ -19,7 +19,7 @@
#include <__type_traits/enable_if.h>
#include <__type_traits/is_always_bitcastable.h>
#include <__type_traits/is_constant_evaluated.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_trivially_assignable.h>
#include <__type_traits/is_trivially_copyable.h>
#include <__type_traits/is_volatile.h>
@@ -81,30 +81,17 @@ __copy_backward_trivial_impl(_In* __first, _In* __last, _Out* __result) {
// Iterator unwrapping and dispatching to the correct overload.
-template <class _F1, class _F2>
-struct __overload : _F1, _F2 {
- using _F1::operator();
- using _F2::operator();
-};
-
-template <class _InIter, class _Sent, class _OutIter, class = void>
-struct __can_rewrap : false_type {};
-
-template <class _InIter, class _Sent, class _OutIter>
-struct __can_rewrap<_InIter,
- _Sent,
- _OutIter,
- // Note that sentinels are always copy-constructible.
- __enable_if_t< is_copy_constructible<_InIter>::value && is_copy_constructible<_OutIter>::value > >
- : true_type {};
+template <class _InIter, class _OutIter>
+struct __can_rewrap
+ : integral_constant<bool, is_copy_constructible<_InIter>::value && is_copy_constructible<_OutIter>::value> {};
template <class _Algorithm,
class _InIter,
class _Sent,
class _OutIter,
- __enable_if_t<__can_rewrap<_InIter, _Sent, _OutIter>::value, int> = 0>
+ __enable_if_t<__can_rewrap<_InIter, _OutIter>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 pair<_InIter, _OutIter>
-__unwrap_and_dispatch(_InIter __first, _Sent __last, _OutIter __out_first) {
+__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) {
auto __range = std::__unwrap_range(__first, std::move(__last));
auto __result = _Algorithm()(std::move(__range.first), std::move(__range.second), std::__unwrap_iter(__out_first));
return std::make_pair(std::__rewrap_range<_Sent>(std::move(__first), std::move(__result.first)),
@@ -115,24 +102,12 @@ template <class _Algorithm,
class _InIter,
class _Sent,
class _OutIter,
- __enable_if_t<!__can_rewrap<_InIter, _Sent, _OutIter>::value, int> = 0>
+ __enable_if_t<!__can_rewrap<_InIter, _OutIter>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 pair<_InIter, _OutIter>
-__unwrap_and_dispatch(_InIter __first, _Sent __last, _OutIter __out_first) {
+__copy_move_unwrap_iters(_InIter __first, _Sent __last, _OutIter __out_first) {
return _Algorithm()(std::move(__first), std::move(__last), std::move(__out_first));
}
-template <class _AlgPolicy,
- class _NaiveAlgorithm,
- class _OptimizedAlgorithm,
- class _InIter,
- class _Sent,
- class _OutIter>
-_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 pair<_InIter, _OutIter>
-__dispatch_copy_or_move(_InIter __first, _Sent __last, _OutIter __out_first) {
- using _Algorithm = __overload<_NaiveAlgorithm, _OptimizedAlgorithm>;
- return std::__unwrap_and_dispatch<_Algorithm>(std::move(__first), std::move(__last), std::move(__out_first));
-}
-
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal.h
index 3c0e3060e3..c76a16b47f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal.h
@@ -69,20 +69,6 @@ equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first
}
#if _LIBCPP_STD_VER >= 14
-template <class _BinaryPredicate, class _InputIterator1, class _InputIterator2>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
-__equal(_InputIterator1 __first1,
- _InputIterator1 __last1,
- _InputIterator2 __first2,
- _InputIterator2 __last2,
- _BinaryPredicate __pred,
- input_iterator_tag,
- input_iterator_tag) {
- for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2)
- if (!__pred(*__first1, *__first2))
- return false;
- return __first1 == __last1 && __first2 == __last2;
-}
template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Pred, class _Proj1, class _Proj2>
_LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __equal_impl(
@@ -110,17 +96,18 @@ __equal_impl(_Tp* __first1, _Tp* __last1, _Up* __first2, _Up*, _Pred&, _Proj1&,
return std::__constexpr_memcmp_equal(__first1, __first2, __element_count(__last1 - __first1));
}
-template <class _BinaryPredicate, class _RandomAccessIterator1, class _RandomAccessIterator2>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
-__equal(_RandomAccessIterator1 __first1,
- _RandomAccessIterator1 __last1,
- _RandomAccessIterator2 __first2,
- _RandomAccessIterator2 __last2,
- _BinaryPredicate __pred,
- random_access_iterator_tag,
- random_access_iterator_tag) {
- if (std::distance(__first1, __last1) != std::distance(__first2, __last2))
- return false;
+template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
+_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
+equal(_InputIterator1 __first1,
+ _InputIterator1 __last1,
+ _InputIterator2 __first2,
+ _InputIterator2 __last2,
+ _BinaryPredicate __pred) {
+ if constexpr (__has_random_access_iterator_category<_InputIterator1>::value &&
+ __has_random_access_iterator_category<_InputIterator2>::value) {
+ if (std::distance(__first1, __last1) != std::distance(__first2, __last2))
+ return false;
+ }
__identity __proj;
return std::__equal_impl(
std::__unwrap_iter(__first1),
@@ -132,36 +119,13 @@ __equal(_RandomAccessIterator1 __first1,
__proj);
}
-template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
-_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
-equal(_InputIterator1 __first1,
- _InputIterator1 __last1,
- _InputIterator2 __first2,
- _InputIterator2 __last2,
- _BinaryPredicate __pred) {
- return std::__equal<_BinaryPredicate&>(
- __first1,
- __last1,
- __first2,
- __last2,
- __pred,
- typename iterator_traits<_InputIterator1>::iterator_category(),
- typename iterator_traits<_InputIterator2>::iterator_category());
-}
-
template <class _InputIterator1, class _InputIterator2>
_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 bool
equal(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _InputIterator2 __last2) {
- return std::__equal(
- __first1,
- __last1,
- __first2,
- __last2,
- __equal_to(),
- typename iterator_traits<_InputIterator1>::iterator_category(),
- typename iterator_traits<_InputIterator2>::iterator_category());
+ return std::equal(__first1, __last1, __first2, __last2, __equal_to());
}
-#endif
+
+#endif // _LIBCPP_STD_VER >= 14
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal_range.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal_range.h
index a942904319..2b086abf17 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal_range.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/equal_range.h
@@ -23,7 +23,7 @@
#include <__iterator/iterator_traits.h>
#include <__iterator/next.h>
#include <__type_traits/is_callable.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#include <__utility/pair.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/fill_n.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/fill_n.h
index 36f3349d9e..f29633f880 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/fill_n.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/fill_n.h
@@ -9,20 +9,76 @@
#ifndef _LIBCPP___ALGORITHM_FILL_N_H
#define _LIBCPP___ALGORITHM_FILL_N_H
+#include <__algorithm/min.h>
#include <__config>
+#include <__fwd/bit_reference.h>
#include <__iterator/iterator_traits.h>
+#include <__memory/pointer_traits.h>
#include <__utility/convert_to_integral.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
// fill_n isn't specialized for std::memset, because the compiler already optimizes the loop to a call to std::memset.
template <class _OutputIterator, class _Size, class _Tp>
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator
+__fill_n(_OutputIterator __first, _Size __n, const _Tp& __value);
+
+template <bool _FillVal, class _Cp>
+_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void
+__fill_n_bool(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n) {
+ using _It = __bit_iterator<_Cp, false>;
+ using __storage_type = typename _It::__storage_type;
+
+ const int __bits_per_word = _It::__bits_per_word;
+ // do first partial word
+ if (__first.__ctz_ != 0) {
+ __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
+ __storage_type __dn = std::min(__clz_f, __n);
+ __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
+ if (_FillVal)
+ *__first.__seg_ |= __m;
+ else
+ *__first.__seg_ &= ~__m;
+ __n -= __dn;
+ ++__first.__seg_;
+ }
+ // do middle whole words
+ __storage_type __nw = __n / __bits_per_word;
+ std::__fill_n(std::__to_address(__first.__seg_), __nw, _FillVal ? static_cast<__storage_type>(-1) : 0);
+ __n -= __nw * __bits_per_word;
+ // do last partial word
+ if (__n > 0) {
+ __first.__seg_ += __nw;
+ __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
+ if (_FillVal)
+ *__first.__seg_ |= __m;
+ else
+ *__first.__seg_ &= ~__m;
+ }
+}
+
+template <class _Cp, class _Size>
+inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 __bit_iterator<_Cp, false>
+__fill_n(__bit_iterator<_Cp, false> __first, _Size __n, const bool& __value) {
+ if (__n > 0) {
+ if (__value)
+ std::__fill_n_bool<true>(__first, __n);
+ else
+ std::__fill_n_bool<false>(__first, __n);
+ }
+ return __first + __n;
+}
+
+template <class _OutputIterator, class _Size, class _Tp>
+inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 _OutputIterator
__fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) {
for (; __n > 0; ++__first, (void)--__n)
*__first = __value;
@@ -37,4 +93,6 @@ fill_n(_OutputIterator __first, _Size __n, const _Tp& __value) {
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___ALGORITHM_FILL_N_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/inplace_merge.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/inplace_merge.h
index eb3c0bdbc2..a6bcc66a2f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/inplace_merge.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/inplace_merge.h
@@ -114,8 +114,8 @@ _LIBCPP_HIDE_FROM_ABI void __buffered_inplace_merge(
for (_BidirectionalIterator __i = __middle; __i != __last;
__d.template __incr<value_type>(), (void)++__i, (void)++__p)
::new ((void*)__p) value_type(_IterOps<_AlgPolicy>::__iter_move(__i));
- typedef __unconstrained_reverse_iterator<_BidirectionalIterator> _RBi;
- typedef __unconstrained_reverse_iterator<value_type*> _Rv;
+ typedef reverse_iterator<_BidirectionalIterator> _RBi;
+ typedef reverse_iterator<value_type*> _Rv;
typedef __invert<_Compare> _Inverted;
std::__half_inplace_merge<_AlgPolicy>(
_Rv(__p), _Rv(__buff), _RBi(__middle), _RBi(__first), _RBi(__last), _Inverted(__comp));
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/lexicographical_compare_three_way.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/lexicographical_compare_three_way.h
index 32de97d07a..50ebdc647a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/lexicographical_compare_three_way.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/lexicographical_compare_three_way.h
@@ -17,7 +17,7 @@
#include <__config>
#include <__iterator/iterator_traits.h>
#include <__type_traits/common_type.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/mismatch.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/mismatch.h
index d345b6048a..8abb273ac1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/mismatch.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/mismatch.h
@@ -11,23 +11,123 @@
#define _LIBCPP___ALGORITHM_MISMATCH_H
#include <__algorithm/comp.h>
+#include <__algorithm/min.h>
+#include <__algorithm/simd_utils.h>
+#include <__algorithm/unwrap_iter.h>
#include <__config>
-#include <__iterator/iterator_traits.h>
+#include <__functional/identity.h>
+#include <__type_traits/invoke.h>
+#include <__type_traits/is_constant_evaluated.h>
+#include <__type_traits/is_equality_comparable.h>
+#include <__type_traits/is_integral.h>
+#include <__type_traits/operation_traits.h>
+#include <__utility/move.h>
#include <__utility/pair.h>
+#include <__utility/unreachable.h>
+#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
_LIBCPP_BEGIN_NAMESPACE_STD
+template <class _Iter1, class _Sent1, class _Iter2, class _Pred, class _Proj1, class _Proj2>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2>
+__mismatch_loop(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
+ while (__first1 != __last1) {
+ if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2)))
+ break;
+ ++__first1;
+ ++__first2;
+ }
+ return std::make_pair(std::move(__first1), std::move(__first2));
+}
+
+template <class _Iter1, class _Sent1, class _Iter2, class _Pred, class _Proj1, class _Proj2>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2>
+__mismatch(_Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
+ return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2);
+}
+
+#if _LIBCPP_VECTORIZE_ALGORITHMS
+
+template <class _Tp,
+ class _Pred,
+ class _Proj1,
+ class _Proj2,
+ __enable_if_t<is_integral<_Tp>::value && __desugars_to<__equal_tag, _Pred, _Tp, _Tp>::value &&
+ __is_identity<_Proj1>::value && __is_identity<_Proj2>::value,
+ int> = 0>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Tp*, _Tp*>
+__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
+ constexpr size_t __unroll_count = 4;
+ constexpr size_t __vec_size = __native_vector_size<_Tp>;
+ using __vec = __simd_vector<_Tp, __vec_size>;
+
+ if (!__libcpp_is_constant_evaluated()) {
+ auto __orig_first1 = __first1;
+ auto __last2 = __first2 + (__last1 - __first1);
+ while (static_cast<size_t>(__last1 - __first1) >= __unroll_count * __vec_size) [[__unlikely__]] {
+ __vec __lhs[__unroll_count];
+ __vec __rhs[__unroll_count];
+
+ for (size_t __i = 0; __i != __unroll_count; ++__i) {
+ __lhs[__i] = std::__load_vector<__vec>(__first1 + __i * __vec_size);
+ __rhs[__i] = std::__load_vector<__vec>(__first2 + __i * __vec_size);
+ }
+
+ for (size_t __i = 0; __i != __unroll_count; ++__i) {
+ if (auto __cmp_res = __lhs[__i] == __rhs[__i]; !std::__all_of(__cmp_res)) {
+ auto __offset = __i * __vec_size + std::__find_first_not_set(__cmp_res);
+ return {__first1 + __offset, __first2 + __offset};
+ }
+ }
+
+ __first1 += __unroll_count * __vec_size;
+ __first2 += __unroll_count * __vec_size;
+ }
+
+ // check the remaining 0-3 vectors
+ while (static_cast<size_t>(__last1 - __first1) >= __vec_size) {
+ if (auto __cmp_res = std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2);
+ !std::__all_of(__cmp_res)) {
+ auto __offset = std::__find_first_not_set(__cmp_res);
+ return {__first1 + __offset, __first2 + __offset};
+ }
+ __first1 += __vec_size;
+ __first2 += __vec_size;
+ }
+
+ if (__last1 - __first1 == 0)
+ return {__first1, __first2};
+
+ // Check if we can load elements in front of the current pointer. If that's the case load a vector at
+ // (last - vector_size) to check the remaining elements
+ if (static_cast<size_t>(__first1 - __orig_first1) >= __vec_size) {
+ __first1 = __last1 - __vec_size;
+ __first2 = __last2 - __vec_size;
+ auto __offset =
+ std::__find_first_not_set(std::__load_vector<__vec>(__first1) == std::__load_vector<__vec>(__first2));
+ return {__first1 + __offset, __first2 + __offset};
+ } // else loop over the elements individually
+ }
+
+ return std::__mismatch_loop(__first1, __last1, __first2, __pred, __proj1, __proj2);
+}
+
+#endif // _LIBCPP_VECTORIZE_ALGORITHMS
+
template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _BinaryPredicate __pred) {
- for (; __first1 != __last1; ++__first1, (void)++__first2)
- if (!__pred(*__first1, *__first2))
- break;
- return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+ __identity __proj;
+ auto __res = std::__mismatch(
+ std::__unwrap_iter(__first1), std::__unwrap_iter(__last1), std::__unwrap_iter(__first2), __pred, __proj, __proj);
+ return std::make_pair(std::__rewrap_iter(__first1, __res.first), std::__rewrap_iter(__first2, __res.second));
}
template <class _InputIterator1, class _InputIterator2>
@@ -37,6 +137,25 @@ mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __fi
}
#if _LIBCPP_STD_VER >= 14
+template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Pred, class _Proj1, class _Proj2>
+[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Iter1, _Iter2> __mismatch(
+ _Iter1 __first1, _Sent1 __last1, _Iter2 __first2, _Sent2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
+ while (__first1 != __last1 && __first2 != __last2) {
+ if (!std::__invoke(__pred, std::__invoke(__proj1, *__first1), std::__invoke(__proj2, *__first2)))
+ break;
+ ++__first1;
+ ++__first2;
+ }
+ return {std::move(__first1), std::move(__first2)};
+}
+
+template <class _Tp, class _Pred, class _Proj1, class _Proj2>
+[[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_Tp*, _Tp*>
+__mismatch(_Tp* __first1, _Tp* __last1, _Tp* __first2, _Tp* __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
+ auto __len = std::min(__last1 - __first1, __last2 - __first2);
+ return std::__mismatch(__first1, __first1 + __len, __first2, __pred, __proj1, __proj2);
+}
+
template <class _InputIterator1, class _InputIterator2, class _BinaryPredicate>
_LIBCPP_NODISCARD_EXT inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_InputIterator1, _InputIterator2>
mismatch(_InputIterator1 __first1,
@@ -44,10 +163,16 @@ mismatch(_InputIterator1 __first1,
_InputIterator2 __first2,
_InputIterator2 __last2,
_BinaryPredicate __pred) {
- for (; __first1 != __last1 && __first2 != __last2; ++__first1, (void)++__first2)
- if (!__pred(*__first1, *__first2))
- break;
- return pair<_InputIterator1, _InputIterator2>(__first1, __first2);
+ __identity __proj;
+ auto __res = std::__mismatch(
+ std::__unwrap_iter(__first1),
+ std::__unwrap_iter(__last1),
+ std::__unwrap_iter(__first2),
+ std::__unwrap_iter(__last2),
+ __pred,
+ __proj,
+ __proj);
+ return {std::__rewrap_iter(__first1, __res.first), std::__rewrap_iter(__first2, __res.second)};
}
template <class _InputIterator1, class _InputIterator2>
@@ -59,4 +184,6 @@ mismatch(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __fi
_LIBCPP_END_NAMESPACE_STD
+_LIBCPP_POP_MACROS
+
#endif // _LIBCPP___ALGORITHM_MISMATCH_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/move.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/move.h
index dba6d487ff..1716d43e2a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/move.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/move.h
@@ -16,7 +16,7 @@
#include <__config>
#include <__iterator/segmented_iterator.h>
#include <__type_traits/common_type.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#include <__utility/pair.h>
@@ -34,7 +34,7 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIte
__move(_InIter __first, _Sent __last, _OutIter __result);
template <class _AlgPolicy>
-struct __move_loop {
+struct __move_impl {
template <class _InIter, class _Sent, class _OutIter>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter>
operator()(_InIter __first, _Sent __last, _OutIter __result) const {
@@ -95,9 +95,7 @@ struct __move_loop {
__local_first = _Traits::__begin(++__segment_iterator);
}
}
-};
-struct __move_trivial {
// At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer.
template <class _In, class _Out, __enable_if_t<__can_lower_move_assignment_to_memmove<_In, _Out>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*>
@@ -109,7 +107,7 @@ struct __move_trivial {
template <class _AlgPolicy, class _InIter, class _Sent, class _OutIter>
inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter>
__move(_InIter __first, _Sent __last, _OutIter __result) {
- return std::__dispatch_copy_or_move<_AlgPolicy, __move_loop<_AlgPolicy>, __move_trivial>(
+ return std::__copy_move_unwrap_iters<__move_impl<_AlgPolicy> >(
std::move(__first), std::move(__last), std::move(__result));
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/move_backward.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/move_backward.h
index aeedf4241d..4beb7bdbaa 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/move_backward.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/move_backward.h
@@ -15,7 +15,7 @@
#include <__config>
#include <__iterator/segmented_iterator.h>
#include <__type_traits/common_type.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#include <__utility/pair.h>
@@ -33,7 +33,7 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_BidirectionalIterator1
__move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _BidirectionalIterator2 __result);
template <class _AlgPolicy>
-struct __move_backward_loop {
+struct __move_backward_impl {
template <class _InIter, class _Sent, class _OutIter>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_InIter, _OutIter>
operator()(_InIter __first, _Sent __last, _OutIter __result) const {
@@ -104,9 +104,7 @@ struct __move_backward_loop {
__local_last = _Traits::__end(--__segment_iterator);
}
}
-};
-struct __move_backward_trivial {
// At this point, the iterators have been unwrapped so any `contiguous_iterator` has been unwrapped to a pointer.
template <class _In, class _Out, __enable_if_t<__can_lower_move_assignment_to_memmove<_In, _Out>::value, int> = 0>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair<_In*, _Out*>
@@ -122,7 +120,7 @@ __move_backward(_BidirectionalIterator1 __first, _Sentinel __last, _Bidirectiona
std::is_copy_constructible<_BidirectionalIterator1>::value,
"Iterators must be copy constructible.");
- return std::__dispatch_copy_or_move<_AlgPolicy, __move_backward_loop<_AlgPolicy>, __move_backward_trivial>(
+ return std::__copy_move_unwrap_iters<__move_backward_impl<_AlgPolicy> >(
std::move(__first), std::move(__last), std::move(__result));
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/partial_sort.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/partial_sort.h
index 85a8fdc77a..7f8d0c4914 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/partial_sort.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/partial_sort.h
@@ -18,8 +18,8 @@
#include <__config>
#include <__debug_utils/randomize_range.h>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/pop_heap.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/pop_heap.h
index 798a1d0993..6d23830097 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/pop_heap.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/pop_heap.h
@@ -17,8 +17,8 @@
#include <__assert>
#include <__config>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/push_heap.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/push_heap.h
index 7d8720e3a9..ec0b445f2b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/push_heap.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/push_heap.h
@@ -14,8 +14,8 @@
#include <__algorithm/iterator_operations.h>
#include <__config>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_ends_with.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_ends_with.h
index c2a3cae9f3..bb01918326 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_ends_with.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_ends_with.h
@@ -39,7 +39,7 @@ namespace ranges {
namespace __ends_with {
struct __fn {
template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Pred, class _Proj1, class _Proj2>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __ends_with_fn_impl_bidirectional(
+ _LIBCPP_HIDE_FROM_ABI static constexpr bool __ends_with_fn_impl_bidirectional(
_Iter1 __first1,
_Sent1 __last1,
_Iter2 __first2,
@@ -56,7 +56,7 @@ struct __fn {
}
template <class _Iter1, class _Sent1, class _Iter2, class _Sent2, class _Pred, class _Proj1, class _Proj2>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __ends_with_fn_impl(
+ _LIBCPP_HIDE_FROM_ABI static constexpr bool __ends_with_fn_impl(
_Iter1 __first1,
_Sent1 __last1,
_Iter2 __first2,
@@ -65,7 +65,7 @@ struct __fn {
_Proj1& __proj1,
_Proj2& __proj2) {
if constexpr (std::bidirectional_iterator<_Sent1> && std::bidirectional_iterator<_Sent2> &&
- (!std::random_access_iterator<_Sent1>)&&(!std::random_access_iterator<_Sent2>)) {
+ (!std::random_access_iterator<_Sent1>) && (!std::random_access_iterator<_Sent2>)) {
return __ends_with_fn_impl_bidirectional(__first1, __last1, __first2, __last2, __pred, __proj1, __proj2);
} else {
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_mismatch.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_mismatch.h
index 037af39126..d8a7dd43af 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_mismatch.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_mismatch.h
@@ -10,6 +10,8 @@
#define _LIBCPP___ALGORITHM_RANGES_MISMATCH_H
#include <__algorithm/in_in_result.h>
+#include <__algorithm/mismatch.h>
+#include <__algorithm/unwrap_range.h>
#include <__config>
#include <__functional/identity.h>
#include <__functional/invoke.h>
@@ -42,13 +44,17 @@ struct __fn {
template <class _I1, class _S1, class _I2, class _S2, class _Pred, class _Proj1, class _Proj2>
static _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result<_I1, _I2>
__go(_I1 __first1, _S1 __last1, _I2 __first2, _S2 __last2, _Pred& __pred, _Proj1& __proj1, _Proj2& __proj2) {
- while (__first1 != __last1 && __first2 != __last2) {
- if (!std::invoke(__pred, std::invoke(__proj1, *__first1), std::invoke(__proj2, *__first2)))
- break;
- ++__first1;
- ++__first2;
+ if constexpr (forward_iterator<_I1> && forward_iterator<_I2>) {
+ auto __range1 = std::__unwrap_range(__first1, __last1);
+ auto __range2 = std::__unwrap_range(__first2, __last2);
+ auto __res =
+ std::__mismatch(__range1.first, __range1.second, __range2.first, __range2.second, __pred, __proj1, __proj2);
+ return {std::__rewrap_range<_S1>(__first1, __res.first), std::__rewrap_range<_S2>(__first2, __res.second)};
+ } else {
+ auto __res = std::__mismatch(
+ std::move(__first1), std::move(__last1), std::move(__first2), std::move(__last2), __pred, __proj1, __proj2);
+ return {std::move(__res.first), std::move(__res.second)};
}
- return {std::move(__first1), std::move(__first2)};
}
template <input_iterator _I1,
@@ -71,8 +77,8 @@ struct __fn {
class _Proj1 = identity,
class _Proj2 = identity>
requires indirectly_comparable<iterator_t<_R1>, iterator_t<_R2>, _Pred, _Proj1, _Proj2>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result<borrowed_iterator_t<_R1>,
- borrowed_iterator_t<_R2>>
+ _LIBCPP_NODISCARD_EXT
+ _LIBCPP_HIDE_FROM_ABI constexpr mismatch_result<borrowed_iterator_t<_R1>, borrowed_iterator_t<_R2>>
operator()(_R1&& __r1, _R2&& __r2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const {
return __go(
ranges::begin(__r1), ranges::end(__r1), ranges::begin(__r2), ranges::end(__r2), __pred, __proj1, __proj2);
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_starts_with.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_starts_with.h
index 90e184aa9b..7ba8af13a8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_starts_with.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/ranges_starts_with.h
@@ -42,14 +42,14 @@ struct __fn {
class _Proj1 = identity,
class _Proj2 = identity>
requires indirectly_comparable<_Iter1, _Iter2, _Pred, _Proj1, _Proj2>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr bool operator()(
_Iter1 __first1,
_Sent1 __last1,
_Iter2 __first2,
_Sent2 __last2,
_Pred __pred = {},
_Proj1 __proj1 = {},
- _Proj2 __proj2 = {}) const {
+ _Proj2 __proj2 = {}) {
return __mismatch::__fn::__go(
std::move(__first1),
std::move(__last1),
@@ -67,8 +67,8 @@ struct __fn {
class _Proj1 = identity,
class _Proj2 = identity>
requires indirectly_comparable<iterator_t<_Range1>, iterator_t<_Range2>, _Pred, _Proj1, _Proj2>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr bool operator()(
- _Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) const {
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr bool
+ operator()(_Range1&& __range1, _Range2&& __range2, _Pred __pred = {}, _Proj1 __proj1 = {}, _Proj2 __proj2 = {}) {
return __mismatch::__fn::__go(
ranges::begin(__range1),
ranges::end(__range1),
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/rotate.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/rotate.h
index 9a4d07883e..df4ca95aac 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/rotate.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/rotate.h
@@ -15,7 +15,7 @@
#include <__algorithm/swap_ranges.h>
#include <__config>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_trivially_move_assignable.h>
+#include <__type_traits/is_trivially_assignable.h>
#include <__utility/move.h>
#include <__utility/pair.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/simd_utils.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/simd_utils.h
new file mode 100644
index 0000000000..3548c00aa3
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/simd_utils.h
@@ -0,0 +1,130 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___ALGORITHM_SIMD_UTILS_H
+#define _LIBCPP___ALGORITHM_SIMD_UTILS_H
+
+#include <__algorithm/min.h>
+#include <__bit/bit_cast.h>
+#include <__bit/countr.h>
+#include <__config>
+#include <__type_traits/is_arithmetic.h>
+#include <__type_traits/is_same.h>
+#include <__utility/integer_sequence.h>
+#include <cstddef>
+#include <cstdint>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_PUSH_MACROS
+#include <__undef_macros>
+
+// TODO: Find out how altivec changes things and allow vectorizations there too.
+#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1700 && !defined(__ALTIVEC__) && !defined(__CUDACC__) && !(defined(_MSC_VER) && _LIBCPP_CLANG_VER <= 1801)
+# define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 1
+#else
+# define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0
+#endif
+
+#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS && !defined(__OPTIMIZE_SIZE__)
+# define _LIBCPP_VECTORIZE_ALGORITHMS 1
+#else
+# define _LIBCPP_VECTORIZE_ALGORITHMS 0
+#endif
+
+#if _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+// This isn't specialized for 64 byte vectors on purpose. They have the potential to significantly reduce performance
+// in mixed simd/non-simd workloads and don't provide any performance improvement for currently vectorized algorithms
+// as far as benchmarks are concerned.
+# if defined(__AVX__)
+template <class _Tp>
+inline constexpr size_t __native_vector_size = 32 / sizeof(_Tp);
+# elif defined(__SSE__) || defined(__ARM_NEON__)
+template <class _Tp>
+inline constexpr size_t __native_vector_size = 16 / sizeof(_Tp);
+# elif defined(__MMX__)
+template <class _Tp>
+inline constexpr size_t __native_vector_size = 8 / sizeof(_Tp);
+# else
+template <class _Tp>
+inline constexpr size_t __native_vector_size = 1;
+# endif
+
+template <class _ArithmeticT, size_t _Np>
+using __simd_vector __attribute__((__ext_vector_type__(_Np))) = _ArithmeticT;
+
+template <class _VecT>
+inline constexpr size_t __simd_vector_size_v = []<bool _False = false>() -> size_t {
+ static_assert(_False, "Not a vector!");
+}();
+
+template <class _Tp, size_t _Np>
+inline constexpr size_t __simd_vector_size_v<__simd_vector<_Tp, _Np>> = _Np;
+
+template <class _Tp, size_t _Np>
+_LIBCPP_HIDE_FROM_ABI _Tp __simd_vector_underlying_type_impl(__simd_vector<_Tp, _Np>) {
+ return _Tp{};
+}
+
+template <class _VecT>
+using __simd_vector_underlying_type_t = decltype(std::__simd_vector_underlying_type_impl(_VecT{}));
+
+// This isn't inlined without always_inline when loading chars.
+template <class _VecT, class _Tp>
+_LIBCPP_NODISCARD _LIBCPP_ALWAYS_INLINE _LIBCPP_HIDE_FROM_ABI _VecT __load_vector(const _Tp* __ptr) noexcept {
+ return [=]<size_t... _Indices>(index_sequence<_Indices...>) _LIBCPP_ALWAYS_INLINE noexcept {
+ return _VecT{__ptr[_Indices]...};
+ }(make_index_sequence<__simd_vector_size_v<_VecT>>{});
+}
+
+template <class _Tp, size_t _Np>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI bool __all_of(__simd_vector<_Tp, _Np> __vec) noexcept {
+ return __builtin_reduce_and(__builtin_convertvector(__vec, __simd_vector<bool, _Np>));
+}
+
+template <class _Tp, size_t _Np>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_set(__simd_vector<_Tp, _Np> __vec) noexcept {
+ using __mask_vec = __simd_vector<bool, _Np>;
+
+ // This has MSan disabled du to https://github.com/llvm/llvm-project/issues/85876
+ auto __impl = [&]<class _MaskT>(_MaskT) _LIBCPP_NO_SANITIZE("memory") noexcept {
+ return std::min<size_t>(
+ _Np, std::__countr_zero(__builtin_bit_cast(_MaskT, __builtin_convertvector(__vec, __mask_vec))));
+ };
+
+ if constexpr (sizeof(__mask_vec) == sizeof(uint8_t)) {
+ return __impl(uint8_t{});
+ } else if constexpr (sizeof(__mask_vec) == sizeof(uint16_t)) {
+ return __impl(uint16_t{});
+ } else if constexpr (sizeof(__mask_vec) == sizeof(uint32_t)) {
+ return __impl(uint32_t{});
+ } else if constexpr (sizeof(__mask_vec) == sizeof(uint64_t)) {
+ return __impl(uint64_t{});
+ } else {
+ static_assert(sizeof(__mask_vec) == 0, "unexpected required size for mask integer type");
+ return 0;
+ }
+}
+
+template <class _Tp, size_t _Np>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI size_t __find_first_not_set(__simd_vector<_Tp, _Np> __vec) noexcept {
+ return std::__find_first_set(~__vec);
+}
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS
+
+_LIBCPP_POP_MACROS
+
+#endif // _LIBCPP___ALGORITHM_SIMD_UTILS_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h
index 060fc33c3c..f20b110c7f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/sort_heap.h
@@ -16,8 +16,8 @@
#include <__config>
#include <__debug_utils/strict_weak_ordering_check.h>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_sort.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_sort.h
index 9be192bd65..726e7e16b3 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_sort.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/stable_sort.h
@@ -20,7 +20,7 @@
#include <__memory/destruct_n.h>
#include <__memory/temporary_buffer.h>
#include <__memory/unique_ptr.h>
-#include <__type_traits/is_trivially_copy_assignable.h>
+#include <__type_traits/is_trivially_assignable.h>
#include <__utility/move.h>
#include <__utility/pair.h>
#include <new>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/unwrap_iter.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/unwrap_iter.h
index 50d815c970..8cc0d22d4f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/unwrap_iter.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/unwrap_iter.h
@@ -13,7 +13,7 @@
#include <__iterator/iterator_traits.h>
#include <__memory/pointer_traits.h>
#include <__type_traits/enable_if.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/declval.h>
#include <__utility/move.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__algorithm/upper_bound.h b/contrib/libs/cxxsupp/libcxx/include/__algorithm/upper_bound.h
index f499f7a80a..9c7d8fbcde 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__algorithm/upper_bound.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__algorithm/upper_bound.h
@@ -18,7 +18,7 @@
#include <__iterator/advance.h>
#include <__iterator/distance.h>
#include <__iterator/iterator_traits.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__utility/move.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__atomic/atomic_base.h b/contrib/libs/cxxsupp/libcxx/include/__atomic/atomic_base.h
index 6ca01a7f1b..e9badccc25 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__atomic/atomic_base.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__atomic/atomic_base.h
@@ -18,7 +18,7 @@
#include <__config>
#include <__memory/addressof.h>
#include <__type_traits/is_integral.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_same.h>
#include <version>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__availability b/contrib/libs/cxxsupp/libcxx/include/__availability
index 78438c55a3..bb3ed0a8da 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__availability
+++ b/contrib/libs/cxxsupp/libcxx/include/__availability
@@ -72,11 +72,10 @@
# endif
#endif
-// Availability markup is disabled when building the library, or when the compiler
+// Availability markup is disabled when building the library, or when a non-Clang
+// compiler is used because only Clang supports the necessary attributes.
// doesn't support the proper attributes.
-#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || \
- !__has_feature(attribute_availability_with_strict) || !__has_feature(attribute_availability_in_templates) || \
- !__has_extension(pragma_clang_attribute_external_declaration)
+#if defined(_LIBCPP_BUILDING_LIBRARY) || defined(_LIBCXXABI_BUILDING_LIBRARY) || !defined(_LIBCPP_COMPILER_CLANG_BASED)
# if !defined(_LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS)
# define _LIBCPP_HAS_NO_VENDOR_AVAILABILITY_ANNOTATIONS
# endif
diff --git a/contrib/libs/cxxsupp/libcxx/include/__bit/bit_cast.h b/contrib/libs/cxxsupp/libcxx/include/__bit/bit_cast.h
index f20b39ae74..6298810f37 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__bit/bit_cast.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__bit/bit_cast.h
@@ -19,6 +19,15 @@
_LIBCPP_BEGIN_NAMESPACE_STD
+#ifndef _LIBCPP_CXX03_LANG
+
+template <class _ToType, class _FromType>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI constexpr _ToType __bit_cast(const _FromType& __from) noexcept {
+ return __builtin_bit_cast(_ToType, __from);
+}
+
+#endif // _LIBCPP_CXX03_LANG
+
#if _LIBCPP_STD_VER >= 20
template <class _ToType, class _FromType>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__bit/countr.h b/contrib/libs/cxxsupp/libcxx/include/__bit/countr.h
index 0cc679f87a..b6b3ac52ca 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__bit/countr.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__bit/countr.h
@@ -35,10 +35,8 @@ _LIBCPP_NODISCARD inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR int __libcpp_ct
return __builtin_ctzll(__x);
}
-#if _LIBCPP_STD_VER >= 20
-
-template <__libcpp_unsigned_integer _Tp>
-_LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr int countr_zero(_Tp __t) noexcept {
+template <class _Tp>
+_LIBCPP_NODISCARD _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 int __countr_zero(_Tp __t) _NOEXCEPT {
if (__t == 0)
return numeric_limits<_Tp>::digits;
@@ -59,6 +57,13 @@ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr int countr_zero(_Tp __t) n
}
}
+#if _LIBCPP_STD_VER >= 20
+
+template <__libcpp_unsigned_integer _Tp>
+_LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr int countr_zero(_Tp __t) noexcept {
+ return std::__countr_zero(__t);
+}
+
template <__libcpp_unsigned_integer _Tp>
_LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr int countr_one(_Tp __t) noexcept {
return __t != numeric_limits<_Tp>::max() ? std::countr_zero(static_cast<_Tp>(~__t)) : numeric_limits<_Tp>::digits;
diff --git a/contrib/libs/cxxsupp/libcxx/include/__bit_reference b/contrib/libs/cxxsupp/libcxx/include/__bit_reference
index 3a5339b72d..9579b9eaf7 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__bit_reference
+++ b/contrib/libs/cxxsupp/libcxx/include/__bit_reference
@@ -171,61 +171,6 @@ private:
__bit_const_reference& operator=(const __bit_const_reference&) = delete;
};
-// fill_n
-
-template <bool _FillVal, class _Cp>
-_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void
-__fill_n(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n) {
- using _It = __bit_iterator<_Cp, false>;
- using __storage_type = typename _It::__storage_type;
-
- const int __bits_per_word = _It::__bits_per_word;
- // do first partial word
- if (__first.__ctz_ != 0) {
- __storage_type __clz_f = static_cast<__storage_type>(__bits_per_word - __first.__ctz_);
- __storage_type __dn = std::min(__clz_f, __n);
- __storage_type __m = (~__storage_type(0) << __first.__ctz_) & (~__storage_type(0) >> (__clz_f - __dn));
- if (_FillVal)
- *__first.__seg_ |= __m;
- else
- *__first.__seg_ &= ~__m;
- __n -= __dn;
- ++__first.__seg_;
- }
- // do middle whole words
- __storage_type __nw = __n / __bits_per_word;
- std::fill_n(std::__to_address(__first.__seg_), __nw, _FillVal ? static_cast<__storage_type>(-1) : 0);
- __n -= __nw * __bits_per_word;
- // do last partial word
- if (__n > 0) {
- __first.__seg_ += __nw;
- __storage_type __m = ~__storage_type(0) >> (__bits_per_word - __n);
- if (_FillVal)
- *__first.__seg_ |= __m;
- else
- *__first.__seg_ &= ~__m;
- }
-}
-
-template <class _Cp>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void
-fill_n(__bit_iterator<_Cp, false> __first, typename _Cp::size_type __n, bool __value) {
- if (__n > 0) {
- if (__value)
- std::__fill_n<true>(__first, __n);
- else
- std::__fill_n<false>(__first, __n);
- }
-}
-
-// fill
-
-template <class _Cp>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 void
-fill(__bit_iterator<_Cp, false> __first, __bit_iterator<_Cp, false> __last, bool __value) {
- std::fill_n(__first, static_cast<typename _Cp::size_type>(__last - __first), __value);
-}
-
// copy
template <class _Cp, bool _IsConst>
@@ -1007,8 +952,10 @@ private:
friend class __bit_iterator<_Cp, true>;
template <class _Dp>
friend struct __bit_array;
+
template <bool _FillVal, class _Dp>
- _LIBCPP_CONSTEXPR_SINCE_CXX20 friend void __fill_n(__bit_iterator<_Dp, false> __first, typename _Dp::size_type __n);
+ _LIBCPP_CONSTEXPR_SINCE_CXX20 friend void
+ __fill_n_bool(__bit_iterator<_Dp, false> __first, typename _Dp::size_type __n);
template <class _Dp, bool _IC>
_LIBCPP_CONSTEXPR_SINCE_CXX20 friend __bit_iterator<_Dp, false> __copy_aligned(
diff --git a/contrib/libs/cxxsupp/libcxx/include/__chrono/tzdb_list.h b/contrib/libs/cxxsupp/libcxx/include/__chrono/tzdb_list.h
index 112e04ff2e..e8aaf31e36 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__chrono/tzdb_list.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__chrono/tzdb_list.h
@@ -52,19 +52,29 @@ public:
using const_iterator = forward_list<tzdb>::const_iterator;
- _LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const tzdb& front() const noexcept;
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI const tzdb& front() const noexcept { return __front(); }
- _LIBCPP_EXPORTED_FROM_ABI const_iterator erase_after(const_iterator __p);
+ _LIBCPP_HIDE_FROM_ABI const_iterator erase_after(const_iterator __p) { return __erase_after(__p); }
- _LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const_iterator begin() const noexcept;
- _LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const_iterator end() const noexcept;
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI const_iterator begin() const noexcept { return __begin(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI const_iterator end() const noexcept { return __end(); }
- _LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const_iterator cbegin() const noexcept;
- _LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const_iterator cend() const noexcept;
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const noexcept { return __cbegin(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI const_iterator cend() const noexcept { return __cend(); }
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI __impl& __implementation() { return *__impl_; }
private:
+ [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const tzdb& __front() const noexcept;
+
+ _LIBCPP_EXPORTED_FROM_ABI const_iterator __erase_after(const_iterator __p);
+
+ [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __begin() const noexcept;
+ [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __end() const noexcept;
+
+ [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __cbegin() const noexcept;
+ [[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const_iterator __cend() const noexcept;
+
__impl* __impl_;
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__compare/partial_order.h b/contrib/libs/cxxsupp/libcxx/include/__compare/partial_order.h
index f3ed4900fb..1d2fae63e5 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__compare/partial_order.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__compare/partial_order.h
@@ -28,6 +28,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// [cmp.alg]
namespace __partial_order {
+void partial_order() = delete;
+
struct __fn {
// NOLINTBEGIN(libcpp-robust-against-adl) partial_order should use ADL, but only here
template <class _Tp, class _Up>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__compare/strong_order.h b/contrib/libs/cxxsupp/libcxx/include/__compare/strong_order.h
index 3dc819e642..8c363b5638 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__compare/strong_order.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__compare/strong_order.h
@@ -37,6 +37,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// [cmp.alg]
namespace __strong_order {
+void strong_order() = delete;
+
struct __fn {
// NOLINTBEGIN(libcpp-robust-against-adl) strong_order should use ADL, but only here
template <class _Tp, class _Up>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__compare/weak_order.h b/contrib/libs/cxxsupp/libcxx/include/__compare/weak_order.h
index b82a708c29..1a3e85feb2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__compare/weak_order.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__compare/weak_order.h
@@ -30,6 +30,8 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// [cmp.alg]
namespace __weak_order {
+void weak_order() = delete;
+
struct __fn {
// NOLINTBEGIN(libcpp-robust-against-adl) weak_order should use ADL, but only here
template <class _Tp, class _Up>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__concepts/class_or_enum.h b/contrib/libs/cxxsupp/libcxx/include/__concepts/class_or_enum.h
index c1b4a8c258..2739e31e14 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__concepts/class_or_enum.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__concepts/class_or_enum.h
@@ -28,11 +28,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp>
concept __class_or_enum = is_class_v<_Tp> || is_union_v<_Tp> || is_enum_v<_Tp>;
-// Work around Clang bug https://llvm.org/PR52970
-// TODO: remove this workaround once libc++ no longer has to support Clang 13 (it was fixed in Clang 14).
-template <class _Tp>
-concept __workaround_52970 = is_class_v<__remove_cvref_t<_Tp>> || is_union_v<__remove_cvref_t<_Tp>>;
-
#endif // _LIBCPP_STD_VER >= 20
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__concepts/swappable.h b/contrib/libs/cxxsupp/libcxx/include/__concepts/swappable.h
index 1337dc49d7..d339488a08 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__concepts/swappable.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__concepts/swappable.h
@@ -15,8 +15,8 @@
#include <__concepts/constructible.h>
#include <__config>
#include <__type_traits/extent.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/exchange.h>
#include <__utility/forward.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__config b/contrib/libs/cxxsupp/libcxx/include/__config
index 4e6feace3c..9505d9b556 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__config
+++ b/contrib/libs/cxxsupp/libcxx/include/__config
@@ -433,6 +433,10 @@ _LIBCPP_HARDENING_MODE_DEBUG
# define __has_include(...) 0
# endif
+# ifndef __has_warning
+# define __has_warning(...) 0
+# endif
+
# if !defined(_LIBCPP_COMPILER_CLANG_BASED) && __cplusplus < 201103L
# error "libc++ only supports C++03 with Clang-based compilers. Please enable C++11"
# endif
@@ -750,6 +754,23 @@ typedef __char32_t char32_t;
# define _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION _LIBCPP_ALWAYS_INLINE
# endif
+# ifdef _LIBCPP_COMPILER_CLANG_BASED
+# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
+# define _LIBCPP_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
+# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(clang diagnostic ignored str))
+# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str)
+# elif defined(_LIBCPP_COMPILER_GCC)
+# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
+# define _LIBCPP_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
+# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str)
+# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(GCC diagnostic ignored str))
+# else
+# define _LIBCPP_DIAGNOSTIC_PUSH
+# define _LIBCPP_DIAGNOSTIC_POP
+# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str)
+# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str)
+# endif
+
# if _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_FAST
# define _LIBCPP_HARDENING_SIG f
# elif _LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_EXTENSIVE
@@ -811,6 +832,12 @@ typedef __char32_t char32_t;
// the implementation of a virtual function in an ABI-incompatible way in the first place,
// since that would be an ABI break anyway. Hence, the lack of ABI tag should not be noticeable.
//
+// The macro can be applied to record and enum types. When the tagged type is nested in
+// a record this "parent" record needs to have the macro too. Another use case for applying
+// this macro to records and unions is to apply an ABI tag to inline constexpr variables.
+// This can be useful for inline variables that are implementation details which are expected
+// to change in the future.
+//
// TODO: We provide a escape hatch with _LIBCPP_NO_ABI_TAG for folks who want to avoid increasing
// the length of symbols with an ABI tag. In practice, we should remove the escape hatch and
// use compression mangling instead, see https://github.com/itanium-cxx-abi/cxx-abi/issues/70.
@@ -837,16 +864,45 @@ typedef __char32_t char32_t;
# define _LIBCPP_HIDE_FROM_ABI_AFTER_V1 _LIBCPP_HIDE_FROM_ABI
# endif
+// TODO: Remove this workaround once we drop support for Clang 16
+#if __has_warning("-Wc++23-extensions")
+# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++23-extensions")
+#else
+# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++2b-extensions")
+#endif
+
+// Clang modules take a significant compile time hit when pushing and popping diagnostics.
+// Since all the headers are marked as system headers in the modulemap, we can simply disable this
+// pushing and popping when building with clang modules.
+# if !__has_feature(modules)
+# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS \
+ _LIBCPP_DIAGNOSTIC_PUSH \
+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++11-extensions") \
+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \
+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \
+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \
+ _LIBCPP_CLANG_DIAGNOSTIC_IGNORED_CXX23_EXTENSION \
+ _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++14-extensions") \
+ _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++17-extensions") \
+ _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++20-extensions") \
+ _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++23-extensions")
+# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS _LIBCPP_DIAGNOSTIC_POP
+# else
+# define _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS
+# define _LIBCPP_POP_EXTENSION_DIAGNOSTICS
+# endif
+
// Inline namespaces are available in Clang/GCC/MSVC regardless of C++ dialect.
// clang-format off
-# define _LIBCPP_BEGIN_NAMESPACE_STD namespace _LIBCPP_TYPE_VISIBILITY_DEFAULT std { \
+# define _LIBCPP_BEGIN_NAMESPACE_STD _LIBCPP_PUSH_EXTENSION_DIAGNOSTICS \
+ namespace _LIBCPP_TYPE_VISIBILITY_DEFAULT std { \
inline namespace _LIBCPP_ABI_NAMESPACE {
-# define _LIBCPP_END_NAMESPACE_STD }}
+# define _LIBCPP_END_NAMESPACE_STD }} _LIBCPP_POP_EXTENSION_DIAGNOSTICS
# define _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM _LIBCPP_BEGIN_NAMESPACE_STD \
inline namespace __fs { namespace filesystem {
-# define _LIBCPP_END_NAMESPACE_FILESYSTEM _LIBCPP_END_NAMESPACE_STD }}
+# define _LIBCPP_END_NAMESPACE_FILESYSTEM }} _LIBCPP_END_NAMESPACE_STD
// clang-format on
# if __has_attribute(__enable_if__)
@@ -1230,8 +1286,6 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
# endif // _LIBCPP_ENABLE_CXX17_REMOVED_FEATURES
# if defined(_LIBCPP_ENABLE_CXX20_REMOVED_FEATURES)
-# define _LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS
-# define _LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION
# define _LIBCPP_ENABLE_CXX20_REMOVED_BINDER_TYPEDEFS
# define _LIBCPP_ENABLE_CXX20_REMOVED_NEGATORS
# define _LIBCPP_ENABLE_CXX20_REMOVED_RAW_STORAGE_ITERATOR
@@ -1290,23 +1344,6 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
// the ABI inconsistent.
# endif
-# ifdef _LIBCPP_COMPILER_CLANG_BASED
-# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push")
-# define _LIBCPP_DIAGNOSTIC_POP _Pragma("clang diagnostic pop")
-# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(clang diagnostic ignored str))
-# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str)
-# elif defined(_LIBCPP_COMPILER_GCC)
-# define _LIBCPP_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push")
-# define _LIBCPP_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop")
-# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str)
-# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str) _Pragma(_LIBCPP_TOSTRING(GCC diagnostic ignored str))
-# else
-# define _LIBCPP_DIAGNOSTIC_PUSH
-# define _LIBCPP_DIAGNOSTIC_POP
-# define _LIBCPP_CLANG_DIAGNOSTIC_IGNORED(str)
-# define _LIBCPP_GCC_DIAGNOSTIC_IGNORED(str)
-# endif
-
// c8rtomb() and mbrtoc8() were added in C++20 and C23. Support for these
// functions is gradually being added to existing C libraries. The conditions
// below check for known C library versions and conditions under which these
diff --git a/contrib/libs/cxxsupp/libcxx/include/__exception/exception_ptr.h b/contrib/libs/cxxsupp/libcxx/include/__exception/exception_ptr.h
index 08e34967fa..f0f2f12ed9 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__exception/exception_ptr.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__exception/exception_ptr.h
@@ -26,6 +26,8 @@
#ifndef _LIBCPP_ABI_MICROSOFT
+# if _LIBCPP_AVAILABILITY_HAS_INIT_PRIMARY_EXCEPTION
+
namespace __cxxabiv1 {
extern "C" {
@@ -36,18 +38,20 @@ struct __cxa_exception;
_LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception(
void*,
std::type_info*,
-# if defined(_WIN32)
+# if defined(_WIN32)
void(__thiscall*)(void*)) throw();
-# elif defined(__wasm__)
+# elif defined(__wasm__)
// In Wasm, a destructor returns its argument
void* (*)(void*)) throw();
-# else
+# else
void (*)(void*)) throw();
-# endif
+# endif
}
} // namespace __cxxabiv1
+# endif
+
#endif
namespace std { // purposefully not using versioning namespace
diff --git a/contrib/libs/cxxsupp/libcxx/include/__exception/nested_exception.h b/contrib/libs/cxxsupp/libcxx/include/__exception/nested_exception.h
index 417db54e6e..1bf2df9392 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__exception/nested_exception.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__exception/nested_exception.h
@@ -15,8 +15,8 @@
#include <__type_traits/decay.h>
#include <__type_traits/is_base_of.h>
#include <__type_traits/is_class.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_constructible.h>
#include <__type_traits/is_final.h>
#include <__type_traits/is_polymorphic.h>
#include <__utility/forward.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__exception/operations.h b/contrib/libs/cxxsupp/libcxx/include/__exception/operations.h
index 8f374c0cce..0a9c7a7c7f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__exception/operations.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__exception/operations.h
@@ -9,7 +9,6 @@
#ifndef _LIBCPP___EXCEPTION_OPERATIONS_H
#define _LIBCPP___EXCEPTION_OPERATIONS_H
-#include <__availability>
#include <__config>
#include <cstddef>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__expected/expected.h b/contrib/libs/cxxsupp/libcxx/include/__expected/expected.h
index bfa3d25bf9..21b610b3db 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__expected/expected.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__expected/expected.h
@@ -23,24 +23,14 @@
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_function.h>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_copy_assignable.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_swappable.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
-#include <__type_traits/is_trivially_move_constructible.h>
#include <__type_traits/is_void.h>
#include <__type_traits/lazy.h>
#include <__type_traits/negation.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/copy_options.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/copy_options.h
index 1bf71292c8..097eebe611 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/copy_options.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/copy_options.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_COPY_OPTIONS_H
#define _LIBCPP___FILESYSTEM_COPY_OPTIONS_H
-#include <__availability>
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/directory_options.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/directory_options.h
index 683c4678e0..d0cd3ebfda 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/directory_options.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/directory_options.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_DIRECTORY_OPTIONS_H
#define _LIBCPP___FILESYSTEM_DIRECTORY_OPTIONS_H
-#include <__availability>
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_status.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_status.h
index 3e2b32eef8..da316c8b02 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_status.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_status.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_FILE_STATUS_H
#define _LIBCPP___FILESYSTEM_FILE_STATUS_H
-#include <__availability>
#include <__config>
#include <__filesystem/file_type.h>
#include <__filesystem/perms.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_time_type.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_time_type.h
index e086dbcc3f..63e4ae1578 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_time_type.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_time_type.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_FILE_TIME_TYPE_H
#define _LIBCPP___FILESYSTEM_FILE_TIME_TYPE_H
-#include <__availability>
#include <__chrono/file_clock.h>
#include <__chrono/time_point.h>
#include <__config>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_type.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_type.h
index c509085d90..e4ac1dfee9 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_type.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/file_type.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_FILE_TYPE_H
#define _LIBCPP___FILESYSTEM_FILE_TYPE_H
-#include <__availability>
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/perm_options.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/perm_options.h
index 529ef13558..64c16ee60a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/perm_options.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/perm_options.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_PERM_OPTIONS_H
#define _LIBCPP___FILESYSTEM_PERM_OPTIONS_H
-#include <__availability>
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/perms.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/perms.h
index 8f5f9a7e82..458f1e6e53 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/perms.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/perms.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_PERMS_H
#define _LIBCPP___FILESYSTEM_PERMS_H
-#include <__availability>
#include <__config>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__filesystem/space_info.h b/contrib/libs/cxxsupp/libcxx/include/__filesystem/space_info.h
index 2e80ae3b2c..3fa57d3309 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__filesystem/space_info.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__filesystem/space_info.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FILESYSTEM_SPACE_INFO_H
#define _LIBCPP___FILESYSTEM_SPACE_INFO_H
-#include <__availability>
#include <__config>
#include <cstdint>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/concepts.h b/contrib/libs/cxxsupp/libcxx/include/__format/concepts.h
index 299c5f40ee..13380e9b91 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/concepts.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/concepts.h
@@ -13,12 +13,14 @@
#include <__concepts/same_as.h>
#include <__concepts/semiregular.h>
#include <__config>
-#include <__format/format_fwd.h>
#include <__format/format_parse_context.h>
+#include <__fwd/format.h>
+#include <__fwd/tuple.h>
+#include <__tuple/tuple_size.h>
#include <__type_traits/is_specialization.h>
#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_reference.h>
#include <__utility/pair.h>
-#include <tuple>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/container_adaptor.h b/contrib/libs/cxxsupp/libcxx/include/__format/container_adaptor.h
index ec806ef16b..9f49ca03bf 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/container_adaptor.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/container_adaptor.h
@@ -18,11 +18,11 @@
#include <__format/concepts.h>
#include <__format/formatter.h>
#include <__format/range_default_formatter.h>
+#include <__fwd/queue.h>
+#include <__fwd/stack.h>
#include <__ranges/ref_view.h>
#include <__type_traits/is_const.h>
#include <__type_traits/maybe_const.h>
-#include <queue>
-#include <stack>
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/escaped_output_table.h b/contrib/libs/cxxsupp/libcxx/include/__format/escaped_output_table.h
index 495a2fbc7b..e9f4a6e4f6 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/escaped_output_table.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/escaped_output_table.h
@@ -110,7 +110,7 @@ namespace __escaped_output_table {
/// - bits [0, 10] The size of the range, allowing 2048 elements.
/// - bits [11, 31] The lower bound code point of the range. The upper bound of
/// the range is lower bound + size.
-inline constexpr uint32_t __entries[893] = {
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[893] = {
0x00000020,
0x0003f821,
0x00056800,
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/extended_grapheme_cluster_table.h b/contrib/libs/cxxsupp/libcxx/include/__format/extended_grapheme_cluster_table.h
index 9616dfecd6..48581d8a5d 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/extended_grapheme_cluster_table.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/extended_grapheme_cluster_table.h
@@ -125,7 +125,7 @@ enum class __property : uint8_t {
/// following benchmark.
/// libcxx/benchmarks/std_format_spec_string_unicode.bench.cpp
// clang-format off
-inline constexpr uint32_t __entries[1496] = {
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[1496] = {
0x00000091,
0x00005005,
0x00005811,
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_arg.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_arg.h
index b786ac3b36..4924e5fb32 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_arg.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_arg.h
@@ -14,9 +14,9 @@
#include <__concepts/arithmetic.h>
#include <__config>
#include <__format/concepts.h>
-#include <__format/format_fwd.h>
#include <__format/format_parse_context.h>
#include <__functional/invoke.h>
+#include <__fwd/format.h>
#include <__memory/addressof.h>
#include <__type_traits/conditional.h>
#include <__utility/forward.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_arg_store.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_arg_store.h
index 066cd369eb..23a599e995 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_arg_store.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_arg_store.h
@@ -151,7 +151,7 @@ consteval __arg_t __determine_arg_t() {
// The overload for not formattable types allows triggering the static
// assertion below.
template <class _Context, class _Tp>
- requires(!__formattable<_Tp, typename _Context::char_type>)
+ requires(!__formattable_with<_Tp, _Context>)
consteval __arg_t __determine_arg_t() {
return __arg_t::__none;
}
@@ -165,7 +165,6 @@ _LIBCPP_HIDE_FROM_ABI basic_format_arg<_Context> __create_format_arg(_Tp& __valu
using _Dp = remove_const_t<_Tp>;
constexpr __arg_t __arg = __determine_arg_t<_Context, _Dp>();
static_assert(__arg != __arg_t::__none, "the supplied type is not formattable");
-
static_assert(__formattable_with<_Tp, _Context>);
// Not all types can be used to directly initialize the
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_args.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_args.h
index 9e0afecc0a..a5fde36a29 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_args.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_args.h
@@ -10,11 +10,10 @@
#ifndef _LIBCPP___FORMAT_FORMAT_ARGS_H
#define _LIBCPP___FORMAT_FORMAT_ARGS_H
-#include <__availability>
#include <__config>
#include <__format/format_arg.h>
#include <__format/format_arg_store.h>
-#include <__format/format_fwd.h>
+#include <__fwd/format.h>
#include <cstddef>
#include <cstdint>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
index 68dcdb49d3..087d4bf289 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_context.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FORMAT_FORMAT_CONTEXT_H
#define _LIBCPP___FORMAT_FORMAT_CONTEXT_H
-#include <__availability>
#include <__concepts/same_as.h>
#include <__config>
#include <__format/buffer.h>
@@ -18,7 +17,7 @@
#include <__format/format_arg_store.h>
#include <__format/format_args.h>
#include <__format/format_error.h>
-#include <__format/format_fwd.h>
+#include <__fwd/format.h>
#include <__iterator/back_insert_iterator.h>
#include <__iterator/concepts.h>
#include <__memory/addressof.h>
@@ -27,7 +26,7 @@
#include <cstddef>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
-# include <locale>
+# include <__locale>
# include <optional>
#endif
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h b/contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h
index 3ee53539f4..c781014010 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/format_functions.h
@@ -41,7 +41,7 @@
#include <string_view>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
-# include <locale>
+# include <__locale>
#endif
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter.h
index 079befc5bd..e2f418f936 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter.h
@@ -10,9 +10,8 @@
#ifndef _LIBCPP___FORMAT_FORMATTER_H
#define _LIBCPP___FORMAT_FORMATTER_H
-#include <__availability>
#include <__config>
-#include <__format/format_fwd.h>
+#include <__fwd/format.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_bool.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_bool.h
index 5e3daff7b3..17dc69541e 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_bool.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_bool.h
@@ -12,7 +12,6 @@
#include <__algorithm/copy.h>
#include <__assert>
-#include <__availability>
#include <__config>
#include <__format/concepts.h>
#include <__format/format_parse_context.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_char.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_char.h
index 3358d42225..d33e84368a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_char.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_char.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FORMAT_FORMATTER_CHAR_H
#define _LIBCPP___FORMAT_FORMATTER_CHAR_H
-#include <__availability>
#include <__concepts/same_as.h>
#include <__config>
#include <__format/concepts.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_floating_point.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_floating_point.h
index f01d323eff..1d94cc349c 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_floating_point.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_floating_point.h
@@ -39,7 +39,7 @@
#include <cstddef>
#ifndef _LIBCPP_HAS_NO_LOCALIZATION
-# include <locale>
+# include <__locale>
#endif
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_integer.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_integer.h
index d57082b388..41400f0047 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_integer.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_integer.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FORMAT_FORMATTER_INTEGER_H
#define _LIBCPP___FORMAT_FORMATTER_INTEGER_H
-#include <__availability>
#include <__concepts/arithmetic.h>
#include <__config>
#include <__format/concepts.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_pointer.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_pointer.h
index 3373996ec3..6941343efd 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_pointer.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_pointer.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FORMAT_FORMATTER_POINTER_H
#define _LIBCPP___FORMAT_FORMATTER_POINTER_H
-#include <__availability>
#include <__config>
#include <__format/concepts.h>
#include <__format/format_parse_context.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_string.h b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_string.h
index d1ccfb9b5f..347439fc8d 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/formatter_string.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/formatter_string.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___FORMAT_FORMATTER_STRING_H
#define _LIBCPP___FORMAT_FORMATTER_STRING_H
-#include <__availability>
#include <__config>
#include <__format/concepts.h>
#include <__format/format_parse_context.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h b/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
index a4b47abff4..9818f37b51 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/parser_std_format_spec.h
@@ -129,8 +129,7 @@ _LIBCPP_HIDE_FROM_ABI constexpr uint32_t __substitute_arg_id(basic_format_arg<_C
///
/// They default to false so when a new field is added it needs to be opted in
/// explicitly.
-// TODO FMT Use an ABI tag for this struct.
-struct __fields {
+struct _LIBCPP_HIDE_FROM_ABI __fields {
uint16_t __sign_ : 1 {false};
uint16_t __alternate_form_ : 1 {false};
uint16_t __zero_padding_ : 1 {false};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/width_estimation_table.h b/contrib/libs/cxxsupp/libcxx/include/__format/width_estimation_table.h
index cfb488975d..6309483367 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/width_estimation_table.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__format/width_estimation_table.h
@@ -119,7 +119,7 @@ namespace __width_estimation_table {
/// - bits [0, 13] The size of the range, allowing 16384 elements.
/// - bits [14, 31] The lower bound code point of the range. The upper bound of
/// the range is lower bound + size.
-inline constexpr uint32_t __entries[108] = {
+_LIBCPP_HIDE_FROM_ABI inline constexpr uint32_t __entries[108] = {
0x0440005f /* 00001100 - 0000115f [ 96] */, //
0x08c68001 /* 0000231a - 0000231b [ 2] */, //
0x08ca4001 /* 00002329 - 0000232a [ 2] */, //
diff --git a/contrib/libs/cxxsupp/libcxx/include/__functional/bind_front.h b/contrib/libs/cxxsupp/libcxx/include/__functional/bind_front.h
index 30dda53361..11d0bac3f8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__functional/bind_front.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__functional/bind_front.h
@@ -17,7 +17,6 @@
#include <__type_traits/decay.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_move_constructible.h>
#include <__utility/forward.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__functional/function.h b/contrib/libs/cxxsupp/libcxx/include/__functional/function.h
index 416c26a0c7..1faa9e92eb 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__functional/function.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__functional/function.h
@@ -28,7 +28,7 @@
#include <__type_traits/decay.h>
#include <__type_traits/is_core_convertible.h>
#include <__type_traits/is_scalar.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
#include <__type_traits/is_void.h>
#include <__type_traits/strip_signature.h>
@@ -768,7 +768,7 @@ public:
{
}
- virtual __base<_Rp(_ArgTypes...)>* __clone() const {
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual __base<_Rp(_ArgTypes...)>* __clone() const {
_LIBCPP_ASSERT_INTERNAL(
false,
"Block pointers are just pointers, so they should always fit into "
@@ -777,9 +777,11 @@ public:
return nullptr;
}
- virtual void __clone(__base<_Rp(_ArgTypes...)>* __p) const { ::new ((void*)__p) __func(__f_); }
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual void __clone(__base<_Rp(_ArgTypes...)>* __p) const {
+ ::new ((void*)__p) __func(__f_);
+ }
- virtual void destroy() _NOEXCEPT {
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual void destroy() _NOEXCEPT {
# ifndef _LIBCPP_HAS_OBJC_ARC
if (__f_)
_Block_release(__f_);
@@ -787,7 +789,7 @@ public:
__f_ = 0;
}
- virtual void destroy_deallocate() _NOEXCEPT {
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual void destroy_deallocate() _NOEXCEPT {
_LIBCPP_ASSERT_INTERNAL(
false,
"Block pointers are just pointers, so they should always fit into "
@@ -795,16 +797,20 @@ public:
"never be invoked.");
}
- virtual _Rp operator()(_ArgTypes&&... __arg) { return std::__invoke(__f_, std::forward<_ArgTypes>(__arg)...); }
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual _Rp operator()(_ArgTypes&&... __arg) {
+ return std::__invoke(__f_, std::forward<_ArgTypes>(__arg)...);
+ }
# ifndef _LIBCPP_HAS_NO_RTTI
- virtual const void* target(type_info const& __ti) const _NOEXCEPT {
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual const void* target(type_info const& __ti) const _NOEXCEPT {
if (__ti == typeid(__func::__block_type))
return &__f_;
return (const void*)nullptr;
}
- virtual const std::type_info& target_type() const _NOEXCEPT { return typeid(__func::__block_type); }
+ _LIBCPP_HIDE_FROM_ABI_VIRTUAL virtual const std::type_info& target_type() const _NOEXCEPT {
+ return typeid(__func::__block_type);
+ }
# endif // _LIBCPP_HAS_NO_RTTI
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__functional/hash.h b/contrib/libs/cxxsupp/libcxx/include/__functional/hash.h
index a466c83703..a9e450edd3 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__functional/hash.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__functional/hash.h
@@ -10,23 +10,18 @@
#define _LIBCPP___FUNCTIONAL_HASH_H
#include <__config>
-#include <__functional/invoke.h>
#include <__functional/unary_function.h>
#include <__fwd/functional.h>
-#include <__tuple/sfinae_helpers.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/conjunction.h>
+#include <__type_traits/invoke.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_enum.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/underlying_type.h>
-#include <__utility/forward.h>
-#include <__utility/move.h>
#include <__utility/pair.h>
#include <__utility/swap.h>
#include <cstddef>
#include <cstdint>
#include <cstring>
-#include <limits>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__functional/not_fn.h b/contrib/libs/cxxsupp/libcxx/include/__functional/not_fn.h
index 23a491c135..4b3ce5524a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__functional/not_fn.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__functional/not_fn.h
@@ -16,7 +16,6 @@
#include <__type_traits/decay.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_move_constructible.h>
#include <__utility/forward.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/array.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/array.h
index ff3a3eeeef..b429d0c5a9 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__fwd/array.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/array.h
@@ -35,6 +35,12 @@ template <size_t _Ip, class _Tp, size_t _Size>
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 const _Tp&& get(const array<_Tp, _Size>&&) _NOEXCEPT;
#endif
+template <class>
+struct __is_std_array : false_type {};
+
+template <class _Tp, size_t _Size>
+struct __is_std_array<array<_Tp, _Size> > : true_type {};
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___FWD_ARRAY_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/deque.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/deque.h
new file mode 100644
index 0000000000..fd2fb5bb4b
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/deque.h
@@ -0,0 +1,26 @@
+//===---------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___FWD_DEQUE_H
+#define _LIBCPP___FWD_DEQUE_H
+
+#include <__config>
+#include <__fwd/memory.h>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+template <class _Tp, class _Allocator = allocator<_Tp> >
+class _LIBCPP_TEMPLATE_VIS deque;
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___FWD_DEQUE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__format/format_fwd.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/format.h
index 120b2fc8d4..b30c220f8a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__format/format_fwd.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/format.h
@@ -7,10 +7,9 @@
//
//===----------------------------------------------------------------------===//
-#ifndef _LIBCPP___FORMAT_FORMAT_FWD_H
-#define _LIBCPP___FORMAT_FORMAT_FWD_H
+#ifndef _LIBCPP___FWD_FORMAT_H
+#define _LIBCPP___FWD_FORMAT_H
-#include <__availability>
#include <__config>
#include <__iterator/concepts.h>
@@ -36,4 +35,4 @@ struct _LIBCPP_TEMPLATE_VIS formatter;
_LIBCPP_END_NAMESPACE_STD
-#endif // _LIBCPP___FORMAT_FORMAT_FWD_H
+#endif // _LIBCPP___FWD_FORMAT_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/pair_like.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/memory.h
index 192682dc7e..b9e151855a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tuple/pair_like.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/memory.h
@@ -1,18 +1,15 @@
-//===----------------------------------------------------------------------===//
+//===---------------------------------------------------------------------===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
-//===----------------------------------------------------------------------===//
+//===---------------------------------------------------------------------===//
-#ifndef _LIBCPP___TUPLE_PAIR_LIKE_H
-#define _LIBCPP___TUPLE_PAIR_LIKE_H
+#ifndef _LIBCPP___FWD_MEMORY_H
+#define _LIBCPP___FWD_MEMORY_H
#include <__config>
-#include <__tuple/tuple_like.h>
-#include <__tuple/tuple_size.h>
-#include <__type_traits/remove_cvref.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -20,13 +17,9 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-#if _LIBCPP_STD_VER >= 20
-
template <class _Tp>
-concept __pair_like = __tuple_like<_Tp> && tuple_size<remove_cvref_t<_Tp>>::value == 2;
-
-#endif // _LIBCPP_STD_VER >= 20
+class _LIBCPP_TEMPLATE_VIS allocator;
_LIBCPP_END_NAMESPACE_STD
-#endif // _LIBCPP___TUPLE_PAIR_LIKE_H
+#endif // _LIBCPP___FWD_MEMORY_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/queue.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/queue.h
new file mode 100644
index 0000000000..50d99ad9c2
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/queue.h
@@ -0,0 +1,31 @@
+//===---------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___FWD_QUEUE_H
+#define _LIBCPP___FWD_QUEUE_H
+
+#include <__config>
+#include <__functional/operations.h>
+#include <__fwd/deque.h>
+#include <__fwd/vector.h>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+template <class _Tp, class _Container = deque<_Tp> >
+class _LIBCPP_TEMPLATE_VIS queue;
+
+template <class _Tp, class _Container = vector<_Tp>, class _Compare = less<typename _Container::value_type> >
+class _LIBCPP_TEMPLATE_VIS priority_queue;
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___FWD_QUEUE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h
index e2d46fbe1d..39a9c3faf1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/sstream.h
@@ -10,6 +10,7 @@
#define _LIBCPP___FWD_SSTREAM_H
#include <__config>
+#include <__fwd/memory.h>
#include <__fwd/string.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/stack.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/stack.h
new file mode 100644
index 0000000000..7dab6c1a4f
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/stack.h
@@ -0,0 +1,26 @@
+//===---------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___FWD_STACK_H
+#define _LIBCPP___FWD_STACK_H
+
+#include <__config>
+#include <__fwd/deque.h>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+template <class _Tp, class _Container = deque<_Tp> >
+class _LIBCPP_TEMPLATE_VIS stack;
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___FWD_STACK_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/string.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/string.h
index 032132374d..320c4e4c81 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__fwd/string.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/string.h
@@ -11,6 +11,7 @@
#include <__availability>
#include <__config>
+#include <__fwd/memory.h>
#include <__fwd/memory_resource.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -39,9 +40,6 @@ template <>
struct char_traits<wchar_t>;
#endif
-template <class _Tp>
-class _LIBCPP_TEMPLATE_VIS allocator;
-
template <class _CharT, class _Traits = char_traits<_CharT>, class _Allocator = allocator<_CharT> >
class _LIBCPP_TEMPLATE_VIS basic_string;
diff --git a/contrib/libs/cxxsupp/libcxx/include/__fwd/vector.h b/contrib/libs/cxxsupp/libcxx/include/__fwd/vector.h
new file mode 100644
index 0000000000..c9cc961374
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__fwd/vector.h
@@ -0,0 +1,26 @@
+//===---------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===---------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___FWD_VECTOR_H
+#define _LIBCPP___FWD_VECTOR_H
+
+#include <__config>
+#include <__fwd/memory.h>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+template <class _Tp, class _Alloc = allocator<_Tp> >
+class _LIBCPP_TEMPLATE_VIS vector;
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___FWD_VECTOR_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__hash_table b/contrib/libs/cxxsupp/libcxx/include/__hash_table
index ec7d694c4a..a705117d01 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__hash_table
+++ b/contrib/libs/cxxsupp/libcxx/include/__hash_table
@@ -28,12 +28,9 @@
#include <__type_traits/can_extract_key.h>
#include <__type_traits/conditional.h>
#include <__type_traits/is_const.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_swappable.h>
@@ -284,13 +281,21 @@ public:
_LIBCPP_HIDE_FROM_ABI __hash_iterator() _NOEXCEPT : __node_(nullptr) {}
- _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __node_->__upcast()->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container iterator");
+ return __node_->__upcast()->__get_value();
+ }
_LIBCPP_HIDE_FROM_ABI pointer operator->() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container iterator");
return pointer_traits<pointer>::pointer_to(__node_->__upcast()->__get_value());
}
_LIBCPP_HIDE_FROM_ABI __hash_iterator& operator++() {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to increment a non-incrementable unordered container iterator");
__node_ = __node_->__next_;
return *this;
}
@@ -345,12 +350,20 @@ public:
_LIBCPP_HIDE_FROM_ABI __hash_const_iterator(const __non_const_iterator& __x) _NOEXCEPT : __node_(__x.__node_) {}
- _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __node_->__upcast()->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_iterator");
+ return __node_->__upcast()->__get_value();
+ }
_LIBCPP_HIDE_FROM_ABI pointer operator->() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_iterator");
return pointer_traits<pointer>::pointer_to(__node_->__upcast()->__get_value());
}
_LIBCPP_HIDE_FROM_ABI __hash_const_iterator& operator++() {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to increment a non-incrementable unordered container const_iterator");
__node_ = __node_->__next_;
return *this;
}
@@ -400,13 +413,21 @@ public:
_LIBCPP_HIDE_FROM_ABI __hash_local_iterator() _NOEXCEPT : __node_(nullptr) {}
- _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __node_->__upcast()->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container local_iterator");
+ return __node_->__upcast()->__get_value();
+ }
_LIBCPP_HIDE_FROM_ABI pointer operator->() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container local_iterator");
return pointer_traits<pointer>::pointer_to(__node_->__upcast()->__get_value());
}
_LIBCPP_HIDE_FROM_ABI __hash_local_iterator& operator++() {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to increment a non-incrementable unordered container local_iterator");
__node_ = __node_->__next_;
if (__node_ != nullptr && std::__constrain_hash(__node_->__hash(), __bucket_count_) != __bucket_)
__node_ = nullptr;
@@ -475,13 +496,21 @@ public:
__bucket_(__x.__bucket_),
__bucket_count_(__x.__bucket_count_) {}
- _LIBCPP_HIDE_FROM_ABI reference operator*() const { return __node_->__upcast()->__get_value(); }
+ _LIBCPP_HIDE_FROM_ABI reference operator*() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator");
+ return __node_->__upcast()->__get_value();
+ }
_LIBCPP_HIDE_FROM_ABI pointer operator->() const {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to dereference a non-dereferenceable unordered container const_local_iterator");
return pointer_traits<pointer>::pointer_to(__node_->__upcast()->__get_value());
}
_LIBCPP_HIDE_FROM_ABI __hash_const_local_iterator& operator++() {
+ _LIBCPP_ASSERT_NON_NULL(
+ __node_ != nullptr, "Attempted to increment a non-incrementable unordered container const_local_iterator");
__node_ = __node_->__next_;
if (__node_ != nullptr && std::__constrain_hash(__node_->__hash(), __bucket_count_) != __bucket_)
__node_ = nullptr;
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/bounded_iter.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/bounded_iter.h
index 347dd58e3f..15e87f01bf 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/bounded_iter.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/bounded_iter.h
@@ -31,13 +31,20 @@ _LIBCPP_BEGIN_NAMESPACE_STD
// Iterator wrapper that carries the valid range it is allowed to access.
//
// This is a simple iterator wrapper for contiguous iterators that points
-// within a [begin, end) range and carries these bounds with it. The iterator
-// ensures that it is pointing within that [begin, end) range when it is
-// dereferenced.
+// within a [begin, end] range and carries these bounds with it. The iterator
+// ensures that it is pointing within [begin, end) range when it is
+// dereferenced. It also ensures that it is never iterated outside of
+// [begin, end]. This is important for two reasons:
//
-// Arithmetic operations are allowed and the bounds of the resulting iterator
-// are not checked. Hence, it is possible to create an iterator pointing outside
-// its range, but it is not possible to dereference it.
+// 1. It allows `operator*` and `operator++` bounds checks to be `iter != end`.
+// This is both less for the optimizer to prove, and aligns with how callers
+// typically use iterators.
+//
+// 2. Advancing an iterator out of bounds is undefined behavior (see the table
+// in [input.iterators]). In particular, when the underlying iterator is a
+// pointer, it is undefined at the language level (see [expr.add]). If
+// bounded iterators exhibited this undefined behavior, we risk compiler
+// optimizations deleting non-redundant bounds checks.
template <class _Iterator, class = __enable_if_t< __libcpp_is_contiguous_iterator<_Iterator>::value > >
struct ___bounded_iter {
using value_type = typename iterator_traits<_Iterator>::value_type;
@@ -51,8 +58,8 @@ struct ___bounded_iter {
// Create a singular iterator.
//
- // Such an iterator does not point to any object and is conceptually out of bounds, so it is
- // not dereferenceable. Observing operations like comparison and assignment are valid.
+ // Such an iterator points past the end of an empty span, so it is not dereferenceable.
+ // Observing operations like comparison and assignment are valid.
_LIBCPP_HIDE_FROM_ABI ___bounded_iter() = default;
_LIBCPP_HIDE_FROM_ABI ___bounded_iter(___bounded_iter const&) = default;
@@ -70,18 +77,20 @@ struct ___bounded_iter {
private:
// Create an iterator wrapping the given iterator, and whose bounds are described
- // by the provided [begin, end) range.
+ // by the provided [begin, end] range.
//
- // This constructor does not check whether the resulting iterator is within its bounds.
- // However, it does check that the provided [begin, end) range is a valid range (that
- // is, begin <= end).
+ // The constructor does not check whether the resulting iterator is within its bounds. It is a
+ // responsibility of the container to ensure that the given bounds are valid.
//
// Since it is non-standard for iterators to have this constructor, ___bounded_iter must
// be created via `std::__make_bounded_iter`.
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit ___bounded_iter(
_Iterator __current, _Iterator __begin, _Iterator __end)
: __current_(__current), __begin_(__begin), __end_(__end) {
- _LIBCPP_ASSERT_INTERNAL(__begin <= __end, "___bounded_iter(current, begin, end): [begin, end) is not a valid range");
+ _LIBCPP_ASSERT_INTERNAL(
+ __begin <= __current, "___bounded_iter(current, begin, end): current and begin are inconsistent");
+ _LIBCPP_ASSERT_INTERNAL(
+ __current <= __end, "___bounded_iter(current, begin, end): current and end are inconsistent");
}
template <class _It>
@@ -90,30 +99,37 @@ private:
public:
// Dereference and indexing operations.
//
- // These operations check that the iterator is dereferenceable, that is within [begin, end).
+ // These operations check that the iterator is dereferenceable. Since the class invariant is
+ // that the iterator is always within `[begin, end]`, we only need to check it's not pointing to
+ // `end`. This is easier for the optimizer because it aligns with the `iter != container.end()`
+ // checks that typical callers already use (see
+ // https://github.com/llvm/llvm-project/issues/78829).
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator*() const _NOEXCEPT {
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __in_bounds(__current_), "___bounded_iter::operator*: Attempt to dereference an out-of-range iterator");
+ __current_ != __end_, "___bounded_iter::operator*: Attempt to dereference an iterator at the end");
return *__current_;
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pointer operator->() const _NOEXCEPT {
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __in_bounds(__current_), "___bounded_iter::operator->: Attempt to dereference an out-of-range iterator");
+ __current_ != __end_, "___bounded_iter::operator->: Attempt to dereference an iterator at the end");
return std::__to_address(__current_);
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 reference operator[](difference_type __n) const _NOEXCEPT {
_LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
- __in_bounds(__current_ + __n), "___bounded_iter::operator[]: Attempt to index an iterator out-of-range");
+ __n >= __begin_ - __current_, "___bounded_iter::operator[]: Attempt to index an iterator past the start");
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __n < __end_ - __current_, "___bounded_iter::operator[]: Attempt to index an iterator at or past the end");
return __current_[__n];
}
// Arithmetic operations.
//
- // These operations do not check that the resulting iterator is within the bounds, since that
- // would make it impossible to create a past-the-end iterator.
+ // These operations check that the iterator remains within `[begin, end]`.
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 ___bounded_iter& operator++() _NOEXCEPT {
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __current_ != __end_, "___bounded_iter::operator++: Attempt to advance an iterator past the end");
++__current_;
return *this;
}
@@ -124,6 +140,8 @@ public:
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 ___bounded_iter& operator--() _NOEXCEPT {
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __current_ != __begin_, "___bounded_iter::operator--: Attempt to rewind an iterator past the start");
--__current_;
return *this;
}
@@ -134,6 +152,10 @@ public:
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 ___bounded_iter& operator+=(difference_type __n) _NOEXCEPT {
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __n >= __begin_ - __current_, "___bounded_iter::operator+=: Attempt to rewind an iterator past the start");
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __n <= __end_ - __current_, "___bounded_iter::operator+=: Attempt to advance an iterator past the end");
__current_ += __n;
return *this;
}
@@ -151,6 +173,10 @@ public:
}
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 ___bounded_iter& operator-=(difference_type __n) _NOEXCEPT {
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __n <= __current_ - __begin_, "___bounded_iter::operator-=: Attempt to rewind an iterator past the start");
+ _LIBCPP_ASSERT_VALID_ELEMENT_ACCESS(
+ __n >= __current_ - __end_, "___bounded_iter::operator-=: Attempt to advance an iterator past the end");
__current_ -= __n;
return *this;
}
@@ -197,15 +223,10 @@ public:
}
private:
- // Return whether the given iterator is in the bounds of this ___bounded_iter.
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR bool __in_bounds(_Iterator const& __iter) const {
- return __iter >= __begin_ && __iter < __end_;
- }
-
template <class>
friend struct pointer_traits;
_Iterator __current_; // current iterator
- _Iterator __begin_, __end_; // valid range represented as [begin, end)
+ _Iterator __begin_, __end_; // valid range represented as [begin, end]
};
template <class _It>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/cpp17_iterator_concepts.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/cpp17_iterator_concepts.h
index d1ad2b4e28..cdb561e684 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/cpp17_iterator_concepts.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/cpp17_iterator_concepts.h
@@ -14,10 +14,8 @@
#include <__concepts/same_as.h>
#include <__config>
#include <__iterator/iterator_traits.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_default_constructible.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/is_signed.h>
#include <__type_traits/is_void.h>
#include <__utility/as_const.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h
index 202b94cccc..ba8aed3c0f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/iter_move.h
@@ -35,7 +35,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
namespace ranges {
namespace __iter_move {
-void iter_move();
+void iter_move() = delete;
template <class _Tp>
concept __unqualified_iter_move = __class_or_enum<remove_cvref_t<_Tp>> && requires(_Tp&& __t) {
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/iterator_traits.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/iterator_traits.h
index 2cd82525ba..11af9e3018 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/iterator_traits.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/iterator_traits.h
@@ -21,7 +21,6 @@
#include <__fwd/pair.h>
#include <__iterator/incrementable_traits.h>
#include <__iterator/readable_traits.h>
-#include <__type_traits/add_const.h>
#include <__type_traits/common_reference.h>
#include <__type_traits/conditional.h>
#include <__type_traits/disjunction.h>
@@ -493,8 +492,8 @@ using __iter_mapped_type = typename iterator_traits<_InputIterator>::value_type:
template <class _InputIterator>
using __iter_to_alloc_type =
- pair< typename add_const<typename iterator_traits<_InputIterator>::value_type::first_type>::type,
- typename iterator_traits<_InputIterator>::value_type::second_type>;
+ pair<const typename iterator_traits<_InputIterator>::value_type::first_type,
+ typename iterator_traits<_InputIterator>::value_type::second_type>;
template <class _Iter>
using __iterator_category_type = typename iterator_traits<_Iter>::iterator_category;
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/ranges_iterator_traits.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/ranges_iterator_traits.h
index a30864199d..859e708204 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/ranges_iterator_traits.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/ranges_iterator_traits.h
@@ -13,7 +13,6 @@
#include <__config>
#include <__fwd/pair.h>
#include <__ranges/concepts.h>
-#include <__type_traits/add_const.h>
#include <__type_traits/remove_const.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -32,8 +31,7 @@ using __range_mapped_type = typename ranges::range_value_t<_Range>::second_type;
template <ranges::input_range _Range>
using __range_to_alloc_type =
- pair<add_const_t<typename ranges::range_value_t<_Range>::first_type>,
- typename ranges::range_value_t<_Range>::second_type>;
+ pair<const typename ranges::range_value_t<_Range>::first_type, typename ranges::range_value_t<_Range>::second_type>;
#endif
diff --git a/contrib/libs/cxxsupp/libcxx/include/__iterator/reverse_iterator.h b/contrib/libs/cxxsupp/libcxx/include/__iterator/reverse_iterator.h
index c8f3628ca9..3fb2a42499 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__iterator/reverse_iterator.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__iterator/reverse_iterator.h
@@ -34,7 +34,7 @@
#include <__type_traits/enable_if.h>
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_same.h>
#include <__utility/declval.h>
@@ -316,172 +316,6 @@ inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX17 reverse_iterator<_Ite
}
#endif
-#if _LIBCPP_STD_VER <= 17
-template <class _Iter>
-using __unconstrained_reverse_iterator = reverse_iterator<_Iter>;
-#else
-
-// __unconstrained_reverse_iterator allows us to use reverse iterators in the implementation of algorithms by working
-// around a language issue in C++20.
-// In C++20, when a reverse iterator wraps certain C++20-hostile iterators, calling comparison operators on it will
-// result in a compilation error. However, calling comparison operators on the pristine hostile iterator is not
-// an error. Thus, we cannot use reverse_iterators in the implementation of an algorithm that accepts a
-// C++20-hostile iterator. This class is an internal workaround -- it is a copy of reverse_iterator with
-// tweaks to make it support hostile iterators.
-//
-// A C++20-hostile iterator is one that defines a comparison operator where one of the arguments is an exact match
-// and the other requires an implicit conversion, for example:
-// friend bool operator==(const BaseIter&, const DerivedIter&);
-//
-// C++20 rules for rewriting equality operators create another overload of this function with parameters reversed:
-// friend bool operator==(const DerivedIter&, const BaseIter&);
-//
-// This creates an ambiguity in overload resolution.
-//
-// Clang treats this ambiguity differently in different contexts. When operator== is actually called in the function
-// body, the code is accepted with a warning. When a concept requires operator== to be a valid expression, however,
-// it evaluates to false. Thus, the implementation of reverse_iterator::operator== can actually call operator== on its
-// base iterators, but the constraints on reverse_iterator::operator== prevent it from being considered during overload
-// resolution. This class simply removes the problematic constraints from comparison functions.
-template <class _Iter>
-class __unconstrained_reverse_iterator {
- _Iter __iter_;
-
-public:
- static_assert(__has_bidirectional_iterator_category<_Iter>::value || bidirectional_iterator<_Iter>);
-
- using iterator_type = _Iter;
- using iterator_category =
- _If<__has_random_access_iterator_category<_Iter>::value,
- random_access_iterator_tag,
- __iterator_category_type<_Iter>>;
- using pointer = __iterator_pointer_type<_Iter>;
- using value_type = iter_value_t<_Iter>;
- using difference_type = iter_difference_t<_Iter>;
- using reference = iter_reference_t<_Iter>;
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator() = default;
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator(const __unconstrained_reverse_iterator&) = default;
- _LIBCPP_HIDE_FROM_ABI constexpr explicit __unconstrained_reverse_iterator(_Iter __iter) : __iter_(__iter) {}
-
- _LIBCPP_HIDE_FROM_ABI constexpr _Iter base() const { return __iter_; }
- _LIBCPP_HIDE_FROM_ABI constexpr reference operator*() const {
- auto __tmp = __iter_;
- return *--__tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr pointer operator->() const {
- if constexpr (is_pointer_v<_Iter>) {
- return std::prev(__iter_);
- } else {
- return std::prev(__iter_).operator->();
- }
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr iter_rvalue_reference_t<_Iter>
- iter_move(const __unconstrained_reverse_iterator& __i) noexcept(
- is_nothrow_copy_constructible_v<_Iter>&& noexcept(ranges::iter_move(--std::declval<_Iter&>()))) {
- auto __tmp = __i.base();
- return ranges::iter_move(--__tmp);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator& operator++() {
- --__iter_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator operator++(int) {
- auto __tmp = *this;
- --__iter_;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator& operator--() {
- ++__iter_;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator operator--(int) {
- auto __tmp = *this;
- ++__iter_;
- return __tmp;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator& operator+=(difference_type __n) {
- __iter_ -= __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator& operator-=(difference_type __n) {
- __iter_ += __n;
- return *this;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator operator+(difference_type __n) const {
- return __unconstrained_reverse_iterator(__iter_ - __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr __unconstrained_reverse_iterator operator-(difference_type __n) const {
- return __unconstrained_reverse_iterator(__iter_ + __n);
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr difference_type operator-(const __unconstrained_reverse_iterator& __other) const {
- return __other.__iter_ - __iter_;
- }
-
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator[](difference_type __n) const { return *(*this + __n); }
-
- // Deliberately unconstrained unlike the comparison functions in `reverse_iterator` -- see the class comment for the
- // rationale.
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator==(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() == __rhs.base();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator!=(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() != __rhs.base();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator<(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() > __rhs.base();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator>(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() < __rhs.base();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator<=(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() >= __rhs.base();
- }
-
- _LIBCPP_HIDE_FROM_ABI friend constexpr bool
- operator>=(const __unconstrained_reverse_iterator& __lhs, const __unconstrained_reverse_iterator& __rhs) {
- return __lhs.base() <= __rhs.base();
- }
-};
-
-#endif // _LIBCPP_STD_VER <= 17
-
-template <template <class> class _RevIter1, template <class> class _RevIter2, class _Iter>
-struct __unwrap_reverse_iter_impl {
- using _UnwrappedIter = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>()));
- using _ReverseWrapper = _RevIter1<_RevIter2<_Iter> >;
-
- static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ReverseWrapper
- __rewrap(_ReverseWrapper __orig_iter, _UnwrappedIter __unwrapped_iter) {
- return _ReverseWrapper(
- _RevIter2<_Iter>(__unwrap_iter_impl<_Iter>::__rewrap(__orig_iter.base().base(), __unwrapped_iter)));
- }
-
- static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _UnwrappedIter __unwrap(_ReverseWrapper __i) _NOEXCEPT {
- return __unwrap_iter_impl<_Iter>::__unwrap(__i.base().base());
- }
-};
-
#if _LIBCPP_STD_VER >= 20
template <ranges::bidirectional_range _Range>
_LIBCPP_HIDE_FROM_ABI constexpr ranges::subrange<reverse_iterator<ranges::iterator_t<_Range>>,
@@ -493,24 +327,20 @@ __reverse_range(_Range&& __range) {
#endif
template <class _Iter, bool __b>
-struct __unwrap_iter_impl<reverse_iterator<reverse_iterator<_Iter> >, __b>
- : __unwrap_reverse_iter_impl<reverse_iterator, reverse_iterator, _Iter> {};
-
-#if _LIBCPP_STD_VER >= 20
-
-template <class _Iter, bool __b>
-struct __unwrap_iter_impl<reverse_iterator<__unconstrained_reverse_iterator<_Iter>>, __b>
- : __unwrap_reverse_iter_impl<reverse_iterator, __unconstrained_reverse_iterator, _Iter> {};
-
-template <class _Iter, bool __b>
-struct __unwrap_iter_impl<__unconstrained_reverse_iterator<reverse_iterator<_Iter>>, __b>
- : __unwrap_reverse_iter_impl<__unconstrained_reverse_iterator, reverse_iterator, _Iter> {};
+struct __unwrap_iter_impl<reverse_iterator<reverse_iterator<_Iter> >, __b> {
+ using _UnwrappedIter = decltype(__unwrap_iter_impl<_Iter>::__unwrap(std::declval<_Iter>()));
+ using _ReverseWrapper = reverse_iterator<reverse_iterator<_Iter> >;
-template <class _Iter, bool __b>
-struct __unwrap_iter_impl<__unconstrained_reverse_iterator<__unconstrained_reverse_iterator<_Iter>>, __b>
- : __unwrap_reverse_iter_impl<__unconstrained_reverse_iterator, __unconstrained_reverse_iterator, _Iter> {};
+ static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _ReverseWrapper
+ __rewrap(_ReverseWrapper __orig_iter, _UnwrappedIter __unwrapped_iter) {
+ return _ReverseWrapper(
+ reverse_iterator<_Iter>(__unwrap_iter_impl<_Iter>::__rewrap(__orig_iter.base().base(), __unwrapped_iter)));
+ }
-#endif // _LIBCPP_STD_VER >= 20
+ static _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR _UnwrappedIter __unwrap(_ReverseWrapper __i) _NOEXCEPT {
+ return __unwrap_iter_impl<_Iter>::__unwrap(__i.base().base());
+ }
+};
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__locale b/contrib/libs/cxxsupp/libcxx/include/__locale
index de7c2c61f5..6692046386 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__locale
+++ b/contrib/libs/cxxsupp/libcxx/include/__locale
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___LOCALE
#define _LIBCPP___LOCALE
-#include <__availability>
#include <__config>
#include <__locale_dir/locale_base_api.h>
#include <__memory/shared_ptr.h> // __shared_count
diff --git a/contrib/libs/cxxsupp/libcxx/include/__mdspan/mdspan.h b/contrib/libs/cxxsupp/libcxx/include/__mdspan/mdspan.h
index 684828eb90..d9a0108d6d 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__mdspan/mdspan.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__mdspan/mdspan.h
@@ -27,7 +27,6 @@
#include <__type_traits/is_array.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_same.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
index 4e6303914c..b63a80933b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator.h
@@ -31,12 +31,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _Tp>
class allocator;
-#if defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS) && !defined(_LIBCPP_DISABLE_DEPRECATION_WARNINGS)
-# pragma clang deprecated( \
- _LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS, \
- "_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS is deprecated in LLVM 18 and will be removed in LLVM 19")
-#endif
-
#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION)
// These specializations shouldn't be marked _LIBCPP_DEPRECATED_IN_CXX17.
// Specializing allocator<void> is deprecated, but not using it.
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
index e79512b2ed..efdaa5e4ed 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/allocator_traits.h
@@ -14,9 +14,8 @@
#include <__memory/construct_at.h>
#include <__memory/pointer_traits.h>
#include <__type_traits/enable_if.h>
-#include <__type_traits/is_copy_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_empty.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/make_unsigned.h>
#include <__type_traits/remove_reference.h>
#include <__type_traits/void_t.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/compressed_pair.h b/contrib/libs/cxxsupp/libcxx/include/__memory/compressed_pair.h
index 373e131a78..328849d7cc 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/compressed_pair.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/compressed_pair.h
@@ -16,7 +16,7 @@
#include <__type_traits/decay.h>
#include <__type_traits/dependent_type.h>
#include <__type_traits/enable_if.h>
-#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_empty.h>
#include <__type_traits/is_final.h>
#include <__type_traits/is_same.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h b/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
index e78f2819af..fa25116b1a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/shared_ptr.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___MEMORY_SHARED_PTR_H
#define _LIBCPP___MEMORY_SHARED_PTR_H
-#include <__availability>
#include <__compare/compare_three_way.h>
#include <__compare/ordering.h>
#include <__config>
@@ -37,8 +36,8 @@
#include <__type_traits/disjunction.h>
#include <__type_traits/is_array.h>
#include <__type_traits/is_bounded_array.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_unbounded_array.h>
#include <__type_traits/nat.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/uninitialized_algorithms.h b/contrib/libs/cxxsupp/libcxx/include/__memory/uninitialized_algorithms.h
index 52cce1cf7c..7475ef5cf8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/uninitialized_algorithms.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/uninitialized_algorithms.h
@@ -25,10 +25,8 @@
#include <__type_traits/extent.h>
#include <__type_traits/is_array.h>
#include <__type_traits/is_constant_evaluated.h>
-#include <__type_traits/is_trivially_copy_assignable.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
-#include <__type_traits/is_trivially_move_assignable.h>
-#include <__type_traits/is_trivially_move_constructible.h>
+#include <__type_traits/is_trivially_assignable.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_relocatable.h>
#include <__type_traits/is_unbounded_array.h>
#include <__type_traits/negation.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/unique_ptr.h b/contrib/libs/cxxsupp/libcxx/include/__memory/unique_ptr.h
index 327e02cd2b..ff747e3374 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/unique_ptr.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/unique_ptr.h
@@ -28,7 +28,6 @@
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_function.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_reference.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory/uses_allocator_construction.h b/contrib/libs/cxxsupp/libcxx/include/__memory/uses_allocator_construction.h
index 71ae5bcd32..9b7262bec5 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory/uses_allocator_construction.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory/uses_allocator_construction.h
@@ -12,7 +12,7 @@
#include <__config>
#include <__memory/construct_at.h>
#include <__memory/uses_allocator.h>
-#include <__tuple/pair_like.h>
+#include <__tuple/tuple_like_no_subrange.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/is_same.h>
#include <__type_traits/remove_cv.h>
@@ -128,11 +128,7 @@ __uses_allocator_construction_args(const _Alloc& __alloc, const pair<_Up, _Vp>&&
std::forward_as_tuple(std::get<1>(std::move(__pair))));
}
-template < class _Pair,
- class _Alloc,
- __pair_like _PairLike,
- __enable_if_t<__is_cv_std_pair<_Pair> && !__is_specialization_of_subrange<remove_cvref_t<_PairLike>>::value,
- int> = 0>
+template <class _Pair, class _Alloc, __pair_like_no_subrange _PairLike, __enable_if_t<__is_cv_std_pair<_Pair>, int> = 0>
_LIBCPP_HIDE_FROM_ABI constexpr auto
__uses_allocator_construction_args(const _Alloc& __alloc, _PairLike&& __p) noexcept {
return std::__uses_allocator_construction_args<_Pair>(
@@ -161,9 +157,7 @@ inline constexpr bool __convertible_to_const_pair_ref =
# if _LIBCPP_STD_VER >= 23
template <class _Tp, class _Up>
inline constexpr bool __uses_allocator_constraints =
- __is_cv_std_pair<_Tp> &&
- (__is_specialization_of_subrange<remove_cvref_t<_Up>>::value ||
- (!__pair_like<_Up> && !__convertible_to_const_pair_ref<_Up>));
+ __is_cv_std_pair<_Tp> && !__pair_like_no_subrange<_Up> && !__convertible_to_const_pair_ref<_Up>;
# else
template <class _Tp, class _Up>
inline constexpr bool __uses_allocator_constraints = __is_cv_std_pair<_Tp> && !__convertible_to_const_pair_ref<_Up>;
diff --git a/contrib/libs/cxxsupp/libcxx/include/__memory_resource/polymorphic_allocator.h b/contrib/libs/cxxsupp/libcxx/include/__memory_resource/polymorphic_allocator.h
index cfd07bc84f..823c1503c2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__memory_resource/polymorphic_allocator.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__memory_resource/polymorphic_allocator.h
@@ -12,6 +12,7 @@
#include <__assert>
#include <__availability>
#include <__config>
+#include <__fwd/pair.h>
#include <__memory_resource/memory_resource.h>
#include <__utility/exception_guard.h>
#include <cstddef>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__mutex/mutex.h b/contrib/libs/cxxsupp/libcxx/include/__mutex/mutex.h
index ddc85cf5a0..1ed0154712 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__mutex/mutex.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__mutex/mutex.h
@@ -11,7 +11,7 @@
#include <__config>
#include <__thread/support.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/access.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/access.h
index 263fdd637f..3db4f11b40 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/access.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/access.h
@@ -41,12 +41,11 @@ concept __can_borrow = is_lvalue_reference_v<_Tp> || enable_borrowed_range<remov
namespace ranges {
namespace __begin {
template <class _Tp>
-concept __member_begin = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_begin = __can_borrow<_Tp> && requires(_Tp&& __t) {
{ _LIBCPP_AUTO_CAST(__t.begin()) } -> input_or_output_iterator;
};
-void begin(auto&) = delete;
-void begin(const auto&) = delete;
+void begin() = delete;
template <class _Tp>
concept __unqualified_begin =
@@ -104,13 +103,12 @@ using iterator_t = decltype(ranges::begin(std::declval<_Tp&>()));
namespace ranges {
namespace __end {
template <class _Tp>
-concept __member_end = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_end = __can_borrow<_Tp> && requires(_Tp&& __t) {
typename iterator_t<_Tp>;
{ _LIBCPP_AUTO_CAST(__t.end()) } -> sentinel_for<iterator_t<_Tp>>;
};
-void end(auto&) = delete;
-void end(const auto&) = delete;
+void end() = delete;
template <class _Tp>
concept __unqualified_end =
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/as_rvalue_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/as_rvalue_view.h
index 295aa94ed9..2fc272e798 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/as_rvalue_view.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/as_rvalue_view.h
@@ -111,18 +111,18 @@ namespace views {
namespace __as_rvalue {
struct __fn : __range_adaptor_closure<__fn> {
template <class _Range>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(/**/ as_rvalue_view(std::forward<_Range>(__range))))
- -> decltype(/*--*/ as_rvalue_view(std::forward<_Range>(__range))) {
- return /*-------------*/ as_rvalue_view(std::forward<_Range>(__range));
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr auto
+ operator()(_Range&& __range) noexcept(noexcept(as_rvalue_view(std::forward<_Range>(__range))))
+ -> decltype(/*--------------------------*/ as_rvalue_view(std::forward<_Range>(__range))) {
+ return /*---------------------------------*/ as_rvalue_view(std::forward<_Range>(__range));
}
template <class _Range>
requires same_as<range_rvalue_reference_t<_Range>, range_reference_t<_Range>>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Range&& __range) const
- noexcept(noexcept(/**/ views::all(std::forward<_Range>(__range))))
- -> decltype(/*--*/ views::all(std::forward<_Range>(__range))) {
- return /*-------------*/ views::all(std::forward<_Range>(__range));
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr auto
+ operator()(_Range&& __range) noexcept(noexcept(views::all(std::forward<_Range>(__range))))
+ -> decltype(/*--------------------------*/ views::all(std::forward<_Range>(__range))) {
+ return /*---------------------------------*/ views::all(std::forward<_Range>(__range));
}
};
} // namespace __as_rvalue
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/data.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/data.h
index 18002bb52c..131f6cdad8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/data.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/data.h
@@ -40,7 +40,7 @@ template <class _Tp>
concept __ptr_to_object = is_pointer_v<_Tp> && is_object_v<remove_pointer_t<_Tp>>;
template <class _Tp>
-concept __member_data = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_data = __can_borrow<_Tp> && requires(_Tp&& __t) {
{ _LIBCPP_AUTO_CAST(__t.data()) } -> __ptr_to_object;
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h
index acd55dae22..5c1004042a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/empty.h
@@ -29,7 +29,7 @@ _LIBCPP_BEGIN_NAMESPACE_STD
namespace ranges {
namespace __empty {
template <class _Tp>
-concept __member_empty = __workaround_52970<_Tp> && requires(_Tp&& __t) { bool(__t.empty()); };
+concept __member_empty = requires(_Tp&& __t) { bool(__t.empty()); };
template <class _Tp>
concept __can_invoke_size = !__member_empty<_Tp> && requires(_Tp&& __t) { ranges::size(__t); };
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h
index c8314dd848..9e6f724241 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/iota_view.h
@@ -31,7 +31,7 @@
#include <__ranges/movable_box.h>
#include <__ranges/view_interface.h>
#include <__type_traits/conditional.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/make_unsigned.h>
#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/movable_box.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/movable_box.h
index 9b38877494..5a456cc3a1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/movable_box.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/movable_box.h
@@ -17,8 +17,6 @@
#include <__memory/addressof.h>
#include <__memory/construct_at.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
#include <__utility/move.h>
#include <optional>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h
index 7111201ae7..12e739e1a2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/rbegin.h
@@ -36,12 +36,11 @@ _LIBCPP_BEGIN_NAMESPACE_STD
namespace ranges {
namespace __rbegin {
template <class _Tp>
-concept __member_rbegin = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_rbegin = __can_borrow<_Tp> && requires(_Tp&& __t) {
{ _LIBCPP_AUTO_CAST(__t.rbegin()) } -> input_or_output_iterator;
};
-void rbegin(auto&) = delete;
-void rbegin(const auto&) = delete;
+void rbegin() = delete;
template <class _Tp>
concept __unqualified_rbegin =
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h
index 58d98aafd2..5edbc4e316 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/rend.h
@@ -37,13 +37,12 @@ _LIBCPP_BEGIN_NAMESPACE_STD
namespace ranges {
namespace __rend {
template <class _Tp>
-concept __member_rend = __can_borrow<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_rend = __can_borrow<_Tp> && requires(_Tp&& __t) {
ranges::rbegin(__t);
{ _LIBCPP_AUTO_CAST(__t.rend()) } -> sentinel_for<decltype(ranges::rbegin(__t))>;
};
-void rend(auto&) = delete;
-void rend(const auto&) = delete;
+void rend() = delete;
template <class _Tp>
concept __unqualified_rend =
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/repeat_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/repeat_view.h
index 620a264549..5caea757a3 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/repeat_view.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/repeat_view.h
@@ -229,14 +229,13 @@ namespace views {
namespace __repeat {
struct __fn {
template <class _Tp>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __value) const
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Tp&& __value)
noexcept(noexcept(ranges::repeat_view(std::forward<_Tp>(__value))))
-> decltype( ranges::repeat_view(std::forward<_Tp>(__value)))
{ return ranges::repeat_view(std::forward<_Tp>(__value)); }
-
template <class _Tp, class _Bound>
- _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Tp&& __value, _Bound&& __bound_sentinel) const
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()(_Tp&& __value, _Bound&& __bound_sentinel)
noexcept(noexcept(ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel))))
-> decltype( ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel)))
{ return ranges::repeat_view(std::forward<_Tp>(__value), std::forward<_Bound>(__bound_sentinel)); }
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/size.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/size.h
index 14e21aae6b..40b0c6b6aa 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/size.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/size.h
@@ -41,14 +41,13 @@ inline constexpr bool disable_sized_range = false;
namespace ranges {
namespace __size {
-void size(auto&) = delete;
-void size(const auto&) = delete;
+void size() = delete;
template <class _Tp>
concept __size_enabled = !disable_sized_range<remove_cvref_t<_Tp>>;
template <class _Tp>
-concept __member_size = __size_enabled<_Tp> && __workaround_52970<_Tp> && requires(_Tp&& __t) {
+concept __member_size = __size_enabled<_Tp> && requires(_Tp&& __t) {
{ _LIBCPP_AUTO_CAST(__t.size()) } -> __integer_like;
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h
index bb4411cf35..051bc31139 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/subrange.h
@@ -28,8 +28,8 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/size.h>
#include <__ranges/view_interface.h>
-#include <__tuple/pair_like.h>
#include <__tuple/tuple_element.h>
+#include <__tuple/tuple_like_no_subrange.h>
#include <__tuple/tuple_size.h>
#include <__type_traits/conditional.h>
#include <__type_traits/decay.h>
@@ -64,7 +64,7 @@ concept __convertible_to_non_slicing =
template <class _Pair, class _Iter, class _Sent>
concept __pair_like_convertible_from =
- !range<_Pair> && __pair_like<_Pair> && constructible_from<_Pair, _Iter, _Sent> &&
+ !range<_Pair> && __pair_like_no_subrange<_Pair> && constructible_from<_Pair, _Iter, _Sent> &&
__convertible_to_non_slicing<_Iter, tuple_element_t<0, _Pair>> && convertible_to<_Sent, tuple_element_t<1, _Pair>>;
template <input_or_output_iterator _Iter,
@@ -125,8 +125,7 @@ public:
requires(_Kind == subrange_kind::sized)
: subrange(ranges::begin(__range), ranges::end(__range), __n) {}
- template <__different_from<subrange> _Pair>
- requires __pair_like_convertible_from<_Pair, const _Iter&, const _Sent&>
+ template <__pair_like_convertible_from<const _Iter&, const _Sent&> _Pair>
_LIBCPP_HIDE_FROM_ABI constexpr operator _Pair() const {
return _Pair(__begin_, __end_);
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/to.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/to.h
index cf162100ee..67818c521b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/to.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/to.h
@@ -207,7 +207,7 @@ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto to(_Args&&... __args)
static_assert(
!is_volatile_v<_Container>, "The target container cannot be volatile-qualified, please remove the volatile");
- auto __to_func = []<input_range _Range, class... _Tail>(_Range&& __range, _Tail&&... __tail)
+ auto __to_func = []<input_range _Range, class... _Tail>(_Range&& __range, _Tail&&... __tail) static
requires requires { //
/**/ ranges::to<_Container>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...);
}
@@ -223,7 +223,7 @@ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI constexpr auto to(_Args&&... __args)
// clang-format off
auto __to_func = []<input_range _Range, class... _Tail,
class _DeducedExpr = typename _Deducer<_Container, _Range, _Tail...>::type>
- (_Range&& __range, _Tail&& ... __tail)
+ (_Range&& __range, _Tail&& ... __tail) static
requires requires { //
/**/ ranges::to<_DeducedExpr>(std::forward<_Range>(__range), std::forward<_Tail>(__tail)...);
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
index 84dd1c316d..3bcfbaf3a2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/view_interface.h
@@ -21,6 +21,7 @@
#include <__ranges/access.h>
#include <__ranges/concepts.h>
#include <__ranges/empty.h>
+#include <__ranges/size.h>
#include <__type_traits/is_class.h>
#include <__type_traits/make_unsigned.h>
#include <__type_traits/remove_cv.h>
@@ -51,16 +52,24 @@ class view_interface {
public:
template <class _D2 = _Derived>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty()
- requires forward_range<_D2>
+ requires sized_range<_D2> || forward_range<_D2>
{
- return ranges::begin(__derived()) == ranges::end(__derived());
+ if constexpr (sized_range<_D2>) {
+ return ranges::size(__derived()) == 0;
+ } else {
+ return ranges::begin(__derived()) == ranges::end(__derived());
+ }
}
template <class _D2 = _Derived>
[[nodiscard]] _LIBCPP_HIDE_FROM_ABI constexpr bool empty() const
- requires forward_range<const _D2>
+ requires sized_range<const _D2> || forward_range<const _D2>
{
- return ranges::begin(__derived()) == ranges::end(__derived());
+ if constexpr (sized_range<const _D2>) {
+ return ranges::size(__derived()) == 0;
+ } else {
+ return ranges::begin(__derived()) == ranges::end(__derived());
+ }
}
template <class _D2 = _Derived>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__ranges/zip_view.h b/contrib/libs/cxxsupp/libcxx/include/__ranges/zip_view.h
index 4898c0afc8..fe3c87a930 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__ranges/zip_view.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__ranges/zip_view.h
@@ -30,12 +30,13 @@
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/size.h>
#include <__ranges/view_interface.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/make_unsigned.h>
#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/integer_sequence.h>
#include <__utility/move.h>
+#include <__utility/pair.h>
#include <tuple>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -489,12 +490,12 @@ namespace views {
namespace __zip {
struct __fn {
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator()() const noexcept { return empty_view<tuple<>>{}; }
+ _LIBCPP_HIDE_FROM_ABI static constexpr auto operator()() noexcept { return empty_view<tuple<>>{}; }
template <class... _Ranges>
- _LIBCPP_HIDE_FROM_ABI constexpr auto operator()(_Ranges&&... __rs) const
- noexcept(noexcept(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)))
- -> decltype(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)) {
+ _LIBCPP_HIDE_FROM_ABI static constexpr auto
+ operator()(_Ranges&&... __rs) noexcept(noexcept(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)))
+ -> decltype(zip_view<all_t<_Ranges&&>...>(std::forward<_Ranges>(__rs)...)) {
return zip_view<all_t<_Ranges>...>(std::forward<_Ranges>(__rs)...);
}
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__split_buffer b/contrib/libs/cxxsupp/libcxx/include/__split_buffer
index 2fe8b1e088..b638cb0063 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__split_buffer
+++ b/contrib/libs/cxxsupp/libcxx/include/__split_buffer
@@ -26,9 +26,8 @@
#include <__type_traits/add_lvalue_reference.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_swappable.h>
#include <__type_traits/is_trivially_destructible.h>
#include <__type_traits/remove_reference.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__string/char_traits.h b/contrib/libs/cxxsupp/libcxx/include/__string/char_traits.h
index 91b413abda..249057c944 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__string/char_traits.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__string/char_traits.h
@@ -9,7 +9,6 @@
#ifndef _LIBCPP___STRING_CHAR_TRAITS_H
#define _LIBCPP___STRING_CHAR_TRAITS_H
-#include <__algorithm/copy_n.h>
#include <__algorithm/fill_n.h>
#include <__algorithm/find_end.h>
#include <__algorithm/find_first_of.h>
@@ -244,7 +243,7 @@ struct _LIBCPP_TEMPLATE_VIS char_traits<char> {
copy(char_type* __s1, const char_type* __s2, size_t __n) _NOEXCEPT {
_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(!std::__is_pointer_in_range(__s1, __s1 + __n, __s2),
"char_traits::copy: source and destination ranges overlap");
- std::copy_n(__s2, __n, __s1);
+ std::__constexpr_memmove(__s1, __s2, __element_count(__n));
return __s1;
}
@@ -321,7 +320,7 @@ struct _LIBCPP_TEMPLATE_VIS char_traits<wchar_t> {
copy(char_type* __s1, const char_type* __s2, size_t __n) _NOEXCEPT {
_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(!std::__is_pointer_in_range(__s1, __s1 + __n, __s2),
"char_traits::copy: source and destination ranges overlap");
- std::copy_n(__s2, __n, __s1);
+ std::__constexpr_memmove(__s1, __s2, __element_count(__n));
return __s1;
}
@@ -387,7 +386,7 @@ struct _LIBCPP_TEMPLATE_VIS char_traits<char8_t> {
copy(char_type* __s1, const char_type* __s2, size_t __n) _NOEXCEPT {
_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(!std::__is_pointer_in_range(__s1, __s1 + __n, __s2),
"char_traits::copy: source and destination ranges overlap");
- std::copy_n(__s2, __n, __s1);
+ std::__constexpr_memmove(__s1, __s2, __element_count(__n));
return __s1;
}
@@ -466,7 +465,7 @@ struct _LIBCPP_TEMPLATE_VIS char_traits<char16_t> {
copy(char_type* __s1, const char_type* __s2, size_t __n) _NOEXCEPT {
_LIBCPP_ASSERT_NON_OVERLAPPING_RANGES(!std::__is_pointer_in_range(__s1, __s1 + __n, __s2),
"char_traits::copy: source and destination ranges overlap");
- std::copy_n(__s2, __n, __s1);
+ std::__constexpr_memmove(__s1, __s2, __element_count(__n));
return __s1;
}
@@ -554,7 +553,7 @@ struct _LIBCPP_TEMPLATE_VIS char_traits<char32_t> {
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 static char_type*
copy(char_type* __s1, const char_type* __s2, size_t __n) _NOEXCEPT {
- std::copy_n(__s2, __n, __s1);
+ std::__constexpr_memmove(__s1, __s2, __element_count(__n));
return __s1;
}
diff --git a/contrib/libs/cxxsupp/libcxx/include/__system_error/errc.h b/contrib/libs/cxxsupp/libcxx/include/__system_error/errc.h
index f87df86a71..e9f3656b7b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__system_error/errc.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__system_error/errc.h
@@ -58,18 +58,18 @@ enum class errc
no_child_process, // ECHILD
no_link, // ENOLINK
no_lock_available, // ENOLCK
- no_message_available, // ENODATA
+ no_message_available, // ENODATA // deprecated
no_message, // ENOMSG
no_protocol_option, // ENOPROTOOPT
no_space_on_device, // ENOSPC
- no_stream_resources, // ENOSR
+ no_stream_resources, // ENOSR // deprecated
no_such_device_or_address, // ENXIO
no_such_device, // ENODEV
no_such_file_or_directory, // ENOENT
no_such_process, // ESRCH
not_a_directory, // ENOTDIR
not_a_socket, // ENOTSOCK
- not_a_stream, // ENOSTR
+ not_a_stream, // ENOSTR // deprecated
not_connected, // ENOTCONN
not_enough_memory, // ENOMEM
not_supported, // ENOTSUP
@@ -87,7 +87,7 @@ enum class errc
resource_unavailable_try_again, // EAGAIN
result_out_of_range, // ERANGE
state_not_recoverable, // ENOTRECOVERABLE
- stream_timeout, // ETIME
+ stream_timeout, // ETIME // deprecated
text_file_busy, // ETXTBSY
timed_out, // ETIMEDOUT
too_many_files_open_in_system, // ENFILE
@@ -107,12 +107,34 @@ enum class errc
# pragma GCC system_header
#endif
+// The method of pushing and popping the diagnostics fails for GCC. GCC does
+// not recognize the pragma's used to generate deprecated diagnostics for
+// macros. So GCC does not need the pushing and popping.
+//
+// TODO Remove this when the deprecated constants are removed.
+#if defined(_LIBCPP_COMPILER_CLANG_BASED)
+# define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH _LIBCPP_SUPPRESS_DEPRECATED_PUSH
+# define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP _LIBCPP_SUPPRESS_DEPRECATED_POP
+#else
+# define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
+# define _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
+#endif
+
_LIBCPP_BEGIN_NAMESPACE_STD
// Some error codes are not present on all platforms, so we provide equivalents
// for them:
// enum class errc
+//
+// LWG3869 deprecates the UNIX STREAMS macros and enum values.
+// This makes the code clumbersome:
+// - the enum value is deprecated and should show a diagnostic,
+// - the macro is deprecated and should _not_ show a diagnostic in this
+// context, and
+// - the macro is not always available.
+// This leads to the odd pushing and popping of the deprecated
+// diagnostic.
_LIBCPP_DECLARE_STRONG_ENUM(errc){
address_family_not_supported = EAFNOSUPPORT,
address_in_use = EADDRINUSE,
@@ -154,30 +176,48 @@ _LIBCPP_DECLARE_STRONG_ENUM(errc){
no_child_process = ECHILD,
no_link = ENOLINK,
no_lock_available = ENOLCK,
+ // clang-format off
+ no_message_available _LIBCPP_DEPRECATED =
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
#ifdef ENODATA
- no_message_available = ENODATA,
+ ENODATA
#else
- no_message_available = ENOMSG,
+ ENOMSG
#endif
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
+ ,
+ // clang-format on
no_message = ENOMSG,
no_protocol_option = ENOPROTOOPT,
no_space_on_device = ENOSPC,
+ // clang-format off
+ no_stream_resources _LIBCPP_DEPRECATED =
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
#ifdef ENOSR
- no_stream_resources = ENOSR,
+ ENOSR
#else
- no_stream_resources = ENOMEM,
+ ENOMEM
#endif
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
+ ,
+ // clang-format on
no_such_device_or_address = ENXIO,
no_such_device = ENODEV,
no_such_file_or_directory = ENOENT,
no_such_process = ESRCH,
not_a_directory = ENOTDIR,
not_a_socket = ENOTSOCK,
+ // clang-format off
+ not_a_stream _LIBCPP_DEPRECATED =
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
#ifdef ENOSTR
- not_a_stream = ENOSTR,
+ ENOSTR
#else
- not_a_stream = EINVAL,
+ EINVAL
#endif
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
+ ,
+ // clang-format on
not_connected = ENOTCONN,
not_enough_memory = ENOMEM,
not_supported = ENOTSUP,
@@ -195,11 +235,17 @@ _LIBCPP_DECLARE_STRONG_ENUM(errc){
resource_unavailable_try_again = EAGAIN,
result_out_of_range = ERANGE,
state_not_recoverable = ENOTRECOVERABLE,
+ // clang-format off
+ stream_timeout _LIBCPP_DEPRECATED =
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_PUSH
#ifdef ETIME
- stream_timeout = ETIME,
+ ETIME
#else
- stream_timeout = ETIMEDOUT,
+ ETIMEDOUT
#endif
+ _LIBCPP_SUPPRESS_DEPRECATED_ERRC_POP
+ ,
+ // clang-format on
text_file_busy = ETXTBSY,
timed_out = ETIMEDOUT,
too_many_files_open_in_system = ENFILE,
diff --git a/contrib/libs/cxxsupp/libcxx/include/__thread/support/pthread.h b/contrib/libs/cxxsupp/libcxx/include/__thread/support/pthread.h
index e194e5c68a..531f3e71de 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__thread/support/pthread.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__thread/support/pthread.h
@@ -10,7 +10,6 @@
#ifndef _LIBCPP___THREAD_SUPPORT_PTHREAD_H
#define _LIBCPP___THREAD_SUPPORT_PTHREAD_H
-#include <__availability>
#include <__chrono/convert_to_timespec.h>
#include <__chrono/duration.h>
#include <__config>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tree b/contrib/libs/cxxsupp/libcxx/include/__tree
index 0d727ad5c9..5a0d8f42a6 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tree
+++ b/contrib/libs/cxxsupp/libcxx/include/__tree
@@ -26,11 +26,9 @@
#include <__type_traits/can_extract_key.h>
#include <__type_traits/conditional.h>
#include <__type_traits/is_const.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_swappable.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/find_index.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/find_index.h
new file mode 100644
index 0000000000..133b00419d
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/find_index.h
@@ -0,0 +1,62 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___TUPLE_FIND_INDEX_H
+#define _LIBCPP___TUPLE_FIND_INDEX_H
+
+#include <__config>
+#include <__type_traits/is_same.h>
+#include <cstddef>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+#if _LIBCPP_STD_VER >= 14
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+namespace __find_detail {
+
+static constexpr size_t __not_found = static_cast<size_t>(-1);
+static constexpr size_t __ambiguous = __not_found - 1;
+
+inline _LIBCPP_HIDE_FROM_ABI constexpr size_t __find_idx_return(size_t __curr_i, size_t __res, bool __matches) {
+ return !__matches ? __res : (__res == __not_found ? __curr_i : __ambiguous);
+}
+
+template <size_t _Nx>
+inline _LIBCPP_HIDE_FROM_ABI constexpr size_t __find_idx(size_t __i, const bool (&__matches)[_Nx]) {
+ return __i == _Nx
+ ? __not_found
+ : __find_detail::__find_idx_return(__i, __find_detail::__find_idx(__i + 1, __matches), __matches[__i]);
+}
+
+template <class _T1, class... _Args>
+struct __find_exactly_one_checked {
+ static constexpr bool __matches[sizeof...(_Args)] = {is_same<_T1, _Args>::value...};
+ static constexpr size_t value = __find_detail::__find_idx(0, __matches);
+ static_assert(value != __not_found, "type not found in type list");
+ static_assert(value != __ambiguous, "type occurs more than once in type list");
+};
+
+template <class _T1>
+struct __find_exactly_one_checked<_T1> {
+ static_assert(!is_same<_T1, _T1>::value, "type not in empty type list");
+};
+
+} // namespace __find_detail
+
+template <typename _T1, typename... _Args>
+struct __find_exactly_one_t : public __find_detail::__find_exactly_one_checked<_T1, _Args...> {};
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP_STD_VER >= 14
+
+#endif // _LIBCPP___TUPLE_FIND_INDEX_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h
index c76e7e0601..dfd00f5237 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/sfinae_helpers.h
@@ -16,6 +16,7 @@
#include <__tuple/tuple_like_ext.h>
#include <__tuple/tuple_size.h>
#include <__tuple/tuple_types.h>
+#include <__type_traits/conjunction.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_constructible.h>
@@ -32,12 +33,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
#ifndef _LIBCPP_CXX03_LANG
-template <bool... _Preds>
-struct __all_dummy;
-
-template <bool... _Pred>
-struct __all : _IsSame<__all_dummy<_Pred...>, __all_dummy<((void)_Pred, true)...>> {};
-
struct __tuple_sfinae_base {
template <template <class, class...> class _Trait, class... _LArgs, class... _RArgs>
static auto __do_test(__tuple_types<_LArgs...>, __tuple_types<_RArgs...>)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h
index e811a2174a..c6818f227b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_element.h
@@ -12,9 +12,6 @@
#include <__config>
#include <__tuple/tuple_indices.h>
#include <__tuple/tuple_types.h>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_cv.h>
-#include <__type_traits/add_volatile.h>
#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -28,17 +25,17 @@ struct _LIBCPP_TEMPLATE_VIS tuple_element;
template <size_t _Ip, class _Tp>
struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const _Tp> {
- typedef _LIBCPP_NODEBUG typename add_const<typename tuple_element<_Ip, _Tp>::type>::type type;
+ typedef _LIBCPP_NODEBUG const typename tuple_element<_Ip, _Tp>::type type;
};
template <size_t _Ip, class _Tp>
struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, volatile _Tp> {
- typedef _LIBCPP_NODEBUG typename add_volatile<typename tuple_element<_Ip, _Tp>::type>::type type;
+ typedef _LIBCPP_NODEBUG volatile typename tuple_element<_Ip, _Tp>::type type;
};
template <size_t _Ip, class _Tp>
struct _LIBCPP_TEMPLATE_VIS tuple_element<_Ip, const volatile _Tp> {
- typedef _LIBCPP_NODEBUG typename add_cv<typename tuple_element<_Ip, _Tp>::type>::type type;
+ typedef _LIBCPP_NODEBUG const volatile typename tuple_element<_Ip, _Tp>::type type;
};
#ifndef _LIBCPP_CXX03_LANG
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h
index 967e4a543c..c080a3dcf1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like.h
@@ -10,12 +10,9 @@
#define _LIBCPP___TUPLE_TUPLE_LIKE_H
#include <__config>
-#include <__fwd/array.h>
-#include <__fwd/complex.h>
-#include <__fwd/pair.h>
#include <__fwd/subrange.h>
-#include <__fwd/tuple.h>
-#include <__type_traits/integral_constant.h>
+#include <__tuple/tuple_like_no_subrange.h>
+#include <__tuple/tuple_size.h>
#include <__type_traits/remove_cvref.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -27,29 +24,16 @@ _LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER >= 20
template <class _Tp>
-struct __tuple_like_impl : false_type {};
+inline constexpr bool __is_ranges_subrange_v = false;
-template <class... _Tp>
-struct __tuple_like_impl<tuple<_Tp...> > : true_type {};
-
-template <class _T1, class _T2>
-struct __tuple_like_impl<pair<_T1, _T2> > : true_type {};
-
-template <class _Tp, size_t _Size>
-struct __tuple_like_impl<array<_Tp, _Size> > : true_type {};
-
-template <class _Ip, class _Sp, ranges::subrange_kind _Kp>
-struct __tuple_like_impl<ranges::subrange<_Ip, _Sp, _Kp> > : true_type {};
-
-# if _LIBCPP_STD_VER >= 26
+template <class _Iter, class _Sent, ranges::subrange_kind _Kind>
+inline constexpr bool __is_ranges_subrange_v<ranges::subrange<_Iter, _Sent, _Kind>> = true;
template <class _Tp>
-struct __tuple_like_impl<complex<_Tp>> : true_type {};
-
-# endif
+concept __tuple_like = __tuple_like_no_subrange<_Tp> || __is_ranges_subrange_v<remove_cvref_t<_Tp>>;
-template <class _Tp>
-concept __tuple_like = __tuple_like_impl<remove_cvref_t<_Tp>>::value;
+// As of writing this comment every use of `pair-like` in the standard excludes `ranges::subrange`, so
+// you most likely want to use `__pair_like_no_subrange` if you're looking for `pair-like`.
#endif // _LIBCPP_STD_VER >= 20
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_no_subrange.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_no_subrange.h
new file mode 100644
index 0000000000..274b0bf188
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_like_no_subrange.h
@@ -0,0 +1,61 @@
+//===----------------------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP___TUPLE_TUPLE_LIKE_NO_SUBRANGE_H
+#define _LIBCPP___TUPLE_TUPLE_LIKE_NO_SUBRANGE_H
+
+#include <__config>
+#include <__fwd/array.h>
+#include <__fwd/complex.h>
+#include <__fwd/pair.h>
+#include <__fwd/tuple.h>
+#include <__tuple/tuple_size.h>
+#include <__type_traits/remove_cvref.h>
+#include <cstddef>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
+
+_LIBCPP_BEGIN_NAMESPACE_STD
+
+#if _LIBCPP_STD_VER >= 20
+
+template <class _Tp>
+inline constexpr bool __tuple_like_no_subrange_impl = false;
+
+template <class... _Tp>
+inline constexpr bool __tuple_like_no_subrange_impl<tuple<_Tp...>> = true;
+
+template <class _T1, class _T2>
+inline constexpr bool __tuple_like_no_subrange_impl<pair<_T1, _T2>> = true;
+
+template <class _Tp, size_t _Size>
+inline constexpr bool __tuple_like_no_subrange_impl<array<_Tp, _Size>> = true;
+
+# if _LIBCPP_STD_VER >= 26
+
+template <class _Tp>
+inline constexpr bool __tuple_like_no_subrange_impl<complex<_Tp>> = true;
+
+# endif
+
+template <class _Tp>
+concept __tuple_like_no_subrange = __tuple_like_no_subrange_impl<remove_cvref_t<_Tp>>;
+
+// This is equivalent to the exposition-only type trait `pair-like`, except that it is false for specializations of
+// `ranges::subrange`. This is more useful than the pair-like concept in the standard because every use of `pair-like`
+// excludes `ranges::subrange`.
+template <class _Tp>
+concept __pair_like_no_subrange = __tuple_like_no_subrange<_Tp> && tuple_size<remove_cvref_t<_Tp>>::value == 2;
+
+#endif // _LIBCPP_STD_VER >= 20
+
+_LIBCPP_END_NAMESPACE_STD
+
+#endif // _LIBCPP___TUPLE_TUPLE_LIKE_NO_SUBRANGE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h
index b8320106fb..668be13a5c 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__tuple/tuple_size.h
@@ -43,7 +43,7 @@ struct _LIBCPP_TEMPLATE_VIS tuple_size<__enable_if_tuple_size_imp< volatile _Tp,
template <class _Tp>
struct _LIBCPP_TEMPLATE_VIS
- tuple_size<__enable_if_tuple_size_imp< const volatile _Tp, integral_constant<size_t, sizeof(tuple_size<_Tp>)>>>
+ tuple_size<__enable_if_tuple_size_imp<const volatile _Tp, integral_constant<size_t, sizeof(tuple_size<_Tp>)>>>
: public integral_constant<size_t, tuple_size<_Tp>::value> {};
#else
@@ -63,6 +63,11 @@ struct _LIBCPP_TEMPLATE_VIS tuple_size<tuple<_Tp...> > : public integral_constan
template <class... _Tp>
struct _LIBCPP_TEMPLATE_VIS tuple_size<__tuple_types<_Tp...> > : public integral_constant<size_t, sizeof...(_Tp)> {};
+# if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
+# endif
+
#endif // _LIBCPP_CXX03_LANG
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/apply_cv.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/apply_cv.h
index 7c6aabec83..723af95b8d 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/apply_cv.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/apply_cv.h
@@ -10,9 +10,7 @@
#define _LIBCPP___TYPE_TRAITS_APPLY_CV_H
#include <__config>
-#include <__type_traits/is_const.h>
-#include <__type_traits/is_volatile.h>
-#include <__type_traits/remove_reference.h>
+#include <__type_traits/copy_cv.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -20,54 +18,16 @@
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Tp,
- bool = is_const<__libcpp_remove_reference_t<_Tp> >::value,
- bool = is_volatile<__libcpp_remove_reference_t<_Tp> >::value>
-struct __apply_cv_impl {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = _Up;
-};
-
template <class _Tp>
-struct __apply_cv_impl<_Tp, true, false> {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = const _Up;
-};
-
-template <class _Tp>
-struct __apply_cv_impl<_Tp, false, true> {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = volatile _Up;
-};
-
-template <class _Tp>
-struct __apply_cv_impl<_Tp, true, true> {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = const volatile _Up;
-};
-
-template <class _Tp>
-struct __apply_cv_impl<_Tp&, false, false> {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = _Up&;
-};
-
-template <class _Tp>
-struct __apply_cv_impl<_Tp&, true, false> {
- template <class _Up>
- using __apply _LIBCPP_NODEBUG = const _Up&;
-};
-
-template <class _Tp>
-struct __apply_cv_impl<_Tp&, false, true> {
+struct __apply_cv_impl {
template <class _Up>
- using __apply _LIBCPP_NODEBUG = volatile _Up&;
+ using __apply _LIBCPP_NODEBUG = __copy_cv_t<_Tp, _Up>;
};
template <class _Tp>
-struct __apply_cv_impl<_Tp&, true, true> {
+struct __apply_cv_impl<_Tp&> {
template <class _Up>
- using __apply _LIBCPP_NODEBUG = const volatile _Up&;
+ using __apply _LIBCPP_NODEBUG = __copy_cv_t<_Tp, _Up>&;
};
template <class _Tp, class _Up>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/conjunction.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/conjunction.h
index 4bfa5a2730..c2995591bb 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/conjunction.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/conjunction.h
@@ -13,6 +13,7 @@
#include <__type_traits/conditional.h>
#include <__type_traits/enable_if.h>
#include <__type_traits/integral_constant.h>
+#include <__type_traits/is_same.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -37,6 +38,12 @@ false_type __and_helper(...);
template <class... _Pred>
using _And _LIBCPP_NODEBUG = decltype(std::__and_helper<_Pred...>(0));
+template <bool... _Preds>
+struct __all_dummy;
+
+template <bool... _Pred>
+struct __all : _IsSame<__all_dummy<_Pred...>, __all_dummy<((void)_Pred, true)...> > {};
+
#if _LIBCPP_STD_VER >= 17
template <class...>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/copy_cv.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/copy_cv.h
index 3c4ee857f7..b1c057ff77 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/copy_cv.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/copy_cv.h
@@ -10,9 +10,6 @@
#define _LIBCPP___TYPE_TRAITS_COPY_CV_H
#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_cv.h>
-#include <__type_traits/add_volatile.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -29,17 +26,17 @@ struct __copy_cv {
template <class _From, class _To>
struct __copy_cv<const _From, _To> {
- using type = typename add_const<_To>::type;
+ using type = const _To;
};
template <class _From, class _To>
struct __copy_cv<volatile _From, _To> {
- using type = typename add_volatile<_To>::type;
+ using type = volatile _To;
};
template <class _From, class _To>
struct __copy_cv<const volatile _From, _To> {
- using type = typename add_cv<_To>::type;
+ using type = const volatile _To;
};
template <class _From, class _To>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_assignable.h
index 11134b1c1a..cfb4699777 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_assignable.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_assignable.h
@@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_TRAITS_IS_ASSIGNABLE_H
#include <__config>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -26,6 +28,25 @@ template <class _Tp, class _Arg>
inline constexpr bool is_assignable_v = __is_assignable(_Tp, _Arg);
#endif
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_copy_assignable
+ : public integral_constant<bool,
+ __is_assignable(__add_lvalue_reference_t<_Tp>, __add_lvalue_reference_t<const _Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_move_assignable
+ : public integral_constant<bool, __is_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_TRAITS_IS_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h
index 4e62eb061f..567bd165c7 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_constructible.h
@@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_IS_CONSTRUCTIBLE_H
#include <__config>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -26,6 +28,32 @@ template <class _Tp, class... _Args>
inline constexpr bool is_constructible_v = __is_constructible(_Tp, _Args...);
#endif
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_copy_constructible
+ : public integral_constant<bool, __is_constructible(_Tp, __add_lvalue_reference_t<const _Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_copy_constructible_v = is_copy_constructible<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_move_constructible
+ : public integral_constant<bool, __is_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_move_constructible_v = is_move_constructible<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_default_constructible : public integral_constant<bool, __is_constructible(_Tp)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_default_constructible_v = __is_constructible(_Tp);
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_IS_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h
index bc91d8b234..414c2a6d6a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_convertible.h
@@ -11,12 +11,6 @@
#include <__config>
#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_array.h>
-#include <__type_traits/is_function.h>
-#include <__type_traits/is_void.h>
-#include <__type_traits/remove_reference.h>
-#include <__utility/declval.h>
-#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_assignable.h
deleted file mode 100644
index e607ace540..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_assignable.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_COPY_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_COPY_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_copy_assignable
- : public integral_constant<
- bool,
- __is_assignable(__add_lvalue_reference_t<_Tp>, __add_lvalue_reference_t<typename add_const<_Tp>::type>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_copy_assignable_v = is_copy_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_COPY_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_constructible.h
deleted file mode 100644
index 402f2b8987..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_copy_constructible.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_COPY_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_COPY_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_copy_constructible
- : public integral_constant<bool, __is_constructible(_Tp, __add_lvalue_reference_t<typename add_const<_Tp>::type>)> {
-};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_copy_constructible_v = is_copy_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_COPY_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_default_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_default_constructible.h
deleted file mode 100644
index e73e9b98f5..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_default_constructible.h
+++ /dev/null
@@ -1,31 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_DEFAULT_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_DEFAULT_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_default_constructible : public integral_constant<bool, __is_constructible(_Tp)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_default_constructible_v = __is_constructible(_Tp);
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_DEFAULT_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_implicitly_default_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_implicitly_default_constructible.h
index 576166e526..d5dadd7b87 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_implicitly_default_constructible.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_implicitly_default_constructible.h
@@ -11,7 +11,7 @@
#include <__config>
#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_default_constructible.h>
+#include <__type_traits/is_constructible.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_assignable.h
deleted file mode 100644
index 867bc00d82..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_assignable.h
+++ /dev/null
@@ -1,34 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_MOVE_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_MOVE_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_move_assignable
- : public integral_constant<bool, __is_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_move_assignable_v = is_move_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_MOVE_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_constructible.h
deleted file mode 100644
index 40ec4a0708..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_move_constructible.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_MOVE_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_MOVE_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_move_constructible
- : public integral_constant<bool, __is_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_move_constructible_v = is_move_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_MOVE_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h
index cc57493313..7e00c741f8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_assignable.h
@@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_ASSIGNABLE_H
#include <__config>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -27,6 +29,28 @@ template <class _Tp, class _Arg>
inline constexpr bool is_nothrow_assignable_v = __is_nothrow_assignable(_Tp, _Arg);
#endif
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_assignable
+ : public integral_constant<
+ bool,
+ __is_nothrow_assignable(__add_lvalue_reference_t<_Tp>, __add_lvalue_reference_t<const _Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_assignable
+ : public integral_constant<bool,
+ __is_nothrow_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {
+};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<_Tp>::value;
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h
index 8a87d1957e..678debb455 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_constructible.h
@@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_CONSTRUCTIBLE_H
#include <__config>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_reference.h>
@@ -66,6 +68,55 @@ template <class _Tp, class... _Args>
inline constexpr bool is_nothrow_constructible_v = is_nothrow_constructible<_Tp, _Args...>::value;
#endif
+// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
+#ifdef _LIBCPP_COMPILER_GCC
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
+ : public is_nothrow_constructible<_Tp, __add_lvalue_reference_t<const _Tp> > {};
+
+#else // _LIBCPP_COMPILER_GCC
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
+ : public integral_constant< bool, __is_nothrow_constructible(_Tp, __add_lvalue_reference_t<const _Tp>)> {};
+
+#endif // _LIBCPP_COMPILER_GCC
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible<_Tp>::value;
+#endif
+
+// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
+#ifndef _LIBCPP_COMPILER_GCC
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
+ : public integral_constant<bool, __is_nothrow_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
+
+#else // _LIBCPP_COMPILER_GCC
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
+ : public is_nothrow_constructible<_Tp, __add_rvalue_reference_t<_Tp> > {};
+
+#endif // _LIBCPP_COMPILER_GCC
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_nothrow_default_constructible
+ : public integral_constant<bool, __is_nothrow_constructible(_Tp)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_nothrow_default_constructible_v = __is_nothrow_constructible(_Tp);
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_assignable.h
deleted file mode 100644
index a97e962b30..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_assignable.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_assignable
- : public integral_constant<bool,
- __is_nothrow_assignable(__add_lvalue_reference_t<_Tp>,
- __add_lvalue_reference_t<typename add_const<_Tp>::type>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_nothrow_copy_assignable_v = is_nothrow_copy_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_constructible.h
deleted file mode 100644
index dd7f1d5ef6..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_copy_constructible.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_nothrow_constructible.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
-#ifdef _LIBCPP_COMPILER_GCC
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
- : public is_nothrow_constructible<_Tp, __add_lvalue_reference_t<typename add_const<_Tp>::type> > {};
-
-#else // _LIBCPP_COMPILER_GCC
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_copy_constructible
- : public integral_constant<
- bool,
- __is_nothrow_constructible(_Tp, typename add_lvalue_reference<typename add_const<_Tp>::type>::type)> {};
-
-#endif // _LIBCPP_COMPILER_GCC
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_nothrow_copy_constructible_v = is_nothrow_copy_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_COPY_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_default_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_default_constructible.h
deleted file mode 100644
index 58f31f21b0..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_default_constructible.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_default_constructible
- : public integral_constant<bool, __is_nothrow_constructible(_Tp)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_nothrow_default_constructible_v = __is_nothrow_constructible(_Tp);
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_DEFAULT_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_assignable.h
deleted file mode 100644
index aa87e369cd..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_assignable.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_assignable
- : public integral_constant<bool,
- __is_nothrow_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {
-};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_nothrow_move_assignable_v = is_nothrow_move_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_constructible.h
deleted file mode 100644
index dab5a019b3..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_nothrow_move_constructible.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_nothrow_constructible.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-// TODO: remove this implementation once https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611 is fixed
-#ifndef _LIBCPP_COMPILER_GCC
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
- : public integral_constant<bool, __is_nothrow_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
-
-#else // _LIBCPP_COMPILER_GCC
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_nothrow_move_constructible
- : public is_nothrow_constructible<_Tp, __add_rvalue_reference_t<_Tp> > {};
-
-#endif // _LIBCPP_COMPILER_GCC
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_nothrow_move_constructible_v = is_nothrow_move_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_NOTHROW_MOVE_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_scoped_enum.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_scoped_enum.h
index 43b3a6b66b..1db88e1335 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_scoped_enum.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_scoped_enum.h
@@ -22,6 +22,18 @@
_LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER >= 23
+
+// TODO: GCC and Clang both have this builtin. Remove the false case once we've updated to GCC 14.
+# if __has_builtin(__is_scoped_enum)
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_scoped_enum : bool_constant<__is_scoped_enum(_Tp)> {};
+
+template <class _Tp>
+inline constexpr bool is_scoped_enum_v = __is_scoped_enum(_Tp);
+
+# else
+
template <class _Tp, bool = is_enum_v<_Tp> >
struct __is_scoped_enum_helper : false_type {};
@@ -33,7 +45,10 @@ struct _LIBCPP_TEMPLATE_VIS is_scoped_enum : public __is_scoped_enum_helper<_Tp>
template <class _Tp>
inline constexpr bool is_scoped_enum_v = is_scoped_enum<_Tp>::value;
-#endif
+
+# endif // __has_builtin(__is_scoped_enum)
+
+#endif // _LIBCPP_STD_VER >= 23
_LIBCPP_END_NAMESPACE_STD
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_swappable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_swappable.h
index 06e092692d..06b59e5c25 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_swappable.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_swappable.h
@@ -13,10 +13,10 @@
#include <__type_traits/add_lvalue_reference.h>
#include <__type_traits/conditional.h>
#include <__type_traits/enable_if.h>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_referenceable.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_void.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h
index 19169d13d6..201333b0fa 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_assignable.h
@@ -10,6 +10,9 @@
#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_ASSIGNABLE_H
#include <__config>
+#include <__type_traits/add_const.h>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -26,6 +29,28 @@ template <class _Tp, class _Arg>
inline constexpr bool is_trivially_assignable_v = __is_trivially_assignable(_Tp, _Arg);
#endif
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_trivially_copy_assignable
+ : public integral_constant<
+ bool,
+ __is_trivially_assignable(__add_lvalue_reference_t<_Tp>, __add_lvalue_reference_t<const _Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_trivially_copy_assignable_v = is_trivially_copy_assignable<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_trivially_move_assignable
+ : public integral_constant<
+ bool,
+ __is_trivially_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_trivially_move_assignable_v = is_trivially_move_assignable<_Tp>::value;
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h
index 4faaf9323c..3a77e9fe16 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_constructible.h
@@ -10,6 +10,8 @@
#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_CONSTRUCTIBLE_H
#include <__config>
+#include <__type_traits/add_lvalue_reference.h>
+#include <__type_traits/add_rvalue_reference.h>
#include <__type_traits/integral_constant.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
@@ -27,6 +29,33 @@ template <class _Tp, class... _Args>
inline constexpr bool is_trivially_constructible_v = __is_trivially_constructible(_Tp, _Args...);
#endif
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_trivially_copy_constructible
+ : public integral_constant<bool, __is_trivially_constructible(_Tp, __add_lvalue_reference_t<const _Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_trivially_copy_constructible_v = is_trivially_copy_constructible<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_trivially_move_constructible
+ : public integral_constant<bool, __is_trivially_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_trivially_move_constructible_v = is_trivially_move_constructible<_Tp>::value;
+#endif
+
+template <class _Tp>
+struct _LIBCPP_TEMPLATE_VIS is_trivially_default_constructible
+ : public integral_constant<bool, __is_trivially_constructible(_Tp)> {};
+
+#if _LIBCPP_STD_VER >= 17
+template <class _Tp>
+inline constexpr bool is_trivially_default_constructible_v = __is_trivially_constructible(_Tp);
+#endif
+
_LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_assignable.h
deleted file mode 100644
index b6b3c11974..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_assignable.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_const.h>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_copy_assignable
- : public integral_constant<bool,
- __is_trivially_assignable(__add_lvalue_reference_t<_Tp>,
- __add_lvalue_reference_t<typename add_const<_Tp>::type>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_trivially_copy_assignable_v = is_trivially_copy_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_constructible.h
deleted file mode 100644
index 8e71fd1fbf..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_copy_constructible.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_copy_constructible
- : public integral_constant<bool, __is_trivially_constructible(_Tp, __add_lvalue_reference_t<const _Tp>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_trivially_copy_constructible_v = is_trivially_copy_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_COPY_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_default_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_default_constructible.h
deleted file mode 100644
index c3b6152a9f..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_default_constructible.h
+++ /dev/null
@@ -1,32 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_default_constructible
- : public integral_constant<bool, __is_trivially_constructible(_Tp)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_trivially_default_constructible_v = __is_trivially_constructible(_Tp);
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_DEFAULT_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_assignable.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_assignable.h
deleted file mode 100644
index daf890b26c..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_assignable.h
+++ /dev/null
@@ -1,36 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_ASSIGNABLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_ASSIGNABLE_H
-
-#include <__config>
-#include <__type_traits/add_lvalue_reference.h>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_move_assignable
- : public integral_constant<
- bool,
- __is_trivially_assignable(__add_lvalue_reference_t<_Tp>, __add_rvalue_reference_t<_Tp>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_trivially_move_assignable_v = is_trivially_move_assignable<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_ASSIGNABLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_constructible.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_constructible.h
deleted file mode 100644
index 71e6f898fb..0000000000
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/is_trivially_move_constructible.h
+++ /dev/null
@@ -1,33 +0,0 @@
-//===----------------------------------------------------------------------===//
-//
-// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
-// See https://llvm.org/LICENSE.txt for license information.
-// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_H
-#define _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_H
-
-#include <__config>
-#include <__type_traits/add_rvalue_reference.h>
-#include <__type_traits/integral_constant.h>
-
-#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-#endif
-
-_LIBCPP_BEGIN_NAMESPACE_STD
-
-template <class _Tp>
-struct _LIBCPP_TEMPLATE_VIS is_trivially_move_constructible
- : public integral_constant<bool, __is_trivially_constructible(_Tp, __add_rvalue_reference_t<_Tp>)> {};
-
-#if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr bool is_trivially_move_constructible_v = is_trivially_move_constructible<_Tp>::value;
-#endif
-
-_LIBCPP_END_NAMESPACE_STD
-
-#endif // _LIBCPP___TYPE_TRAITS_IS_TRIVIALLY_MOVE_CONSTRUCTIBLE_H
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/noexcept_move_assign_container.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/noexcept_move_assign_container.h
index 1d6c07e8cf..baaf36d998 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/noexcept_move_assign_container.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/noexcept_move_assign_container.h
@@ -12,7 +12,7 @@
#include <__config>
#include <__memory/allocator_traits.h>
#include <__type_traits/integral_constant.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_assignable.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
diff --git a/contrib/libs/cxxsupp/libcxx/include/__type_traits/remove_reference.h b/contrib/libs/cxxsupp/libcxx/include/__type_traits/remove_reference.h
index fd66417bd8..ef11b16a96 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__type_traits/remove_reference.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__type_traits/remove_reference.h
@@ -10,7 +10,6 @@
#define _LIBCPP___TYPE_TRAITS_REMOVE_REFERENCE_H
#include <__config>
-#include <cstddef>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
@@ -26,13 +25,20 @@ struct remove_reference {
template <class _Tp>
using __libcpp_remove_reference_t = __remove_reference_t(_Tp);
+#elif __has_builtin(__remove_reference)
+template <class _Tp>
+struct remove_reference {
+ using type _LIBCPP_NODEBUG = __remove_reference(_Tp);
+};
+
+template <class _Tp>
+using __libcpp_remove_reference_t = typename remove_reference<_Tp>::type;
#else
// clang-format off
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference {typedef _LIBCPP_NODEBUG _Tp type;};
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&> {typedef _LIBCPP_NODEBUG _Tp type;};
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&&> {typedef _LIBCPP_NODEBUG _Tp type;};
// clang-format on
-
template <class _Tp>
using __libcpp_remove_reference_t = typename remove_reference<_Tp>::type;
#endif // __has_builtin(__remove_reference_t)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/exception_guard.h b/contrib/libs/cxxsupp/libcxx/include/__utility/exception_guard.h
index 8d90dfd5f1..93290be40e 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/exception_guard.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/exception_guard.h
@@ -11,7 +11,7 @@
#include <__assert>
#include <__config>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__utility/exchange.h>
#include <__utility/move.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/exchange.h b/contrib/libs/cxxsupp/libcxx/include/__utility/exchange.h
index 72312c06b5..957e9d0aca 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/exchange.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/exchange.h
@@ -11,7 +11,7 @@
#include <__config>
#include <__type_traits/is_nothrow_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__utility/forward.h>
#include <__utility/move.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/move.h b/contrib/libs/cxxsupp/libcxx/include/__utility/move.h
index 86d7fc8847..626535c8b1 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/move.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/move.h
@@ -12,8 +12,8 @@
#include <__config>
#include <__type_traits/conditional.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/remove_reference.h>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/pair.h b/contrib/libs/cxxsupp/libcxx/include/__utility/pair.h
index 8af23668a8..e05250ba05 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/pair.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/pair.h
@@ -15,12 +15,11 @@
#include <__config>
#include <__fwd/array.h>
#include <__fwd/pair.h>
-#include <__fwd/subrange.h>
#include <__fwd/tuple.h>
-#include <__tuple/pair_like.h>
#include <__tuple/sfinae_helpers.h>
#include <__tuple/tuple_element.h>
#include <__tuple/tuple_indices.h>
+#include <__tuple/tuple_like_no_subrange.h>
#include <__tuple/tuple_size.h>
#include <__type_traits/common_reference.h>
#include <__type_traits/common_type.h>
@@ -30,16 +29,9 @@
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_implicitly_default_constructible.h>
-#include <__type_traits/is_move_assignable.h>
#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_copy_assignable.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_swappable.h>
#include <__type_traits/nat.h>
@@ -67,14 +59,6 @@ struct __non_trivially_copyable_base {
__non_trivially_copyable_base(__non_trivially_copyable_base const&) _NOEXCEPT {}
};
-#if _LIBCPP_STD_VER >= 23
-template <class _Tp>
-struct __is_specialization_of_subrange : false_type {};
-
-template <class _Iter, class _Sent, ranges::subrange_kind _Kind>
-struct __is_specialization_of_subrange<ranges::subrange<_Iter, _Sent, _Kind>> : true_type {};
-#endif
-
template <class _T1, class _T2>
struct _LIBCPP_TEMPLATE_VIS pair
#if defined(_LIBCPP_DEPRECATED_ABI_DISABLE_PAIR_TRIVIAL_COPY_CTOR)
@@ -120,14 +104,13 @@ struct _LIBCPP_TEMPLATE_VIS pair
#else
struct _CheckArgs {
template <int&...>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_explicit_default() {
- return is_default_constructible<_T1>::value && is_default_constructible<_T2>::value &&
- !__enable_implicit_default<>();
+ static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit_default() {
+ return __is_implicitly_default_constructible<_T1>::value && __is_implicitly_default_constructible<_T2>::value;
}
template <int&...>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit_default() {
- return __is_implicitly_default_constructible<_T1>::value && __is_implicitly_default_constructible<_T2>::value;
+ static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_default() {
+ return is_default_constructible<_T1>::value && is_default_constructible<_T2>::value;
}
template <class _U1, class _U2>
@@ -139,41 +122,22 @@ struct _LIBCPP_TEMPLATE_VIS pair
static _LIBCPP_HIDE_FROM_ABI constexpr bool __is_implicit() {
return is_convertible<_U1, first_type>::value && is_convertible<_U2, second_type>::value;
}
-
- template <class _U1, class _U2>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_explicit() {
- return __is_pair_constructible<_U1, _U2>() && !__is_implicit<_U1, _U2>();
- }
-
- template <class _U1, class _U2>
- static _LIBCPP_HIDE_FROM_ABI constexpr bool __enable_implicit() {
- return __is_pair_constructible<_U1, _U2>() && __is_implicit<_U1, _U2>();
- }
};
template <bool _MaybeEnable>
using _CheckArgsDep _LIBCPP_NODEBUG =
typename conditional< _MaybeEnable, _CheckArgs, __check_tuple_constructor_fail>::type;
- template <bool _Dummy = true, __enable_if_t<_CheckArgsDep<_Dummy>::__enable_explicit_default(), int> = 0>
- explicit _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR pair() _NOEXCEPT_(
- is_nothrow_default_constructible<first_type>::value&& is_nothrow_default_constructible<second_type>::value)
+ template <bool _Dummy = true, __enable_if_t<_CheckArgsDep<_Dummy>::__enable_default(), int> = 0>
+ explicit(!_CheckArgsDep<_Dummy>::__enable_implicit_default()) _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR pair()
+ _NOEXCEPT_(
+ is_nothrow_default_constructible<first_type>::value&& is_nothrow_default_constructible<second_type>::value)
: first(), second() {}
- template <bool _Dummy = true, __enable_if_t<_CheckArgsDep<_Dummy>::__enable_implicit_default(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR pair() _NOEXCEPT_(
- is_nothrow_default_constructible<first_type>::value&& is_nothrow_default_constructible<second_type>::value)
- : first(), second() {}
-
- template <bool _Dummy = true,
- __enable_if_t<_CheckArgsDep<_Dummy>::template __enable_explicit<_T1 const&, _T2 const&>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit pair(_T1 const& __t1, _T2 const& __t2)
- _NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value&& is_nothrow_copy_constructible<second_type>::value)
- : first(__t1), second(__t2) {}
-
- template <bool _Dummy = true,
- __enable_if_t<_CheckArgsDep<_Dummy>::template __enable_implicit<_T1 const&, _T2 const&>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair(_T1 const& __t1, _T2 const& __t2)
+ template <bool _Dummy = true,
+ __enable_if_t<_CheckArgsDep<_Dummy>::template __is_pair_constructible<_T1 const&, _T2 const&>(), int> = 0>
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit(
+ !_CheckArgsDep<_Dummy>::template __is_implicit<_T1 const&, _T2 const&>()) pair(_T1 const& __t1, _T2 const& __t2)
_NOEXCEPT_(is_nothrow_copy_constructible<first_type>::value&& is_nothrow_copy_constructible<second_type>::value)
: first(__t1), second(__t2) {}
@@ -185,23 +149,11 @@ struct _LIBCPP_TEMPLATE_VIS pair
class _U1,
class _U2,
# endif
- __enable_if_t<_CheckArgs::template __enable_explicit<_U1, _U2>(), int> = 0 >
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit pair(_U1&& __u1, _U2&& __u2)
- _NOEXCEPT_(is_nothrow_constructible<first_type, _U1>::value&& is_nothrow_constructible<second_type, _U2>::value)
- : first(std::forward<_U1>(__u1)), second(std::forward<_U2>(__u2)) {
- }
-
- template <
-# if _LIBCPP_STD_VER >= 23 // http://wg21.link/P1951
- class _U1 = _T1,
- class _U2 = _T2,
-# else
- class _U1,
- class _U2,
-# endif
- __enable_if_t<_CheckArgs::template __enable_implicit<_U1, _U2>(), int> = 0 >
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair(_U1&& __u1, _U2&& __u2)
- _NOEXCEPT_(is_nothrow_constructible<first_type, _U1>::value&& is_nothrow_constructible<second_type, _U2>::value)
+ __enable_if_t<_CheckArgs::template __is_pair_constructible<_U1, _U2>(), int> = 0 >
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit(!_CheckArgs::template __is_implicit<_U1, _U2>())
+ pair(_U1&& __u1, _U2&& __u2)
+ _NOEXCEPT_((is_nothrow_constructible<first_type, _U1>::value &&
+ is_nothrow_constructible<second_type, _U2>::value))
: first(std::forward<_U1>(__u1)), second(std::forward<_U2>(__u2)) {
}
@@ -215,28 +167,18 @@ struct _LIBCPP_TEMPLATE_VIS pair
template <class _U1,
class _U2,
- __enable_if_t<_CheckArgs::template __enable_explicit<_U1 const&, _U2 const&>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit pair(pair<_U1, _U2> const& __p)
- _NOEXCEPT_(is_nothrow_constructible<first_type, _U1 const&>::value&&
- is_nothrow_constructible<second_type, _U2 const&>::value)
+ __enable_if_t<_CheckArgs::template __is_pair_constructible<_U1 const&, _U2 const&>(), int> = 0>
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit(
+ !_CheckArgs::template __is_implicit<_U1 const&, _U2 const&>()) pair(pair<_U1, _U2> const& __p)
+ _NOEXCEPT_((is_nothrow_constructible<first_type, _U1 const&>::value &&
+ is_nothrow_constructible<second_type, _U2 const&>::value))
: first(__p.first), second(__p.second) {}
- template <class _U1,
- class _U2,
- __enable_if_t<_CheckArgs::template __enable_implicit<_U1 const&, _U2 const&>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair(pair<_U1, _U2> const& __p)
- _NOEXCEPT_(is_nothrow_constructible<first_type, _U1 const&>::value&&
- is_nothrow_constructible<second_type, _U2 const&>::value)
- : first(__p.first), second(__p.second) {}
-
- template <class _U1, class _U2, __enable_if_t<_CheckArgs::template __enable_explicit<_U1, _U2>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit pair(pair<_U1, _U2>&& __p) _NOEXCEPT_(
- is_nothrow_constructible<first_type, _U1&&>::value&& is_nothrow_constructible<second_type, _U2&&>::value)
- : first(std::forward<_U1>(__p.first)), second(std::forward<_U2>(__p.second)) {}
-
- template <class _U1, class _U2, __enable_if_t<_CheckArgs::template __enable_implicit<_U1, _U2>(), int> = 0>
- _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 pair(pair<_U1, _U2>&& __p) _NOEXCEPT_(
- is_nothrow_constructible<first_type, _U1&&>::value&& is_nothrow_constructible<second_type, _U2&&>::value)
+ template <class _U1, class _U2, __enable_if_t<_CheckArgs::template __is_pair_constructible<_U1, _U2>(), int> = 0>
+ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 explicit(!_CheckArgs::template __is_implicit<_U1, _U2>())
+ pair(pair<_U1, _U2>&& __p)
+ _NOEXCEPT_((is_nothrow_constructible<first_type, _U1&&>::value &&
+ is_nothrow_constructible<second_type, _U2&&>::value))
: first(std::forward<_U1>(__p.first)), second(std::forward<_U2>(__p.second)) {}
# if _LIBCPP_STD_VER >= 23
@@ -250,19 +192,19 @@ struct _LIBCPP_TEMPLATE_VIS pair
# endif
# if _LIBCPP_STD_VER >= 23
+ // TODO: Remove this workaround in LLVM 20. The bug got fixed in Clang 18.
// This is a workaround for http://llvm.org/PR60710. We should be able to remove it once Clang is fixed.
template <class _PairLike>
_LIBCPP_HIDE_FROM_ABI static constexpr bool __pair_like_explicit_wknd() {
- if constexpr (__pair_like<_PairLike>) {
+ if constexpr (__pair_like_no_subrange<_PairLike>) {
return !is_convertible_v<decltype(std::get<0>(std::declval<_PairLike&&>())), first_type> ||
!is_convertible_v<decltype(std::get<1>(std::declval<_PairLike&&>())), second_type>;
}
return false;
}
- template <__pair_like _PairLike>
- requires(!__is_specialization_of_subrange<remove_cvref_t<_PairLike>>::value &&
- is_constructible_v<first_type, decltype(std::get<0>(std::declval<_PairLike &&>()))> &&
+ template <__pair_like_no_subrange _PairLike>
+ requires(is_constructible_v<first_type, decltype(std::get<0>(std::declval<_PairLike &&>()))> &&
is_constructible_v<second_type, decltype(std::get<1>(std::declval<_PairLike &&>()))>)
_LIBCPP_HIDE_FROM_ABI constexpr explicit(__pair_like_explicit_wknd<_PairLike>()) pair(_PairLike&& __p)
: first(std::get<0>(std::forward<_PairLike>(__p))), second(std::get<1>(std::forward<_PairLike>(__p))) {}
@@ -355,8 +297,8 @@ struct _LIBCPP_TEMPLATE_VIS pair
return *this;
}
- template <__pair_like _PairLike>
- requires(__different_from<_PairLike, pair> && !__is_specialization_of_subrange<remove_cvref_t<_PairLike>>::value &&
+ template <__pair_like_no_subrange _PairLike>
+ requires(__different_from<_PairLike, pair> &&
is_assignable_v<first_type&, decltype(std::get<0>(std::declval<_PairLike>()))> &&
is_assignable_v<second_type&, decltype(std::get<1>(std::declval<_PairLike>()))>)
_LIBCPP_HIDE_FROM_ABI constexpr pair& operator=(_PairLike&& __p) {
@@ -365,8 +307,8 @@ struct _LIBCPP_TEMPLATE_VIS pair
return *this;
}
- template <__pair_like _PairLike>
- requires(__different_from<_PairLike, pair> && !__is_specialization_of_subrange<remove_cvref_t<_PairLike>>::value &&
+ template <__pair_like_no_subrange _PairLike>
+ requires(__different_from<_PairLike, pair> &&
is_assignable_v<first_type const&, decltype(std::get<0>(std::declval<_PairLike>()))> &&
is_assignable_v<second_type const&, decltype(std::get<1>(std::declval<_PairLike>()))>)
_LIBCPP_HIDE_FROM_ABI constexpr pair const& operator=(_PairLike&& __p) const {
@@ -489,7 +431,9 @@ private:
tuple<_Args1...>& __first_args,
tuple<_Args2...>& __second_args,
__tuple_indices<_I1...>,
- __tuple_indices<_I2...>);
+ __tuple_indices<_I2...>)
+ : first(std::forward<_Args1>(std::get<_I1>(__first_args))...),
+ second(std::forward<_Args2>(std::get<_I2>(__second_args))...) {}
#endif
};
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/small_buffer.h b/contrib/libs/cxxsupp/libcxx/include/__utility/small_buffer.h
index f3415a5e50..9e13797573 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/small_buffer.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/small_buffer.h
@@ -12,8 +12,8 @@
#include <__config>
#include <__memory/construct_at.h>
#include <__type_traits/decay.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
-#include <__type_traits/is_trivially_move_constructible.h>
#include <__utility/exception_guard.h>
#include <__utility/forward.h>
#include <cstddef>
diff --git a/contrib/libs/cxxsupp/libcxx/include/__utility/swap.h b/contrib/libs/cxxsupp/libcxx/include/__utility/swap.h
index ca8280c729..d678d2cba7 100644
--- a/contrib/libs/cxxsupp/libcxx/include/__utility/swap.h
+++ b/contrib/libs/cxxsupp/libcxx/include/__utility/swap.h
@@ -10,10 +10,10 @@
#define _LIBCPP___UTILITY_SWAP_H
#include <__config>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_assignable.h>
+#include <__type_traits/is_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_swappable.h>
#include <__utility/declval.h>
#include <__utility/move.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/any b/contrib/libs/cxxsupp/libcxx/include/any
index ce54803cd9..0e66890593 100644
--- a/contrib/libs/cxxsupp/libcxx/include/any
+++ b/contrib/libs/cxxsupp/libcxx/include/any
@@ -80,7 +80,6 @@ namespace std {
*/
-#include <__availability>
#include <__config>
#include <__memory/allocator.h>
#include <__memory/allocator_destructor.h>
@@ -92,9 +91,8 @@ namespace std {
#include <__type_traits/conditional.h>
#include <__type_traits/decay.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_copy_constructible.h>
#include <__type_traits/is_function.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_void.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/array b/contrib/libs/cxxsupp/libcxx/include/array
index 7fa5dc1479..977f913c3e 100644
--- a/contrib/libs/cxxsupp/libcxx/include/array
+++ b/contrib/libs/cxxsupp/libcxx/include/array
@@ -123,12 +123,11 @@ template <size_t I, class T, size_t N> const T&& get(const array<T, N>&&) noexce
#include <__iterator/wrap_iter.h>
#include <__tuple/sfinae_helpers.h>
#include <__type_traits/conditional.h>
+#include <__type_traits/conjunction.h>
#include <__type_traits/is_array.h>
#include <__type_traits/is_const.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_swappable.h>
#include <__type_traits/remove_cv.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/cerrno b/contrib/libs/cxxsupp/libcxx/include/cerrno
index d488fa72a5..f1295680fe 100644
--- a/contrib/libs/cxxsupp/libcxx/include/cerrno
+++ b/contrib/libs/cxxsupp/libcxx/include/cerrno
@@ -38,4 +38,11 @@ Macros:
# pragma GCC system_header
#endif
+// LWG3869 Deprecate std::errc constants related to UNIX STREAMS
+//
+// This LWG issue deprecates the POSIX macros ENODATA, ENOSR, ENOSTR, and ETIME. These were
+// deprecated in libc++ in https://github.com/llvm/llvm-project/pull/80542.
+// Based on the post commit feedback the macro are no longer deprecated.
+// Instead libc++ leaves the deprecation to the provider of errno.h.
+
#endif // _LIBCPP_CERRNO
diff --git a/contrib/libs/cxxsupp/libcxx/include/chrono b/contrib/libs/cxxsupp/libcxx/include/chrono
index e158436dcb..956badd368 100644
--- a/contrib/libs/cxxsupp/libcxx/include/chrono
+++ b/contrib/libs/cxxsupp/libcxx/include/chrono
@@ -878,10 +878,12 @@ constexpr chrono::year operator ""y(unsigned lo
# include <cstring>
# include <forward_list>
# include <string>
+# include <tuple>
#endif
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER == 20
# include <charconv>
+# include <locale>
#endif
#endif // _LIBCPP_CHRONO
diff --git a/contrib/libs/cxxsupp/libcxx/include/complex b/contrib/libs/cxxsupp/libcxx/include/complex
index 95be60c404..5f09e3e51e 100644
--- a/contrib/libs/cxxsupp/libcxx/include/complex
+++ b/contrib/libs/cxxsupp/libcxx/include/complex
@@ -258,6 +258,7 @@ template<class T> complex<T> tanh (const complex<T>&);
#include <__config>
#include <__fwd/complex.h>
+#include <__fwd/tuple.h>
#include <__tuple/tuple_element.h>
#include <__tuple/tuple_size.h>
#include <__utility/move.h>
@@ -1445,15 +1446,9 @@ operator<<(basic_ostream<_CharT, _Traits>& __os, const complex<_Tp>& __x) {
// [complex.tuple], tuple interface
template <class _Tp>
-struct tuple_size;
-
-template <class _Tp>
struct tuple_size<complex<_Tp>> : integral_constant<size_t, 2> {};
template <size_t _Ip, class _Tp>
-struct tuple_element;
-
-template <size_t _Ip, class _Tp>
struct tuple_element<_Ip, complex<_Tp>> {
static_assert(_Ip < 2, "Index value is out of range.");
using type = _Tp;
diff --git a/contrib/libs/cxxsupp/libcxx/include/coroutine b/contrib/libs/cxxsupp/libcxx/include/coroutine
index 4bd1d4e9c3..b1ba83b541 100644
--- a/contrib/libs/cxxsupp/libcxx/include/coroutine
+++ b/contrib/libs/cxxsupp/libcxx/include/coroutine
@@ -56,6 +56,7 @@ struct suspend_always;
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <iosfwd>
+# include <limits>
# include <type_traits>
#endif
diff --git a/contrib/libs/cxxsupp/libcxx/include/cwchar b/contrib/libs/cxxsupp/libcxx/include/cwchar
index 7442438d8f..4cc6f56c38 100644
--- a/contrib/libs/cxxsupp/libcxx/include/cwchar
+++ b/contrib/libs/cxxsupp/libcxx/include/cwchar
@@ -254,4 +254,8 @@ _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX14 _Tp* __constexpr_wmemchr(_Tp
_LIBCPP_END_NAMESPACE_STD
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <cstddef>
+#endif
+
#endif // _LIBCPP_CWCHAR
diff --git a/contrib/libs/cxxsupp/libcxx/include/deque b/contrib/libs/cxxsupp/libcxx/include/deque
index d4238a495b..c830b6d5f7 100644
--- a/contrib/libs/cxxsupp/libcxx/include/deque
+++ b/contrib/libs/cxxsupp/libcxx/include/deque
@@ -192,6 +192,7 @@ template <class T, class Allocator, class Predicate>
#include <__availability>
#include <__config>
#include <__format/enable_insertable.h>
+#include <__fwd/deque.h>
#include <__iterator/distance.h>
#include <__iterator/iterator_traits.h>
#include <__iterator/next.h>
@@ -244,9 +245,6 @@ _LIBCPP_PUSH_MACROS
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Tp, class _Allocator = allocator<_Tp> >
-class _LIBCPP_TEMPLATE_VIS deque;
-
template <class _ValueType, class _DiffType>
struct __deque_block_size {
static const _DiffType __buf_size = 64 * sizeof(void*);
diff --git a/contrib/libs/cxxsupp/libcxx/include/execution b/contrib/libs/cxxsupp/libcxx/include/execution
index 822ffa1fd3..94d434b2e4 100644
--- a/contrib/libs/cxxsupp/libcxx/include/execution
+++ b/contrib/libs/cxxsupp/libcxx/include/execution
@@ -142,4 +142,8 @@ _LIBCPP_END_NAMESPACE_STD
#endif // !defined(_LIBCPP_HAS_NO_INCOMPLETE_PSTL) && _LIBCPP_STD_VER >= 17
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <cstddef>
+#endif
+
#endif // _LIBCPP_EXECUTION
diff --git a/contrib/libs/cxxsupp/libcxx/include/experimental/memory b/contrib/libs/cxxsupp/libcxx/include/experimental/memory
index 7e698fe9de..e9663d43a8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/experimental/memory
+++ b/contrib/libs/cxxsupp/libcxx/include/experimental/memory
@@ -191,4 +191,8 @@ _LIBCPP_END_NAMESPACE_STD
#endif // _LIBCPP_ENABLE_EXPERIMENTAL
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <limits>
+#endif
+
#endif /* _LIBCPP_EXPERIMENTAL_MEMORY */
diff --git a/contrib/libs/cxxsupp/libcxx/include/format b/contrib/libs/cxxsupp/libcxx/include/format
index b2fe0053b9..f1e87de0f8 100644
--- a/contrib/libs/cxxsupp/libcxx/include/format
+++ b/contrib/libs/cxxsupp/libcxx/include/format
@@ -199,7 +199,6 @@ namespace std {
#include <__format/format_context.h>
#include <__format/format_error.h>
#include <__format/format_functions.h>
-#include <__format/format_fwd.h>
#include <__format/format_parse_context.h>
#include <__format/format_string.h>
#include <__format/format_to_n_result.h>
@@ -215,10 +214,17 @@ namespace std {
#include <__format/range_default_formatter.h>
#include <__format/range_formatter.h>
#include <__format/unicode.h>
+#include <__fwd/format.h>
#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
+#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <locale>
+# include <queue>
+# include <stack>
+#endif
+
#endif // _LIBCPP_FORMAT
diff --git a/contrib/libs/cxxsupp/libcxx/include/forward_list b/contrib/libs/cxxsupp/libcxx/include/forward_list
index a62b171a46..1dcbe8f88b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/forward_list
+++ b/contrib/libs/cxxsupp/libcxx/include/forward_list
@@ -221,9 +221,8 @@ template <class T, class Allocator, class Predicate>
#include <__type_traits/conditional.h>
#include <__type_traits/is_allocator.h>
#include <__type_traits/is_const.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_same.h>
#include <__type_traits/type_identity.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/fstream b/contrib/libs/cxxsupp/libcxx/include/fstream
index 776641b347..7a084d114b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/fstream
+++ b/contrib/libs/cxxsupp/libcxx/include/fstream
@@ -308,6 +308,43 @@ private:
state_type __st_;
state_type __st_last_;
ios_base::openmode __om_;
+ // There have been no file operations yet, which allows setting unbuffered
+ // I/O mode.
+ static const ios_base::openmode __no_io_operations = ios_base::trunc;
+ // Unbuffered I/O mode has been requested.
+ static const ios_base::openmode __use_unbuffered_io = ios_base::ate;
+ // Used to track the currently used mode and track whether the output should
+ // be unbuffered.
+ // [filebuf.virtuals]/12
+ // If setbuf(0, 0) is called on a stream before any I/O has occurred on
+ // that stream, the stream becomes unbuffered. Otherwise the results are
+ // implementation-defined.
+ // This allows calling setbuf(0, 0)
+ // - before opening a file,
+ // - after opening a file, before
+ // - a read
+ // - a write
+ // - a seek.
+ // Note that opening a file with ios_base::ate does a seek operation.
+ // Normally underflow, overflow, and sync change this flag to ios_base::in,
+ // ios_base_out, or 0.
+ //
+ // The ios_base::trunc and ios_base::ate flags are not used in __cm_. They
+ // are used to track the state of the unbuffered request. For readability
+ // they have the aliases __no_io_operations and __use_unbuffered_io
+ // respectively.
+ //
+ // The __no_io_operations and __use_unbuffered_io flags are used in the
+ // following way:
+ // - __no_io_operations is set upon construction to indicate the unbuffered
+ // state can be set.
+ // - When requesting unbuffered output:
+ // - If the file is open it sets the mode.
+ // - Else places a request by adding the __use_unbuffered_io flag.
+ // - When a file is opened it checks whether both __no_io_operations and
+ // __use_unbuffered_io are set. If so switches to unbuffered mode.
+ // - All file I/O operations change the mode effectively clearing the
+ // __no_io_operations and __use_unbuffered_io flags.
ios_base::openmode __cm_;
bool __owns_eb_;
bool __owns_ib_;
@@ -327,7 +364,13 @@ private:
return nullptr;
__om_ = __mode;
+ if (__cm_ == (__no_io_operations | __use_unbuffered_io)) {
+ std::setbuf(__file_, nullptr);
+ __cm_ = 0;
+ }
+
if (__mode & ios_base::ate) {
+ __cm_ = 0;
if (fseek(__file_, 0, SEEK_END)) {
fclose(__file_);
__file_ = nullptr;
@@ -337,6 +380,20 @@ private:
return this;
}
+
+ // If the file is already open, switch to unbuffered mode. Otherwise, record
+ // the request to use unbuffered mode so that we use that mode when we
+ // eventually open the file.
+ _LIBCPP_HIDE_FROM_ABI void __request_unbuffered_mode(char_type* __s, streamsize __n) {
+ if (__cm_ == __no_io_operations && __s == nullptr && __n == 0) {
+ if (__file_) {
+ std::setbuf(__file_, nullptr);
+ __cm_ = 0;
+ } else {
+ __cm_ = __no_io_operations | __use_unbuffered_io;
+ }
+ }
+ }
};
template <class _CharT, class _Traits>
@@ -352,7 +409,7 @@ basic_filebuf<_CharT, _Traits>::basic_filebuf()
__st_(),
__st_last_(),
__om_(0),
- __cm_(0),
+ __cm_(__no_io_operations),
__owns_eb_(false),
__owns_ib_(false),
__always_noconv_(false) {
@@ -810,6 +867,7 @@ template <class _CharT, class _Traits>
basic_streambuf<_CharT, _Traits>* basic_filebuf<_CharT, _Traits>::setbuf(char_type* __s, streamsize __n) {
this->setg(nullptr, nullptr, nullptr);
this->setp(nullptr, nullptr);
+ __request_unbuffered_mode(__s, __n);
if (__owns_eb_)
delete[] __extbuf_;
if (__owns_ib_)
diff --git a/contrib/libs/cxxsupp/libcxx/include/future b/contrib/libs/cxxsupp/libcxx/include/future
index fda1591818..3c22868606 100644
--- a/contrib/libs/cxxsupp/libcxx/include/future
+++ b/contrib/libs/cxxsupp/libcxx/include/future
@@ -369,7 +369,6 @@ template <class R, class Alloc> struct uses_allocator<packaged_task<R>, Alloc>;
#endif
#include <__assert>
-#include <__availability>
#include <__chrono/duration.h>
#include <__chrono/time_point.h>
#include <__exception/exception_ptr.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/ios b/contrib/libs/cxxsupp/libcxx/include/ios
index 4b1306fc2a..00c1d5c2d4 100644
--- a/contrib/libs/cxxsupp/libcxx/include/ios
+++ b/contrib/libs/cxxsupp/libcxx/include/ios
@@ -359,7 +359,13 @@ public:
}
protected:
- _LIBCPP_HIDE_FROM_ABI ios_base() { // purposefully does no initialization
+ _LIBCPP_HIDE_FROM_ABI ios_base() : __loc_(nullptr) {
+ // Purposefully does no initialization
+ //
+ // Except for the locale, this is a sentinel to avoid destroying
+ // an uninitialized object. See
+ // test/libcxx/input.output/iostreams.base/ios.base/ios.base.cons/dtor.uninitialized.pass.cpp
+ // for the details.
}
void init(void* __sb);
@@ -571,7 +577,9 @@ public:
_LIBCPP_HIDE_FROM_ABI char_type widen(char __c) const;
protected:
- _LIBCPP_HIDE_FROM_ABI basic_ios() { // purposefully does no initialization
+ _LIBCPP_HIDE_FROM_ABI basic_ios() {
+ // purposefully does no initialization
+ // since the destructor does nothing this does not have ios_base issues.
}
_LIBCPP_HIDE_FROM_ABI void init(basic_streambuf<char_type, traits_type>* __sb);
diff --git a/contrib/libs/cxxsupp/libcxx/include/iosfwd b/contrib/libs/cxxsupp/libcxx/include/iosfwd
index f1c2cbd966..9af5e05031 100644
--- a/contrib/libs/cxxsupp/libcxx/include/iosfwd
+++ b/contrib/libs/cxxsupp/libcxx/include/iosfwd
@@ -110,6 +110,7 @@ using wosyncstream = basic_osyncstream<wchar_t>; // C++20
#include <__fwd/fstream.h>
#include <__fwd/ios.h>
#include <__fwd/istream.h>
+#include <__fwd/memory.h>
#include <__fwd/ostream.h>
#include <__fwd/sstream.h>
#include <__fwd/streambuf.h>
@@ -162,10 +163,6 @@ using wosyncstream = basic_osyncstream<wchar_t>;
#endif // _LIBCPP_STD_VER >= 20 && !defined(_LIBCPP_HAS_NO_EXPERIMENTAL_SYNCSTREAM)
-// Include other forward declarations here
-template <class _Tp, class _Alloc = allocator<_Tp> >
-class _LIBCPP_TEMPLATE_VIS vector;
-
template <class _CharT, class _Traits>
class __save_flags {
typedef basic_ios<_CharT, _Traits> __stream_type;
diff --git a/contrib/libs/cxxsupp/libcxx/include/libcxx.imp b/contrib/libs/cxxsupp/libcxx/include/libcxx.imp
index cdbb0a63fc..ea0ba8c547 100644
--- a/contrib/libs/cxxsupp/libcxx/include/libcxx.imp
+++ b/contrib/libs/cxxsupp/libcxx/include/libcxx.imp
@@ -217,6 +217,7 @@
{ include: [ "<__algorithm/shift_right.h>", "private", "<algorithm>", "public" ] },
{ include: [ "<__algorithm/shuffle.h>", "private", "<algorithm>", "public" ] },
{ include: [ "<__algorithm/sift_down.h>", "private", "<algorithm>", "public" ] },
+ { include: [ "<__algorithm/simd_utils.h>", "private", "<algorithm>", "public" ] },
{ include: [ "<__algorithm/sort.h>", "private", "<algorithm>", "public" ] },
{ include: [ "<__algorithm/sort_heap.h>", "private", "<algorithm>", "public" ] },
{ include: [ "<__algorithm/stable_partition.h>", "private", "<algorithm>", "public" ] },
@@ -374,7 +375,6 @@
{ include: [ "<__format/format_context.h>", "private", "<format>", "public" ] },
{ include: [ "<__format/format_error.h>", "private", "<format>", "public" ] },
{ include: [ "<__format/format_functions.h>", "private", "<format>", "public" ] },
- { include: [ "<__format/format_fwd.h>", "private", "<format>", "public" ] },
{ include: [ "<__format/format_parse_context.h>", "private", "<format>", "public" ] },
{ include: [ "<__format/format_string.h>", "private", "<format>", "public" ] },
{ include: [ "<__format/format_to_n_result.h>", "private", "<format>", "public" ] },
@@ -425,21 +425,27 @@
{ include: [ "<__fwd/bit_reference.h>", "private", "<bitset>", "public" ] },
{ include: [ "<__fwd/bit_reference.h>", "private", "<vector>", "public" ] },
{ include: [ "<__fwd/complex.h>", "private", "<complex>", "public" ] },
+ { include: [ "<__fwd/deque.h>", "private", "<deque>", "public" ] },
+ { include: [ "<__fwd/format.h>", "private", "<format>", "public" ] },
{ include: [ "<__fwd/fstream.h>", "private", "<iosfwd>", "public" ] },
{ include: [ "<__fwd/functional.h>", "private", "<functional>", "public" ] },
{ include: [ "<__fwd/ios.h>", "private", "<iosfwd>", "public" ] },
{ include: [ "<__fwd/istream.h>", "private", "<iosfwd>", "public" ] },
{ include: [ "<__fwd/mdspan.h>", "private", "<mdspan>", "public" ] },
+ { include: [ "<__fwd/memory.h>", "private", "<memory>", "public" ] },
{ include: [ "<__fwd/memory_resource.h>", "private", "<memory_resource>", "public" ] },
{ include: [ "<__fwd/ostream.h>", "private", "<iosfwd>", "public" ] },
{ include: [ "<__fwd/pair.h>", "private", "<utility>", "public" ] },
+ { include: [ "<__fwd/queue.h>", "private", "<queue>", "public" ] },
{ include: [ "<__fwd/span.h>", "private", "<span>", "public" ] },
{ include: [ "<__fwd/sstream.h>", "private", "<iosfwd>", "public" ] },
+ { include: [ "<__fwd/stack.h>", "private", "<stack>", "public" ] },
{ include: [ "<__fwd/streambuf.h>", "private", "<iosfwd>", "public" ] },
{ include: [ "<__fwd/string.h>", "private", "<string>", "public" ] },
{ include: [ "<__fwd/string_view.h>", "private", "<string_view>", "public" ] },
{ include: [ "<__fwd/subrange.h>", "private", "<ranges>", "public" ] },
{ include: [ "<__fwd/tuple.h>", "private", "<tuple>", "public" ] },
+ { include: [ "<__fwd/vector.h>", "private", "<vector>", "public" ] },
{ include: [ "<__ios/fpos.h>", "private", "<ios>", "public" ] },
{ include: [ "<__iterator/access.h>", "private", "<iterator>", "public" ] },
{ include: [ "<__iterator/advance.h>", "private", "<iterator>", "public" ] },
@@ -697,13 +703,14 @@
{ include: [ "<__thread/this_thread.h>", "private", "<thread>", "public" ] },
{ include: [ "<__thread/thread.h>", "private", "<thread>", "public" ] },
{ include: [ "<__thread/timed_backoff_policy.h>", "private", "<thread>", "public" ] },
+ { include: [ "<__tuple/find_index.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/make_tuple_types.h>", "private", "<tuple>", "public" ] },
- { include: [ "<__tuple/pair_like.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/sfinae_helpers.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_element.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_indices.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_like.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_like_ext.h>", "private", "<tuple>", "public" ] },
+ { include: [ "<__tuple/tuple_like_no_subrange.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_size.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__tuple/tuple_types.h>", "private", "<tuple>", "public" ] },
{ include: [ "<__type_traits/add_const.h>", "private", "<type_traits>", "public" ] },
@@ -750,10 +757,7 @@
{ include: [ "<__type_traits/is_constant_evaluated.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_convertible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_copy_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_copy_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_core_convertible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_default_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_destructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_empty.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_enum.h>", "private", "<type_traits>", "public" ] },
@@ -769,17 +773,10 @@
{ include: [ "<__type_traits/is_member_function_pointer.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_member_object_pointer.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_member_pointer.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_move_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_move_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_nothrow_assignable.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_nothrow_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_nothrow_convertible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_nothrow_copy_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_nothrow_copy_constructible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_nothrow_default_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_nothrow_destructible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_nothrow_move_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_nothrow_move_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_null_pointer.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_object.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_pod.h>", "private", "<type_traits>", "public" ] },
@@ -800,14 +797,9 @@
{ include: [ "<__type_traits/is_trivial.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_assignable.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_constructible.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_trivially_copy_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_trivially_copy_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_copyable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_trivially_default_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_destructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_lexicographically_comparable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_trivially_move_assignable.h>", "private", "<type_traits>", "public" ] },
- { include: [ "<__type_traits/is_trivially_move_constructible.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_trivially_relocatable.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_unbounded_array.h>", "private", "<type_traits>", "public" ] },
{ include: [ "<__type_traits/is_union.h>", "private", "<type_traits>", "public" ] },
diff --git a/contrib/libs/cxxsupp/libcxx/include/limits b/contrib/libs/cxxsupp/libcxx/include/limits
index f15b5b1ab1..f022048cc2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/limits
+++ b/contrib/libs/cxxsupp/libcxx/include/limits
@@ -137,9 +137,9 @@ protected:
typedef _Tp type;
static _LIBCPP_CONSTEXPR const bool is_specialized = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return type(); }
static _LIBCPP_CONSTEXPR const int digits = 0;
static _LIBCPP_CONSTEXPR const int digits10 = 0;
@@ -148,8 +148,8 @@ protected:
static _LIBCPP_CONSTEXPR const bool is_integer = false;
static _LIBCPP_CONSTEXPR const bool is_exact = false;
static _LIBCPP_CONSTEXPR const int radix = 0;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(); }
static _LIBCPP_CONSTEXPR const int min_exponent = 0;
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0;
@@ -161,10 +161,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(); }
static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
static _LIBCPP_CONSTEXPR const bool is_bounded = false;
@@ -198,15 +198,15 @@ protected:
static _LIBCPP_CONSTEXPR const int max_digits10 = 0;
static _LIBCPP_CONSTEXPR const type __min = __libcpp_compute_min<type, digits, is_signed>::value;
static _LIBCPP_CONSTEXPR const type __max = is_signed ? type(type(~0) ^ __min) : type(~0);
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return min(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return min(); }
static _LIBCPP_CONSTEXPR const bool is_integer = true;
static _LIBCPP_CONSTEXPR const bool is_exact = true;
static _LIBCPP_CONSTEXPR const int radix = 2;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(0); }
static _LIBCPP_CONSTEXPR const int min_exponent = 0;
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0;
@@ -218,10 +218,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(0); }
static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
static _LIBCPP_CONSTEXPR const bool is_bounded = true;
@@ -249,15 +249,15 @@ protected:
static _LIBCPP_CONSTEXPR const int max_digits10 = 0;
static _LIBCPP_CONSTEXPR const type __min = false;
static _LIBCPP_CONSTEXPR const type __max = true;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return min(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __min; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __max; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return min(); }
static _LIBCPP_CONSTEXPR const bool is_integer = true;
static _LIBCPP_CONSTEXPR const bool is_exact = true;
static _LIBCPP_CONSTEXPR const int radix = 2;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return type(0); }
static _LIBCPP_CONSTEXPR const int min_exponent = 0;
static _LIBCPP_CONSTEXPR const int min_exponent10 = 0;
@@ -269,10 +269,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = false;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_absent;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(0); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return type(0); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return type(0); }
static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
static _LIBCPP_CONSTEXPR const bool is_bounded = true;
@@ -294,15 +294,15 @@ protected:
static _LIBCPP_CONSTEXPR const int digits = __FLT_MANT_DIG__;
static _LIBCPP_CONSTEXPR const int digits10 = __FLT_DIG__;
static _LIBCPP_CONSTEXPR const int max_digits10 = 2 + (digits * 30103l) / 100000l;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __FLT_MIN__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __FLT_MAX__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __FLT_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __FLT_MAX__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
static _LIBCPP_CONSTEXPR const bool is_integer = false;
static _LIBCPP_CONSTEXPR const bool is_exact = false;
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __FLT_EPSILON__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5F; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __FLT_EPSILON__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5F; }
static _LIBCPP_CONSTEXPR const int min_exponent = __FLT_MIN_EXP__;
static _LIBCPP_CONSTEXPR const int min_exponent10 = __FLT_MIN_10_EXP__;
@@ -314,10 +314,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_valf(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nanf(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nansf(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __FLT_DENORM_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_valf(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nanf(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nansf(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __FLT_DENORM_MIN__; }
static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
static _LIBCPP_CONSTEXPR const bool is_bounded = true;
@@ -343,15 +343,15 @@ protected:
static _LIBCPP_CONSTEXPR const int digits = __DBL_MANT_DIG__;
static _LIBCPP_CONSTEXPR const int digits10 = __DBL_DIG__;
static _LIBCPP_CONSTEXPR const int max_digits10 = 2 + (digits * 30103l) / 100000l;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __DBL_MIN__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __DBL_MAX__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __DBL_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __DBL_MAX__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
static _LIBCPP_CONSTEXPR const bool is_integer = false;
static _LIBCPP_CONSTEXPR const bool is_exact = false;
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __DBL_EPSILON__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __DBL_EPSILON__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5; }
static _LIBCPP_CONSTEXPR const int min_exponent = __DBL_MIN_EXP__;
static _LIBCPP_CONSTEXPR const int min_exponent10 = __DBL_MIN_10_EXP__;
@@ -363,10 +363,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_val(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nan(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nans(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __DBL_DENORM_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_val(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nan(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nans(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __DBL_DENORM_MIN__; }
static _LIBCPP_CONSTEXPR const bool is_iec559 = true;
static _LIBCPP_CONSTEXPR const bool is_bounded = true;
@@ -392,15 +392,15 @@ protected:
static _LIBCPP_CONSTEXPR const int digits = __LDBL_MANT_DIG__;
static _LIBCPP_CONSTEXPR const int digits10 = __LDBL_DIG__;
static _LIBCPP_CONSTEXPR const int max_digits10 = 2 + (digits * 30103l) / 100000l;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __LDBL_MIN__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __LDBL_MAX__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __LDBL_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __LDBL_MAX__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return -max(); }
static _LIBCPP_CONSTEXPR const bool is_integer = false;
static _LIBCPP_CONSTEXPR const bool is_exact = false;
static _LIBCPP_CONSTEXPR const int radix = __FLT_RADIX__;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __LDBL_EPSILON__; }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5L; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __LDBL_EPSILON__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return 0.5L; }
static _LIBCPP_CONSTEXPR const int min_exponent = __LDBL_MIN_EXP__;
static _LIBCPP_CONSTEXPR const int min_exponent10 = __LDBL_MIN_10_EXP__;
@@ -412,10 +412,10 @@ protected:
static _LIBCPP_CONSTEXPR const bool has_signaling_NaN = true;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = denorm_present;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = false;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_vall(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nanl(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nansl(""); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __LDBL_DENORM_MIN__; }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __builtin_huge_vall(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __builtin_nanl(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __builtin_nansl(""); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __LDBL_DENORM_MIN__; }
#if defined(__powerpc__) && defined(__LONG_DOUBLE_IBM128__)
static _LIBCPP_CONSTEXPR const bool is_iec559 = false;
@@ -441,9 +441,9 @@ class _LIBCPP_TEMPLATE_VIS numeric_limits : private __libcpp_numeric_limits<_Tp>
public:
static _LIBCPP_CONSTEXPR const bool is_specialized = __base::is_specialized;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __base::min(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __base::max(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return __base::lowest(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type min() _NOEXCEPT { return __base::min(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type max() _NOEXCEPT { return __base::max(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type lowest() _NOEXCEPT { return __base::lowest(); }
static _LIBCPP_CONSTEXPR const int digits = __base::digits;
static _LIBCPP_CONSTEXPR const int digits10 = __base::digits10;
@@ -452,8 +452,8 @@ public:
static _LIBCPP_CONSTEXPR const bool is_integer = __base::is_integer;
static _LIBCPP_CONSTEXPR const bool is_exact = __base::is_exact;
static _LIBCPP_CONSTEXPR const int radix = __base::radix;
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __base::epsilon(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return __base::round_error(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type epsilon() _NOEXCEPT { return __base::epsilon(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type round_error() _NOEXCEPT { return __base::round_error(); }
static _LIBCPP_CONSTEXPR const int min_exponent = __base::min_exponent;
static _LIBCPP_CONSTEXPR const int min_exponent10 = __base::min_exponent10;
@@ -467,10 +467,10 @@ public:
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const float_denorm_style has_denorm = __base::has_denorm;
static _LIBCPP_DEPRECATED_IN_CXX23 _LIBCPP_CONSTEXPR const bool has_denorm_loss = __base::has_denorm_loss;
_LIBCPP_SUPPRESS_DEPRECATED_POP
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __base::infinity(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __base::quiet_NaN(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __base::signaling_NaN(); }
- _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __base::denorm_min(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type infinity() _NOEXCEPT { return __base::infinity(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type quiet_NaN() _NOEXCEPT { return __base::quiet_NaN(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type signaling_NaN() _NOEXCEPT { return __base::signaling_NaN(); }
+ _LIBCPP_NODISCARD_EXT _LIBCPP_HIDE_FROM_ABI static _LIBCPP_CONSTEXPR type denorm_min() _NOEXCEPT { return __base::denorm_min(); }
static _LIBCPP_CONSTEXPR const bool is_iec559 = __base::is_iec559;
static _LIBCPP_CONSTEXPR const bool is_bounded = __base::is_bounded;
diff --git a/contrib/libs/cxxsupp/libcxx/include/list b/contrib/libs/cxxsupp/libcxx/include/list
index 8f0689268e..9de3d1f60a 100644
--- a/contrib/libs/cxxsupp/libcxx/include/list
+++ b/contrib/libs/cxxsupp/libcxx/include/list
@@ -227,9 +227,8 @@ template <class T, class Allocator, class Predicate>
#include <__ranges/from_range.h>
#include <__type_traits/conditional.h>
#include <__type_traits/is_allocator.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_pointer.h>
#include <__type_traits/is_same.h>
#include <__type_traits/type_identity.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/module.modulemap b/contrib/libs/cxxsupp/libcxx/include/module.modulemap
index b247f97c18..22c380327f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/module.modulemap
+++ b/contrib/libs/cxxsupp/libcxx/include/module.modulemap
@@ -697,7 +697,10 @@ module std_private_algorithm_minmax [system
export *
}
module std_private_algorithm_minmax_element [system] { header "__algorithm/minmax_element.h" }
-module std_private_algorithm_mismatch [system] { header "__algorithm/mismatch.h" }
+module std_private_algorithm_mismatch [system] {
+ header "__algorithm/mismatch.h"
+ export std_private_algorithm_simd_utils
+}
module std_private_algorithm_move [system] { header "__algorithm/move.h" }
module std_private_algorithm_move_backward [system] { header "__algorithm/move_backward.h" }
module std_private_algorithm_next_permutation [system] { header "__algorithm/next_permutation.h" }
@@ -1048,6 +1051,7 @@ module std_private_algorithm_sort [system
header "__algorithm/sort.h"
export std_private_debug_utils_strict_weak_ordering_check
}
+module std_private_algorithm_simd_utils [system] { header "__algorithm/simd_utils.h" }
module std_private_algorithm_sort_heap [system] { header "__algorithm/sort_heap.h" }
module std_private_algorithm_stable_partition [system] { header "__algorithm/stable_partition.h" }
module std_private_algorithm_stable_sort [system] { header "__algorithm/stable_sort.h" }
@@ -1251,6 +1255,8 @@ module std_private_debug_utils_strict_weak_ordering_check [system] {
export std_private_type_traits_is_constant_evaluated
}
+module std_private_deque_fwd [system] { header "__fwd/deque.h" }
+
module std_private_exception_exception [system] { header "__exception/exception.h" }
module std_private_exception_exception_ptr [system] {
header "__exception/exception_ptr.h"
@@ -1315,7 +1321,7 @@ module std_private_format_format_functions [system] {
header "__format/format_functions.h"
export std_string
}
-module std_private_format_format_fwd [system] { header "__format/format_fwd.h" }
+module std_private_format_fwd [system] { header "__fwd/format.h" }
module std_private_format_format_parse_context [system] { header "__format/format_parse_context.h" }
module std_private_format_format_string [system] { header "__format/format_string.h" }
module std_private_format_format_to_n_result [system] {
@@ -1531,6 +1537,7 @@ module std_private_memory_concepts [system] {
}
module std_private_memory_construct_at [system] { header "__memory/construct_at.h" }
module std_private_memory_destruct_n [system] { header "__memory/destruct_n.h" }
+module std_private_memory_fwd [system] { header "__fwd/memory.h" }
module std_private_memory_pointer_traits [system] { header "__memory/pointer_traits.h" }
module std_private_memory_ranges_construct_at [system] { header "__memory/ranges_construct_at.h" }
module std_private_memory_ranges_uninitialized_algorithms [system] {
@@ -1596,6 +1603,8 @@ module std_private_numeric_transform_exclusive_scan [system] { header "__numeric
module std_private_numeric_transform_inclusive_scan [system] { header "__numeric/transform_inclusive_scan.h" }
module std_private_numeric_transform_reduce [system] { header "__numeric/transform_reduce.h" }
+module std_private_queue_fwd [system] { header "__fwd/queue.h" }
+
module std_private_random_bernoulli_distribution [system] { header "__random/bernoulli_distribution.h" }
module std_private_random_binomial_distribution [system] { header "__random/binomial_distribution.h" }
module std_private_random_cauchy_distribution [system] { header "__random/cauchy_distribution.h" }
@@ -1729,10 +1738,15 @@ module std_private_ranges_transform_view [system] {
}
module std_private_ranges_view_interface [system] { header "__ranges/view_interface.h" }
module std_private_ranges_views [system] { header "__ranges/views.h" }
-module std_private_ranges_zip_view [system] { header "__ranges/zip_view.h" }
+module std_private_ranges_zip_view [system] {
+ header "__ranges/zip_view.h"
+ export std_private_utility_pair
+}
module std_private_span_span_fwd [system] { header "__fwd/span.h" }
+module std_private_stack_fwd [system] { header "__fwd/stack.h" }
+
module std_private_stop_token_atomic_unique_lock [system] { header "__stop_token/atomic_unique_lock.h" }
module std_private_stop_token_intrusive_list_view [system] { header "__stop_token/intrusive_list_view.h" }
module std_private_stop_token_intrusive_shared_ptr [system] { header "__stop_token/intrusive_shared_ptr.h" }
@@ -1799,19 +1813,22 @@ module std_private_thread_thread [system] {
}
module std_private_thread_timed_backoff_policy [system] { header "__thread/timed_backoff_policy.h" }
-module std_private_tuple_make_tuple_types [system] { header "__tuple/make_tuple_types.h" }
-module std_private_tuple_pair_like [system] {
- header "__tuple/pair_like.h"
- export std_private_tuple_tuple_like
-}
-module std_private_tuple_sfinae_helpers [system] { header "__tuple/sfinae_helpers.h" }
-module std_private_tuple_tuple_element [system] { header "__tuple/tuple_element.h" }
-module std_private_tuple_tuple_fwd [system] { header "__fwd/tuple.h" }
-module std_private_tuple_tuple_indices [system] { header "__tuple/tuple_indices.h" }
-module std_private_tuple_tuple_like [system] { header "__tuple/tuple_like.h" }
-module std_private_tuple_tuple_like_ext [system] { header "__tuple/tuple_like_ext.h" }
-module std_private_tuple_tuple_size [system] { header "__tuple/tuple_size.h" }
-module std_private_tuple_tuple_types [system] { header "__tuple/tuple_types.h" }
+module std_private_tuple_find_index [system] { header "__tuple/find_index.h" }
+module std_private_tuple_make_tuple_types [system] { header "__tuple/make_tuple_types.h" }
+module std_private_tuple_tuple_like_no_subrange [system] {
+ header "__tuple/tuple_like_no_subrange.h"
+}
+module std_private_tuple_sfinae_helpers [system] { header "__tuple/sfinae_helpers.h" }
+module std_private_tuple_tuple_element [system] { header "__tuple/tuple_element.h" }
+module std_private_tuple_tuple_fwd [system] { header "__fwd/tuple.h" }
+module std_private_tuple_tuple_indices [system] { header "__tuple/tuple_indices.h" }
+module std_private_tuple_tuple_like [system] {
+ header "__tuple/tuple_like.h"
+ export *
+}
+module std_private_tuple_tuple_like_ext [system] { header "__tuple/tuple_like_ext.h" }
+module std_private_tuple_tuple_size [system] { header "__tuple/tuple_size.h" }
+module std_private_tuple_tuple_types [system] { header "__tuple/tuple_types.h" }
module std_private_type_traits_add_const [system] { header "__type_traits/add_const.h" }
module std_private_type_traits_add_cv [system] { header "__type_traits/add_cv.h" }
@@ -1901,7 +1918,6 @@ module std_private_type_traits_is_core_convertible [system
header "__type_traits/is_core_convertible.h"
export std_private_type_traits_integral_constant
}
-module std_private_type_traits_is_default_constructible [system] { header "__type_traits/is_default_constructible.h" }
module std_private_type_traits_is_destructible [system] { header "__type_traits/is_destructible.h" }
module std_private_type_traits_is_empty [system] { header "__type_traits/is_empty.h" }
module std_private_type_traits_is_enum [system] {
@@ -1926,26 +1942,16 @@ module std_private_type_traits_is_literal_type [system
module std_private_type_traits_is_member_function_pointer [system] { header "__type_traits/is_member_function_pointer.h" }
module std_private_type_traits_is_member_object_pointer [system] { header "__type_traits/is_member_object_pointer.h" }
module std_private_type_traits_is_member_pointer [system] { header "__type_traits/is_member_pointer.h" }
-module std_private_type_traits_is_move_assignable [system] { header "__type_traits/is_move_assignable.h" }
-module std_private_type_traits_is_move_constructible [system] { header "__type_traits/is_move_constructible.h" }
module std_private_type_traits_is_nothrow_assignable [system] { header "__type_traits/is_nothrow_assignable.h" }
-module std_private_type_traits_is_nothrow_constructible [system] { header "__type_traits/is_nothrow_constructible.h" }
-module std_private_type_traits_is_nothrow_convertible [system] { header "__type_traits/is_nothrow_convertible.h" }
-module std_private_type_traits_is_nothrow_copy_assignable [system] { header "__type_traits/is_nothrow_copy_assignable.h" }
-module std_private_type_traits_is_nothrow_copy_constructible [system] { header "__type_traits/is_nothrow_copy_constructible.h" }
-module std_private_type_traits_is_nothrow_default_constructible [system] {
- header "__type_traits/is_nothrow_default_constructible.h"
+module std_private_type_traits_is_nothrow_constructible [system] {
+ header "__type_traits/is_nothrow_constructible.h"
export std_private_type_traits_integral_constant
}
+module std_private_type_traits_is_nothrow_convertible [system] { header "__type_traits/is_nothrow_convertible.h" }
module std_private_type_traits_is_nothrow_destructible [system] {
header "__type_traits/is_nothrow_destructible.h"
export std_private_type_traits_is_destructible
}
-module std_private_type_traits_is_nothrow_move_assignable [system] { header "__type_traits/is_nothrow_move_assignable.h" }
-module std_private_type_traits_is_nothrow_move_constructible [system] {
- header "__type_traits/is_nothrow_move_constructible.h"
- export std_private_type_traits_is_nothrow_constructible
-}
module std_private_type_traits_is_null_pointer [system] {
header "__type_traits/is_null_pointer.h"
export std_cstddef
@@ -1984,14 +1990,9 @@ module std_private_type_traits_is_swappable [system
module std_private_type_traits_is_trivial [system] { header "__type_traits/is_trivial.h" }
module std_private_type_traits_is_trivially_assignable [system] { header "__type_traits/is_trivially_assignable.h" }
module std_private_type_traits_is_trivially_constructible [system] { header "__type_traits/is_trivially_constructible.h" }
-module std_private_type_traits_is_trivially_copy_assignable [system] { header "__type_traits/is_trivially_copy_assignable.h" }
-module std_private_type_traits_is_trivially_copy_constructible [system] { header "__type_traits/is_trivially_copy_constructible.h" }
module std_private_type_traits_is_trivially_copyable [system] { header "__type_traits/is_trivially_copyable.h" }
-module std_private_type_traits_is_trivially_default_constructible [system] { header "__type_traits/is_trivially_default_constructible.h" }
module std_private_type_traits_is_trivially_destructible [system] { header "__type_traits/is_trivially_destructible.h" }
module std_private_type_traits_is_trivially_lexicographically_comparable [system] { header "__type_traits/is_trivially_lexicographically_comparable.h" }
-module std_private_type_traits_is_trivially_move_assignable [system] { header "__type_traits/is_trivially_move_assignable.h" }
-module std_private_type_traits_is_trivially_move_constructible [system] { header "__type_traits/is_trivially_move_constructible.h" }
module std_private_type_traits_is_trivially_relocatable [system] { header "__type_traits/is_trivially_relocatable.h" }
module std_private_type_traits_is_unbounded_array [system] { header "__type_traits/is_unbounded_array.h" }
module std_private_type_traits_is_union [system] { header "__type_traits/is_union.h" }
@@ -2096,3 +2097,5 @@ module std_private_utility_to_underlying [system] { header "__utility/t
module std_private_utility_unreachable [system] { header "__utility/unreachable.h" }
module std_private_variant_monostate [system] { header "__variant/monostate.h" }
+
+module std_private_vector_fwd [system] { header "__fwd/vector.h" }
diff --git a/contrib/libs/cxxsupp/libcxx/include/mutex b/contrib/libs/cxxsupp/libcxx/include/mutex
index ea56e30519..12fae9a88b 100644
--- a/contrib/libs/cxxsupp/libcxx/include/mutex
+++ b/contrib/libs/cxxsupp/libcxx/include/mutex
@@ -418,24 +418,6 @@ inline _LIBCPP_HIDE_FROM_ABI void lock(_L0& __l0, _L1& __l1, _L2& __l2, _L3&...
std::__lock_first(0, __l0, __l1, __l2, __l3...);
}
-template <class _L0>
-inline _LIBCPP_HIDE_FROM_ABI void __unlock(_L0& __l0) {
- __l0.unlock();
-}
-
-template <class _L0, class _L1>
-inline _LIBCPP_HIDE_FROM_ABI void __unlock(_L0& __l0, _L1& __l1) {
- __l0.unlock();
- __l1.unlock();
-}
-
-template <class _L0, class _L1, class _L2, class... _L3>
-inline _LIBCPP_HIDE_FROM_ABI void __unlock(_L0& __l0, _L1& __l1, _L2& __l2, _L3&... __l3) {
- __l0.unlock();
- __l1.unlock();
- std::__unlock(__l2, __l3...);
-}
-
# endif // _LIBCPP_CXX03_LANG
# if _LIBCPP_STD_VER >= 17
@@ -498,7 +480,7 @@ public:
private:
template <size_t... _Indx>
_LIBCPP_HIDE_FROM_ABI static void __unlock_unpack(__tuple_indices<_Indx...>, _MutexTuple& __mt) {
- std::__unlock(std::get<_Indx>(__mt)...);
+ (std::get<_Indx>(__mt).unlock(), ...);
}
_MutexTuple __t_;
diff --git a/contrib/libs/cxxsupp/libcxx/include/new b/contrib/libs/cxxsupp/libcxx/include/new
index 988f7a8442..5a245dc5ef 100644
--- a/contrib/libs/cxxsupp/libcxx/include/new
+++ b/contrib/libs/cxxsupp/libcxx/include/new
@@ -86,7 +86,6 @@ void operator delete[](void* ptr, void*) noexcept;
*/
-#include <__availability>
#include <__config>
#include <__exception/exception.h>
#include <__type_traits/is_function.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/optional b/contrib/libs/cxxsupp/libcxx/include/optional
index 71ccbea6ec..e6ff8532bc 100644
--- a/contrib/libs/cxxsupp/libcxx/include/optional
+++ b/contrib/libs/cxxsupp/libcxx/include/optional
@@ -200,22 +200,16 @@ namespace std {
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
#include <__type_traits/is_destructible.h>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_object.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_scalar.h>
#include <__type_traits/is_swappable.h>
-#include <__type_traits/is_trivially_copy_assignable.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_trivially_assignable.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
-#include <__type_traits/is_trivially_move_assignable.h>
-#include <__type_traits/is_trivially_move_constructible.h>
#include <__type_traits/negation.h>
#include <__type_traits/remove_const.h>
#include <__type_traits/remove_cvref.h>
@@ -1291,6 +1285,7 @@ _LIBCPP_POP_MACROS
# include <concepts>
# include <ctime>
# include <iterator>
+# include <limits>
# include <memory>
# include <ratio>
# include <stdexcept>
diff --git a/contrib/libs/cxxsupp/libcxx/include/queue b/contrib/libs/cxxsupp/libcxx/include/queue
index 521a465713..f94cd76718 100644
--- a/contrib/libs/cxxsupp/libcxx/include/queue
+++ b/contrib/libs/cxxsupp/libcxx/include/queue
@@ -260,6 +260,8 @@ template <class T, class Container, class Compare>
#include <__algorithm/ranges_copy.h>
#include <__config>
#include <__functional/operations.h>
+#include <__fwd/deque.h>
+#include <__fwd/queue.h>
#include <__iterator/back_insert_iterator.h>
#include <__iterator/iterator_traits.h>
#include <__memory/uses_allocator.h>
@@ -287,9 +289,6 @@ _LIBCPP_PUSH_MACROS
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Tp, class _Container = deque<_Tp> >
-class _LIBCPP_TEMPLATE_VIS queue;
-
template <class _Tp, class _Container>
_LIBCPP_HIDE_FROM_ABI bool operator==(const queue<_Tp, _Container>& __x, const queue<_Tp, _Container>& __y);
@@ -511,7 +510,7 @@ template <class _Tp, class _Container, class _Alloc>
struct _LIBCPP_TEMPLATE_VIS uses_allocator<queue<_Tp, _Container>, _Alloc> : public uses_allocator<_Container, _Alloc> {
};
-template <class _Tp, class _Container = vector<_Tp>, class _Compare = less<typename _Container::value_type> >
+template <class _Tp, class _Container, class _Compare>
class _LIBCPP_TEMPLATE_VIS priority_queue {
public:
typedef _Container container_type;
diff --git a/contrib/libs/cxxsupp/libcxx/include/shared_mutex b/contrib/libs/cxxsupp/libcxx/include/shared_mutex
index 38b559e893..9cc391db6f 100644
--- a/contrib/libs/cxxsupp/libcxx/include/shared_mutex
+++ b/contrib/libs/cxxsupp/libcxx/include/shared_mutex
@@ -128,7 +128,6 @@ template <class Mutex>
# error "<shared_mutex> is not supported since libc++ has been configured without support for threads."
#endif
-#include <__availability>
#include <__chrono/duration.h>
#include <__chrono/steady_clock.h>
#include <__chrono/time_point.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/span b/contrib/libs/cxxsupp/libcxx/include/span
index 9efaac517f..c0fe25ddb4 100644
--- a/contrib/libs/cxxsupp/libcxx/include/span
+++ b/contrib/libs/cxxsupp/libcxx/include/span
@@ -130,10 +130,12 @@ template<class R>
#include <__assert>
#include <__config>
+#include <__fwd/array.h>
#include <__fwd/span.h>
#include <__iterator/bounded_iter.h>
#include <__iterator/concepts.h>
#include <__iterator/iterator_traits.h>
+#include <__iterator/reverse_iterator.h>
#include <__iterator/wrap_iter.h>
#include <__memory/pointer_traits.h>
#include <__ranges/concepts.h>
@@ -141,13 +143,16 @@ template<class R>
#include <__ranges/enable_borrowed_range.h>
#include <__ranges/enable_view.h>
#include <__ranges/size.h>
+#include <__type_traits/is_array.h>
+#include <__type_traits/is_const.h>
#include <__type_traits/is_convertible.h>
+#include <__type_traits/remove_cv.h>
#include <__type_traits/remove_cvref.h>
#include <__type_traits/remove_reference.h>
#include <__type_traits/type_identity.h>
#include <__utility/forward.h>
-#include <array> // for array
-#include <cstddef> // for byte
+#include <cstddef> // for byte
+#include <initializer_list>
#include <stdexcept>
#include <version>
@@ -172,12 +177,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
#if _LIBCPP_STD_VER >= 20
template <class _Tp>
-struct __is_std_array : false_type {};
-
-template <class _Tp, size_t _Sz>
-struct __is_std_array<array<_Tp, _Sz>> : true_type {};
-
-template <class _Tp>
struct __is_std_span : false_type {};
template <class _Tp, size_t _Sz>
@@ -564,10 +563,8 @@ _LIBCPP_HIDE_FROM_ABI auto as_writable_bytes(span<_Tp, _Extent> __s) noexcept {
return __s.__as_writable_bytes();
}
-# if _LIBCPP_STD_VER >= 20
template <contiguous_iterator _It, class _EndOrSize>
span(_It, _EndOrSize) -> span<remove_reference_t<iter_reference_t<_It>>>;
-# endif // _LIBCPP_STD_VER >= 20
template <class _Tp, size_t _Sz>
span(_Tp (&)[_Sz]) -> span<_Tp, _Sz>;
@@ -588,6 +585,7 @@ _LIBCPP_END_NAMESPACE_STD
_LIBCPP_POP_MACROS
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
+# include <array>
# include <concepts>
# include <functional>
# include <iterator>
diff --git a/contrib/libs/cxxsupp/libcxx/include/stack b/contrib/libs/cxxsupp/libcxx/include/stack
index 4003792600..08a392da68 100644
--- a/contrib/libs/cxxsupp/libcxx/include/stack
+++ b/contrib/libs/cxxsupp/libcxx/include/stack
@@ -115,6 +115,7 @@ template <class T, class Container>
#include <__algorithm/ranges_copy.h>
#include <__config>
+#include <__fwd/stack.h>
#include <__iterator/back_insert_iterator.h>
#include <__iterator/iterator_traits.h>
#include <__memory/uses_allocator.h>
@@ -142,9 +143,6 @@ _LIBCPP_PUSH_MACROS
_LIBCPP_BEGIN_NAMESPACE_STD
-template <class _Tp, class _Container = deque<_Tp> >
-class _LIBCPP_TEMPLATE_VIS stack;
-
template <class _Tp, class _Container>
_LIBCPP_HIDE_FROM_ABI bool operator==(const stack<_Tp, _Container>& __x, const stack<_Tp, _Container>& __y);
diff --git a/contrib/libs/cxxsupp/libcxx/include/stddef.h b/contrib/libs/cxxsupp/libcxx/include/stddef.h
index 887776b150..1583e78e37 100644
--- a/contrib/libs/cxxsupp/libcxx/include/stddef.h
+++ b/contrib/libs/cxxsupp/libcxx/include/stddef.h
@@ -7,18 +7,6 @@
//
//===----------------------------------------------------------------------===//
-#if defined(__need_ptrdiff_t) || defined(__need_size_t) || defined(__need_wchar_t) || defined(__need_NULL) || \
- defined(__need_wint_t)
-
-# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-# endif
-
-# include_next <stddef.h>
-
-#elif !defined(_LIBCPP_STDDEF_H)
-# define _LIBCPP_STDDEF_H
-
/*
stddef.h synopsis
@@ -36,15 +24,18 @@ Types:
*/
-# include <__config>
+#include <__config>
-# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-# pragma GCC system_header
-# endif
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+# pragma GCC system_header
+#endif
-# if __has_include_next(<stddef.h>)
-# include_next <stddef.h>
-# endif
+// Note: This include is outside of header guards because we sometimes get included multiple times
+// with different defines and the underlying <stddef.h> will know how to deal with that.
+#include_next <stddef.h>
+
+#ifndef _LIBCPP_STDDEF_H
+# define _LIBCPP_STDDEF_H
# ifdef __cplusplus
typedef decltype(nullptr) nullptr_t;
diff --git a/contrib/libs/cxxsupp/libcxx/include/stlfwd b/contrib/libs/cxxsupp/libcxx/include/stlfwd
index 39e19f5e74..162e6c7661 100644
--- a/contrib/libs/cxxsupp/libcxx/include/stlfwd
+++ b/contrib/libs/cxxsupp/libcxx/include/stlfwd
@@ -4,27 +4,23 @@
#include <cstddef>
#include <iosfwd>
+#include <__fwd/array.h>
+#include <__fwd/deque.h>
+#include <__fwd/pair.h>
+#include <__fwd/string.h>
+#include <__fwd/string_view.h>
+#include <__fwd/tuple.h>
+#include <__fwd/vector.h>
+
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
#endif
_LIBCPP_BEGIN_NAMESPACE_STD
- template <class F, class S>
- struct pair;
-
- template <class T, size_t N>
- struct array;
-
- template <class T, class A>
- class vector;
-
template <class T, class A>
class list;
- template <class T, class A>
- class deque;
-
template <class T, class C, class A>
class set;
@@ -37,9 +33,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class K, class V, class C, class A>
class multimap;
- template <typename... TArgs>
- class tuple;
-
constexpr void get(...) = delete;
template <class>
@@ -54,11 +47,6 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class T>
class _LIBCPP_TEMPLATE_VIS shared_ptr;
- /* basic_string is already forward-declared in <iosfwd> */
-
- template<class T, class Traits>
- class basic_string_view;
-
_LIBCPP_END_NAMESPACE_STD
_LIBCPP_BEGIN_NAMESPACE_FILESYSTEM
diff --git a/contrib/libs/cxxsupp/libcxx/include/string b/contrib/libs/cxxsupp/libcxx/include/string
index c7f7bcb328..64657021c2 100644
--- a/contrib/libs/cxxsupp/libcxx/include/string
+++ b/contrib/libs/cxxsupp/libcxx/include/string
@@ -604,8 +604,8 @@ basic_string<char32_t> operator""s( const char32_t *str, size_t len );
#include <__type_traits/is_allocator.h>
#include <__type_traits/is_array.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_standard_layout.h>
#include <__type_traits/is_trivial.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/string_view b/contrib/libs/cxxsupp/libcxx/include/string_view
index 2ddb931f2b..4df4f02bc9 100644
--- a/contrib/libs/cxxsupp/libcxx/include/string_view
+++ b/contrib/libs/cxxsupp/libcxx/include/string_view
@@ -312,9 +312,10 @@ public:
: __data_(__s),
__size_(__len) {
#if _LIBCPP_STD_VER >= 14
- // This will result in creating an invalid `string_view` object -- some calculations involving `size` would
- // overflow, making it effectively truncated.
- _LIBCPP_ASSERT_ARGUMENT_WITHIN_DOMAIN(
+ // Allocations must fit in `ptrdiff_t` for pointer arithmetic to work. If `__len` exceeds it, the input
+ // range could not have been valid. Most likely the caller underflowed some arithmetic and inadvertently
+ // passed in a negative length.
+ _LIBCPP_ASSERT_VALID_INPUT_RANGE(
__len <= static_cast<size_type>(numeric_limits<difference_type>::max()),
"string_view::string_view(_CharT *, size_t): length does not fit in difference_type");
_LIBCPP_ASSERT_NON_NULL(
diff --git a/contrib/libs/cxxsupp/libcxx/include/thread b/contrib/libs/cxxsupp/libcxx/include/thread
index ed70bde760..68ce63bd01 100644
--- a/contrib/libs/cxxsupp/libcxx/include/thread
+++ b/contrib/libs/cxxsupp/libcxx/include/thread
@@ -92,7 +92,6 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
# error "<thread> is not supported since libc++ has been configured without support for threads."
#endif
-#include <__availability>
#include <__thread/formatter.h>
#include <__thread/jthread.h>
#include <__thread/support.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/tuple b/contrib/libs/cxxsupp/libcxx/include/tuple
index f2369fab50..ed7d9121c6 100644
--- a/contrib/libs/cxxsupp/libcxx/include/tuple
+++ b/contrib/libs/cxxsupp/libcxx/include/tuple
@@ -210,9 +210,11 @@ template <class... Types>
#include <__config>
#include <__functional/invoke.h>
#include <__fwd/array.h>
+#include <__fwd/pair.h>
#include <__fwd/tuple.h>
#include <__memory/allocator_arg_t.h>
#include <__memory/uses_allocator.h>
+#include <__tuple/find_index.h>
#include <__tuple/make_tuple_types.h>
#include <__tuple/sfinae_helpers.h>
#include <__tuple/tuple_element.h>
@@ -231,20 +233,11 @@ template <class... Types>
#include <__type_traits/is_assignable.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_empty.h>
#include <__type_traits/is_final.h>
#include <__type_traits/is_implicitly_default_constructible.h>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_nothrow_constructible.h>
-#include <__type_traits/is_nothrow_copy_assignable.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
#include <__type_traits/is_reference.h>
#include <__type_traits/is_same.h>
#include <__type_traits/is_swappable.h>
@@ -258,7 +251,6 @@ template <class... Types>
#include <__utility/forward.h>
#include <__utility/integer_sequence.h>
#include <__utility/move.h>
-#include <__utility/pair.h>
#include <__utility/piecewise_construct.h>
#include <__utility/swap.h>
#include <cstddef>
@@ -548,10 +540,6 @@ class _LIBCPP_TEMPLATE_VIS tuple {
public:
// [tuple.cnstr]
- _LIBCPP_DIAGNOSTIC_PUSH
- _LIBCPP_CLANG_DIAGNOSTIC_IGNORED("-Wc++20-extensions")
- _LIBCPP_GCC_DIAGNOSTIC_IGNORED("-Wc++20-extensions")
-
// tuple() constructors (including allocator_arg_t variants)
template <template <class...> class _IsImpDefault = __is_implicitly_default_constructible,
template <class...> class _IsDefault = is_default_constructible,
@@ -841,8 +829,6 @@ public:
: __base_(allocator_arg_t(), __alloc, std::move(__p)) {}
# endif // _LIBCPP_STD_VER >= 23
- _LIBCPP_DIAGNOSTIC_POP
-
// [tuple.assign]
_LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 tuple&
operator=(_If<_And<is_copy_assignable<_Tp>...>::value, tuple, __nat> const& __tuple)
@@ -1101,40 +1087,6 @@ get(const tuple<_Tp...>&& __t) _NOEXCEPT {
# if _LIBCPP_STD_VER >= 14
-namespace __find_detail {
-
-static constexpr size_t __not_found = static_cast<size_t>(-1);
-static constexpr size_t __ambiguous = __not_found - 1;
-
-inline _LIBCPP_HIDE_FROM_ABI constexpr size_t __find_idx_return(size_t __curr_i, size_t __res, bool __matches) {
- return !__matches ? __res : (__res == __not_found ? __curr_i : __ambiguous);
-}
-
-template <size_t _Nx>
-inline _LIBCPP_HIDE_FROM_ABI constexpr size_t __find_idx(size_t __i, const bool (&__matches)[_Nx]) {
- return __i == _Nx
- ? __not_found
- : __find_detail::__find_idx_return(__i, __find_detail::__find_idx(__i + 1, __matches), __matches[__i]);
-}
-
-template <class _T1, class... _Args>
-struct __find_exactly_one_checked {
- static constexpr bool __matches[sizeof...(_Args)] = {is_same<_T1, _Args>::value...};
- static constexpr size_t value = __find_detail::__find_idx(0, __matches);
- static_assert(value != __not_found, "type not found in type list");
- static_assert(value != __ambiguous, "type occurs more than once in type list");
-};
-
-template <class _T1>
-struct __find_exactly_one_checked<_T1> {
- static_assert(!is_same<_T1, _T1>::value, "type not in empty type list");
-};
-
-} // namespace __find_detail
-
-template <typename _T1, typename... _Args>
-struct __find_exactly_one_t : public __find_detail::__find_exactly_one_checked<_T1, _Args...> {};
-
template <class _T1, class... _Args>
inline _LIBCPP_HIDE_FROM_ABI constexpr _T1& get(tuple<_Args...>& __tup) noexcept {
return std::get<__find_exactly_one_t<_T1, _Args...>::value>(__tup);
@@ -1404,21 +1356,7 @@ tuple_cat(_Tuple0&& __t0, _Tuples&&... __tpls) {
template <class... _Tp, class _Alloc>
struct _LIBCPP_TEMPLATE_VIS uses_allocator<tuple<_Tp...>, _Alloc> : true_type {};
-template <class _T1, class _T2>
-template <class... _Args1, class... _Args2, size_t... _I1, size_t... _I2>
-inline _LIBCPP_HIDE_FROM_ABI _LIBCPP_CONSTEXPR_SINCE_CXX20 pair<_T1, _T2>::pair(
- piecewise_construct_t,
- tuple<_Args1...>& __first_args,
- tuple<_Args2...>& __second_args,
- __tuple_indices<_I1...>,
- __tuple_indices<_I2...>)
- : first(std::forward<_Args1>(std::get<_I1>(__first_args))...),
- second(std::forward<_Args2>(std::get<_I2>(__second_args))...) {}
-
# if _LIBCPP_STD_VER >= 17
-template <class _Tp>
-inline constexpr size_t tuple_size_v = tuple_size<_Tp>::value;
-
# define _LIBCPP_NOEXCEPT_RETURN(...) \
noexcept(noexcept(__VA_ARGS__)) { return __VA_ARGS__; }
@@ -1436,15 +1374,41 @@ inline _LIBCPP_HIDE_FROM_ABI constexpr decltype(auto) apply(_Fn&& __f, _Tuple&&
std::forward<_Tuple>(__t),
typename __make_tuple_indices<tuple_size_v<remove_reference_t<_Tuple>>>::type{}))
+#if _LIBCPP_STD_VER >= 20
template <class _Tp, class _Tuple, size_t... _Idx>
inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp __make_from_tuple_impl(_Tuple&& __t, __tuple_indices<_Idx...>)
+ noexcept(noexcept(_Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...)))
+ requires is_constructible_v<_Tp, decltype(std::get<_Idx>(std::forward<_Tuple>(__t)))...> {
+ return _Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...);
+}
+#else
+template <class _Tp, class _Tuple, size_t... _Idx>
+inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp __make_from_tuple_impl(_Tuple&& __t, __tuple_indices<_Idx...>,
+ enable_if_t<is_constructible_v<_Tp, decltype(std::get<_Idx>(std::forward<_Tuple>(__t)))...>> * = nullptr)
_LIBCPP_NOEXCEPT_RETURN(_Tp(std::get<_Idx>(std::forward<_Tuple>(__t))...))
+#endif // _LIBCPP_STD_VER >= 20
+
+template <class _Tp, class _Tuple,
+ class _Seq = typename __make_tuple_indices<tuple_size_v<remove_reference_t<_Tuple>>>::type, class = void>
+inline constexpr bool __can_make_from_tuple = false;
+template <class _Tp, class _Tuple, size_t... _Idx>
+inline constexpr bool __can_make_from_tuple<_Tp, _Tuple, __tuple_indices<_Idx...>,
+ enable_if_t<is_constructible_v<_Tp, decltype(std::get<_Idx>(std::declval<_Tuple>()))...>>> = true;
+
+// Based on LWG3528(https://wg21.link/LWG3528) and http://eel.is/c++draft/description#structure.requirements-9,
+// the standard allows to impose requirements, we constraint std::make_from_tuple to make std::make_from_tuple
+// SFINAE friendly and also avoid worse diagnostic messages. We still keep the constraints of std::__make_from_tuple_impl
+// so that std::__make_from_tuple_impl will have the same advantages when used alone.
+#if _LIBCPP_STD_VER >= 20
template <class _Tp, class _Tuple>
+ requires __can_make_from_tuple<_Tp, _Tuple> // strengthen
+#else
+template <class _Tp, class _Tuple, class = enable_if_t<__can_make_from_tuple<_Tp, _Tuple>>> // strengthen
+#endif // _LIBCPP_STD_VER >= 20
inline _LIBCPP_HIDE_FROM_ABI constexpr _Tp make_from_tuple(_Tuple&& __t)
_LIBCPP_NOEXCEPT_RETURN(std::__make_from_tuple_impl<_Tp>(
std::forward<_Tuple>(__t), typename __make_tuple_indices<tuple_size_v<remove_reference_t<_Tuple>>>::type{}))
-
# undef _LIBCPP_NOEXCEPT_RETURN
# endif // _LIBCPP_STD_VER >= 17
diff --git a/contrib/libs/cxxsupp/libcxx/include/type_traits b/contrib/libs/cxxsupp/libcxx/include/type_traits
index 54c8abec34..10f9b881c0 100644
--- a/contrib/libs/cxxsupp/libcxx/include/type_traits
+++ b/contrib/libs/cxxsupp/libcxx/include/type_traits
@@ -458,9 +458,6 @@ namespace std
#include <__type_traits/is_constant_evaluated.h>
#include <__type_traits/is_constructible.h>
#include <__type_traits/is_convertible.h>
-#include <__type_traits/is_copy_assignable.h>
-#include <__type_traits/is_copy_constructible.h>
-#include <__type_traits/is_default_constructible.h>
#include <__type_traits/is_destructible.h>
#include <__type_traits/is_empty.h>
#include <__type_traits/is_enum.h>
@@ -474,17 +471,10 @@ namespace std
#include <__type_traits/is_member_function_pointer.h>
#include <__type_traits/is_member_object_pointer.h>
#include <__type_traits/is_member_pointer.h>
-#include <__type_traits/is_move_assignable.h>
-#include <__type_traits/is_move_constructible.h>
#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_nothrow_constructible.h>
#include <__type_traits/is_nothrow_convertible.h>
-#include <__type_traits/is_nothrow_copy_assignable.h>
-#include <__type_traits/is_nothrow_copy_constructible.h>
-#include <__type_traits/is_nothrow_default_constructible.h>
#include <__type_traits/is_nothrow_destructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
#include <__type_traits/is_null_pointer.h>
#include <__type_traits/is_object.h>
#include <__type_traits/is_pod.h>
@@ -503,13 +493,8 @@ namespace std
#include <__type_traits/is_trivial.h>
#include <__type_traits/is_trivially_assignable.h>
#include <__type_traits/is_trivially_constructible.h>
-#include <__type_traits/is_trivially_copy_assignable.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
#include <__type_traits/is_trivially_copyable.h>
-#include <__type_traits/is_trivially_default_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
-#include <__type_traits/is_trivially_move_assignable.h>
-#include <__type_traits/is_trivially_move_constructible.h>
#include <__type_traits/is_unbounded_array.h>
#include <__type_traits/is_union.h>
#include <__type_traits/is_unsigned.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/typeinfo b/contrib/libs/cxxsupp/libcxx/include/typeinfo
index d39d8ab1ee..bc8969ac74 100644
--- a/contrib/libs/cxxsupp/libcxx/include/typeinfo
+++ b/contrib/libs/cxxsupp/libcxx/include/typeinfo
@@ -56,7 +56,6 @@ public:
*/
-#include <__availability>
#include <__config>
#include <__exception/exception.h>
#include <__type_traits/is_constant_evaluated.h>
diff --git a/contrib/libs/cxxsupp/libcxx/include/variant b/contrib/libs/cxxsupp/libcxx/include/variant
index 5ce99250a8..1b5e84e954 100644
--- a/contrib/libs/cxxsupp/libcxx/include/variant
+++ b/contrib/libs/cxxsupp/libcxx/include/variant
@@ -221,27 +221,34 @@ namespace std {
#include <__functional/operations.h>
#include <__functional/unary_function.h>
#include <__memory/addressof.h>
+#include <__tuple/find_index.h>
+#include <__tuple/sfinae_helpers.h>
#include <__type_traits/add_const.h>
#include <__type_traits/add_cv.h>
#include <__type_traits/add_pointer.h>
#include <__type_traits/add_volatile.h>
+#include <__type_traits/common_type.h>
+#include <__type_traits/conjunction.h>
#include <__type_traits/dependent_type.h>
#include <__type_traits/is_array.h>
+#include <__type_traits/is_constructible.h>
#include <__type_traits/is_destructible.h>
-#include <__type_traits/is_nothrow_move_constructible.h>
-#include <__type_traits/is_trivially_copy_assignable.h>
-#include <__type_traits/is_trivially_copy_constructible.h>
+#include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_nothrow_constructible.h>
+#include <__type_traits/is_reference.h>
+#include <__type_traits/is_trivially_assignable.h>
+#include <__type_traits/is_trivially_constructible.h>
#include <__type_traits/is_trivially_destructible.h>
-#include <__type_traits/is_trivially_move_assignable.h>
-#include <__type_traits/is_trivially_move_constructible.h>
#include <__type_traits/is_void.h>
#include <__type_traits/remove_const.h>
+#include <__type_traits/remove_cvref.h>
#include <__type_traits/type_identity.h>
#include <__type_traits/void_t.h>
#include <__utility/declval.h>
#include <__utility/forward.h>
#include <__utility/forward_like.h>
#include <__utility/in_place.h>
+#include <__utility/integer_sequence.h>
#include <__utility/move.h>
#include <__utility/swap.h>
#include <__variant/monostate.h>
@@ -249,7 +256,6 @@ namespace std {
#include <initializer_list>
#include <limits>
#include <new>
-#include <tuple>
#include <version>
// standard-mandated includes
@@ -340,21 +346,20 @@ struct _LIBCPP_TEMPLATE_VIS variant_alternative<_Ip, variant<_Types...>> {
inline constexpr size_t variant_npos = static_cast<size_t>(-1);
-_LIBCPP_HIDE_FROM_ABI constexpr int __choose_index_type(unsigned int __num_elem) {
- if (__num_elem < numeric_limits<unsigned char>::max())
- return 0;
- if (__num_elem < numeric_limits<unsigned short>::max())
- return 1;
- return 2;
+template <size_t _NumAlternatives>
+_LIBCPP_HIDE_FROM_ABI constexpr auto __choose_index_type() {
+# ifdef _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION
+ if constexpr (_NumAlternatives < numeric_limits<unsigned char>::max())
+ return static_cast<unsigned char>(0);
+ else if constexpr (_NumAlternatives < numeric_limits<unsigned short>::max())
+ return static_cast<unsigned short>(0);
+ else
+# endif // _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION
+ return static_cast<unsigned int>(0);
}
template <size_t _NumAlts>
-using __variant_index_t =
-# ifndef _LIBCPP_ABI_VARIANT_INDEX_TYPE_OPTIMIZATION
- unsigned int;
-# else
- std::tuple_element_t< __choose_index_type(_NumAlts), std::tuple<unsigned char, unsigned short, unsigned int> >;
-# endif
+using __variant_index_t = decltype(std::__choose_index_type<_NumAlts>());
template <class _IndexType>
constexpr _IndexType __variant_npos = static_cast<_IndexType>(-1);
@@ -1081,13 +1086,9 @@ struct __narrowing_check {
};
template <class _Dest, class _Source>
-using __check_for_narrowing _LIBCPP_NODEBUG = typename _If<
-# ifdef _LIBCPP_ENABLE_NARROWING_CONVERSIONS_IN_VARIANT
- false &&
-# endif
- is_arithmetic<_Dest>::value,
- __narrowing_check,
- __no_narrowing_check >::template _Apply<_Dest, _Source>;
+using __check_for_narrowing _LIBCPP_NODEBUG =
+ typename _If< is_arithmetic<_Dest>::value, __narrowing_check, __no_narrowing_check >::template _Apply<_Dest,
+ _Source>;
template <class _Tp, size_t _Idx>
struct __overload {
@@ -1095,24 +1096,6 @@ struct __overload {
auto operator()(_Tp, _Up&&) const -> __check_for_narrowing<_Tp, _Up>;
};
-// TODO(LLVM-19): Remove all occurrences of this macro.
-# ifdef _LIBCPP_ENABLE_NARROWING_CONVERSIONS_IN_VARIANT
-template <class _Tp, size_t>
-struct __overload_bool {
- template <class _Up, class _Ap = __remove_cvref_t<_Up>>
- auto operator()(bool, _Up&&) const -> enable_if_t<is_same_v<_Ap, bool>, __type_identity<_Tp>>;
-};
-
-template <size_t _Idx>
-struct __overload<bool, _Idx> : __overload_bool<bool, _Idx> {};
-template <size_t _Idx>
-struct __overload<bool const, _Idx> : __overload_bool<bool const, _Idx> {};
-template <size_t _Idx>
-struct __overload<bool volatile, _Idx> : __overload_bool<bool volatile, _Idx> {};
-template <size_t _Idx>
-struct __overload<bool const volatile, _Idx> : __overload_bool<bool const volatile, _Idx> {};
-# endif
-
template <class... _Bases>
struct __all_overloads : _Bases... {
void operator()() const;
@@ -1625,6 +1608,7 @@ _LIBCPP_POP_MACROS
#if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
# include <exception>
+# include <tuple>
# include <type_traits>
# include <typeinfo>
# include <utility>
diff --git a/contrib/libs/cxxsupp/libcxx/include/vector b/contrib/libs/cxxsupp/libcxx/include/vector
index cc80875596..61e3263344 100644
--- a/contrib/libs/cxxsupp/libcxx/include/vector
+++ b/contrib/libs/cxxsupp/libcxx/include/vector
@@ -325,6 +325,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <__format/formatter_bool.h>
#include <__functional/hash.h>
#include <__functional/unary_function.h>
+#include <__fwd/vector.h>
#include <__iterator/advance.h>
#include <__iterator/distance.h>
#include <__iterator/iterator_traits.h>
@@ -346,7 +347,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <__split_buffer>
#include <__type_traits/is_allocator.h>
#include <__type_traits/is_constructible.h>
-#include <__type_traits/is_nothrow_move_assignable.h>
+#include <__type_traits/is_nothrow_assignable.h>
#include <__type_traits/is_trivially_destructible.h>
#include <__type_traits/noexcept_move_assign_container.h>
#include <__type_traits/type_identity.h>
@@ -358,7 +359,6 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <__utility/swap.h>
#include <climits>
#include <cstring>
-#include <iosfwd> // for forward declaration of vector
#include <limits>
#include <stdexcept>
#include <version>
@@ -3082,7 +3082,9 @@ _LIBCPP_POP_MACROS
# include <atomic>
# include <concepts>
# include <cstdlib>
+# include <iosfwd>
# include <locale>
+# include <tuple>
# include <type_traits>
# include <typeinfo>
# include <utility>
diff --git a/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-04-11-gnu-include-next.patch b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-04-11-gnu-include-next.patch
new file mode 100644
index 0000000000..356fc032ea
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-04-11-gnu-include-next.patch
@@ -0,0 +1,26 @@
+diff --git a/include/stddef.h b/include/stddef.h
+index 470b540..1583e78 100644
+--- a/include/stddef.h
++++ b/include/stddef.h
+@@ -26,6 +26,10 @@ Types:
+
+ #include <__config>
+
++#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
++# pragma GCC system_header
++#endif
++
+ // Note: This include is outside of header guards because we sometimes get included multiple times
+ // with different defines and the underlying <stddef.h> will know how to deal with that.
+ #include_next <stddef.h>
+@@ -33,10 +37,6 @@ Types:
+ #ifndef _LIBCPP_STDDEF_H
+ # define _LIBCPP_STDDEF_H
+
+-# if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+-# pragma GCC system_header
+-# endif
+-
+ # ifdef __cplusplus
+ typedef decltype(nullptr) nullptr_t;
+ # endif
diff --git a/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-12-undeprecate-macro.patch b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-12-undeprecate-macro.patch
new file mode 100644
index 0000000000..a0cc732c20
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-12-undeprecate-macro.patch
@@ -0,0 +1,28 @@
+diff --git a/include/cerrno b/include/cerrno
+index 6171ae3..f129568 100644
+--- a/include/cerrno
++++ b/include/cerrno
+@@ -38,17 +38,11 @@ Macros:
+ # pragma GCC system_header
+ #endif
+
+-#ifdef ENODATA
+-# pragma clang deprecated(ENODATA, "ENODATA is deprecated in ISO C++")
+-#endif
+-#ifdef ENOSR
+-# pragma clang deprecated(ENOSR, "ENOSR is deprecated in ISO C++")
+-#endif
+-#ifdef ENOSTR
+-# pragma clang deprecated(ENOSTR, "ENOSTR is deprecated in ISO C++")
+-#endif
+-#ifdef ETIME
+-# pragma clang deprecated(ETIME, "ETIME is deprecated in ISO C++")
+-#endif
++// LWG3869 Deprecate std::errc constants related to UNIX STREAMS
++//
++// This LWG issue deprecates the POSIX macros ENODATA, ENOSR, ENOSTR, and ETIME. These were
++// deprecated in libc++ in https://github.com/llvm/llvm-project/pull/80542.
++// Based on the post commit feedback the macro are no longer deprecated.
++// Instead libc++ leaves the deprecation to the provider of errno.h.
+
+ #endif // _LIBCPP_CERRNO
diff --git a/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-22-wasm-eptr.patch b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-22-wasm-eptr.patch
index f426cdd5f2..8d584e0997 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-22-wasm-eptr.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/00-future-2024-05-22-wasm-eptr.patch
@@ -1,26 +1,26 @@
diff --git a/include/__exception/exception_ptr.h b/include/__exception/exception_ptr.h
-index 53e2f71..73834b6 100644
+index c9027de..868fd7c 100644
--- a/include/__exception/exception_ptr.h
+++ b/include/__exception/exception_ptr.h
-@@ -36,11 +36,14 @@ struct __cxa_exception;
+@@ -38,11 +38,14 @@ struct __cxa_exception;
_LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception(
void*,
std::type_info*,
- void(
- # if defined(_WIN32)
+ # if defined(_WIN32)
- __thiscall
+ void(__thiscall*)(void*)) throw();
-+# elif defined(__wasm__)
++# elif defined(__wasm__)
+ // In Wasm, a destructor returns its argument
+ void* (*)(void*)) throw();
-+# else
++# else
+ void (*)(void*)) throw();
- # endif
+ # endif
- *)(void*)) throw();
}
} // namespace __cxxabiv1
-@@ -88,8 +91,16 @@ _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
+@@ -92,8 +95,16 @@ _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
using _Ep2 = __decay_t<_Ep>;
void* __ex = __cxxabiv1::__cxa_allocate_exception(sizeof(_Ep));
@@ -38,10 +38,10 @@ index 53e2f71..73834b6 100644
try {
diff --git a/include/__locale b/include/__locale
-index 2186db8..fa987cb 100644
+index fab87f0..0c6fe3c 100644
--- a/include/__locale
+++ b/include/__locale
-@@ -344,12 +344,12 @@ public:
+@@ -343,12 +343,12 @@ public:
static const mask __regex_word = 0x4000; // 0x8000 and 0x0100 and 0x00ff are used
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_PRINT
# define _LIBCPP_CTYPE_MASK_IS_COMPOSITE_ALPHA
diff --git a/contrib/libs/cxxsupp/libcxx/patches/01-commit-e0e82fc-initial.patch b/contrib/libs/cxxsupp/libcxx/patches/01-commit-e0e82fc-initial.patch
index 941ad6471d..e8e885f238 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/01-commit-e0e82fc-initial.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/01-commit-e0e82fc-initial.patch
@@ -1,5 +1,5 @@
diff --git a/include/__config b/include/__config
-index 3a438e8..6a7bda1 100644
+index 8550b1d..d32ad24 100644
--- a/include/__config
+++ b/include/__config
@@ -138,7 +138,12 @@
@@ -17,10 +17,10 @@ index 3a438e8..6a7bda1 100644
# define _LIBCPP_ABI_REGEX_CONSTANTS_NONZERO
// Re-worked external template instantiations for std::string with a focus on
diff --git a/include/typeinfo b/include/typeinfo
-index dafc7b8..d4e5e4e 100644
+index 1ae075e..3a1981a 100644
--- a/include/typeinfo
+++ b/include/typeinfo
-@@ -97,7 +97,13 @@ public:
+@@ -96,7 +96,13 @@ public:
size_t hash_code() const _NOEXCEPT;
diff --git a/contrib/libs/cxxsupp/libcxx/patches/14-has-no-threads.patch b/contrib/libs/cxxsupp/libcxx/patches/14-has-no-threads.patch
index 4688ea395a..dc62fc1f4b 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/14-has-no-threads.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/14-has-no-threads.patch
@@ -1,8 +1,8 @@
diff --git a/include/__memory/shared_ptr.h b/include/__memory/shared_ptr.h
-index d90e144..e78f281 100644
+index a8ff189..fa25116 100644
--- a/include/__memory/shared_ptr.h
+++ b/include/__memory/shared_ptr.h
-@@ -54,7 +54,7 @@
+@@ -53,7 +53,7 @@
#include <new>
#include <typeinfo>
#if !defined(_LIBCPP_HAS_NO_ATOMIC_HEADER)
@@ -11,7 +11,7 @@ index d90e144..e78f281 100644
#endif
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
-@@ -138,7 +138,12 @@ class _LIBCPP_EXPORTED_FROM_ABI __shared_count {
+@@ -137,7 +137,12 @@ class _LIBCPP_EXPORTED_FROM_ABI __shared_count {
__shared_count& operator=(const __shared_count&);
protected:
@@ -25,7 +25,7 @@ index d90e144..e78f281 100644
virtual ~__shared_count();
private:
-@@ -151,20 +156,41 @@ public:
+@@ -150,20 +155,41 @@ public:
void __add_shared() noexcept;
bool __release_shared() noexcept;
#else
@@ -70,7 +70,7 @@ index d90e144..e78f281 100644
public:
_LIBCPP_HIDE_FROM_ABI explicit __shared_weak_count(long __refs = 0) _NOEXCEPT
-@@ -181,7 +207,13 @@ public:
+@@ -180,7 +206,13 @@ public:
void __release_shared() noexcept;
#else
_LIBCPP_HIDE_FROM_ABI void __add_shared() _NOEXCEPT { __shared_count::__add_shared(); }
diff --git a/contrib/libs/cxxsupp/libcxx/patches/15-unique-ptr.patch b/contrib/libs/cxxsupp/libcxx/patches/15-unique-ptr.patch
index 07fb95833c..796974ba24 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/15-unique-ptr.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/15-unique-ptr.patch
@@ -1,8 +1,8 @@
diff --git a/include/__memory/unique_ptr.h b/include/__memory/unique_ptr.h
-index a505dab..327e02c 100644
+index 46d9405..ff747e3 100644
--- a/include/__memory/unique_ptr.h
+++ b/include/__memory/unique_ptr.h
-@@ -41,6 +41,7 @@
+@@ -40,6 +40,7 @@
#include <__utility/forward.h>
#include <__utility/move.h>
#include <cstddef>
@@ -10,7 +10,7 @@ index a505dab..327e02c 100644
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
-@@ -122,7 +123,7 @@ struct __unique_ptr_deleter_sfinae<_Deleter&> {
+@@ -121,7 +122,7 @@ struct __unique_ptr_deleter_sfinae<_Deleter&> {
# define _LIBCPP_UNIQUE_PTR_TRIVIAL_ABI
#endif
diff --git a/contrib/libs/cxxsupp/libcxx/patches/22__config.patch b/contrib/libs/cxxsupp/libcxx/patches/22__config.patch
index 89321804cc..99f19a50c1 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/22__config.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/22__config.patch
@@ -1,5 +1,5 @@
diff --git a/include/__config b/include/__config
-index 6a7bda1..5eeb235 100644
+index d32ad24..a7d7799 100644
--- a/include/__config
+++ b/include/__config
@@ -39,13 +39,35 @@
@@ -48,7 +48,7 @@ index 6a7bda1..5eeb235 100644
# define _LIBCPP_OBJECT_FORMAT_COFF 1
# elif defined(__wasm__)
# define _LIBCPP_OBJECT_FORMAT_WASM 1
-@@ -792,7 +814,7 @@ typedef __char32_t char32_t;
+@@ -819,7 +841,7 @@ typedef __char32_t char32_t;
// TODO: We provide a escape hatch with _LIBCPP_NO_ABI_TAG for folks who want to avoid increasing
// the length of symbols with an ABI tag. In practice, we should remove the escape hatch and
// use compression mangling instead, see https://github.com/itanium-cxx-abi/cxx-abi/issues/70.
@@ -57,7 +57,7 @@ index 6a7bda1..5eeb235 100644
# define _LIBCPP_HIDE_FROM_ABI \
_LIBCPP_HIDDEN _LIBCPP_EXCLUDE_FROM_EXPLICIT_INSTANTIATION \
__attribute__((__abi_tag__(_LIBCPP_TOSTRING(_LIBCPP_ODR_SIGNATURE))))
-@@ -1045,7 +1067,8 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
+@@ -1101,7 +1123,8 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
defined(__APPLE__) || \
defined(__MVS__) || \
defined(_AIX) || \
@@ -67,7 +67,7 @@ index 6a7bda1..5eeb235 100644
// clang-format on
# define _LIBCPP_HAS_THREAD_API_PTHREAD
# elif defined(__Fuchsia__)
-@@ -1213,6 +1236,10 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
+@@ -1267,6 +1290,10 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
# define _LIBCPP_ENABLE_CXX20_REMOVED_TYPE_TRAITS
# endif // _LIBCPP_ENABLE_CXX20_REMOVED_FEATURES
@@ -78,7 +78,7 @@ index 6a7bda1..5eeb235 100644
// clang-format off
# define _LIBCPP_PUSH_MACROS _Pragma("push_macro(\"min\")") _Pragma("push_macro(\"max\")") _Pragma("push_macro(\"refresh\")") _Pragma("push_macro(\"move\")") _Pragma("push_macro(\"erase\")")
# define _LIBCPP_POP_MACROS _Pragma("pop_macro(\"min\")") _Pragma("pop_macro(\"max\")") _Pragma("pop_macro(\"refresh\")") _Pragma("pop_macro(\"move\")") _Pragma("pop_macro(\"erase\")")
-@@ -1415,6 +1442,11 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
+@@ -1452,6 +1479,11 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
# define _LIBCPP_NO_DESTROY
# endif
@@ -90,7 +90,7 @@ index 6a7bda1..5eeb235 100644
# if __has_attribute(__diagnose_if__) && !defined(_LIBCPP_DISABLE_ADDITIONAL_DIAGNOSTICS)
# define _LIBCPP_DIAGNOSE_WARNING(...) __attribute__((__diagnose_if__(__VA_ARGS__, "warning")))
# else
-@@ -1436,6 +1468,12 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
+@@ -1473,6 +1505,12 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
# define _LIBCPP_LIFETIMEBOUND
# endif
diff --git a/contrib/libs/cxxsupp/libcxx/patches/23__locale.patch b/contrib/libs/cxxsupp/libcxx/patches/23__locale.patch
index 6739ec5e8d..3ecb6b53ec 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/23__locale.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/23__locale.patch
@@ -1,8 +1,8 @@
diff --git a/include/__locale b/include/__locale
-index fa987cb..de7c2c6 100644
+index 0c6fe3c..6692046 100644
--- a/include/__locale
+++ b/include/__locale
-@@ -17,6 +17,7 @@
+@@ -16,6 +16,7 @@
#include <__mutex/once_flag.h>
#include <__type_traits/make_unsigned.h>
#include <__utility/no_destroy.h>
@@ -10,7 +10,7 @@ index fa987cb..de7c2c6 100644
#include <cctype>
#include <clocale>
#include <cstdint>
-@@ -126,8 +127,7 @@ private:
+@@ -125,8 +126,7 @@ private:
};
class _LIBCPP_EXPORTED_FROM_ABI locale::id {
diff --git a/contrib/libs/cxxsupp/libcxx/patches/25__tuple.patch b/contrib/libs/cxxsupp/libcxx/patches/25__tuple.patch
index db8b2b2227..acf8cc0ba9 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/25__tuple.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/25__tuple.patch
@@ -1,8 +1,8 @@
diff --git a/include/__tuple/sfinae_helpers.h b/include/__tuple/sfinae_helpers.h
-index 90e9b1e..c76e7e0 100644
+index 35a57ff..dfd00f5 100644
--- a/include/__tuple/sfinae_helpers.h
+++ b/include/__tuple/sfinae_helpers.h
-@@ -46,7 +46,7 @@ struct __tuple_sfinae_base {
+@@ -41,7 +41,7 @@ struct __tuple_sfinae_base {
static auto __do_test(...) -> false_type;
template <class _FromArgs, class _ToArgs>
@@ -11,7 +11,7 @@ index 90e9b1e..c76e7e0 100644
};
// __tuple_constructible
-@@ -54,11 +54,17 @@ struct __tuple_sfinae_base {
+@@ -49,11 +49,17 @@ struct __tuple_sfinae_base {
template <class _Tp,
class _Up,
bool = __tuple_like_ext<__libcpp_remove_reference_t<_Tp> >::value,
@@ -32,10 +32,10 @@ index 90e9b1e..c76e7e0 100644
typename __make_tuple_types<_Up>::type > {};
diff --git a/include/__tuple/tuple_element.h b/include/__tuple/tuple_element.h
-index 2b9ac66..e811a21 100644
+index 55b3b47..c6818f2 100644
--- a/include/__tuple/tuple_element.h
+++ b/include/__tuple/tuple_element.h
-@@ -63,11 +63,26 @@ __indexed<_Idx, _Tp> __at_index(__indexed<_Idx, _Tp> const&);
+@@ -60,11 +60,26 @@ __indexed<_Idx, _Tp> __at_index(__indexed<_Idx, _Tp> const&);
} // namespace __indexer_detail
diff --git a/contrib/libs/cxxsupp/libcxx/patches/28-cudacc.patch b/contrib/libs/cxxsupp/libcxx/patches/28-cudacc.patch
index 012b29cf5d..2ffbb5ec8e 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/28-cudacc.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/28-cudacc.patch
@@ -1,5 +1,18 @@
+diff --git a/include/__algorithm/simd_utils.h b/include/__algorithm/simd_utils.h
+index 989a195..c2fc02e 100644
+--- a/include/__algorithm/simd_utils.h
++++ b/include/__algorithm/simd_utils.h
+@@ -27,7 +27,7 @@ _LIBCPP_PUSH_MACROS
+ #include <__undef_macros>
+
+ // TODO: Find out how altivec changes things and allow vectorizations there too.
+-#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1700 && !defined(__ALTIVEC__)
++#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1700 && !defined(__ALTIVEC__) && !defined(__CUDACC__)
+ # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 1
+ #else
+ # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0
diff --git a/include/__iterator/reverse_iterator.h b/include/__iterator/reverse_iterator.h
-index 5900b1c..c8f3628 100644
+index 2ae1461..3fb2a42 100644
--- a/include/__iterator/reverse_iterator.h
+++ b/include/__iterator/reverse_iterator.h
@@ -132,7 +132,7 @@ public:
@@ -49,10 +62,10 @@ index da585af..b271b8f 100644
return __builtin_isnan(__x);
}
diff --git a/include/complex b/include/complex
-index e996485..d553dad 100644
+index a81f968..1e4d99d 100644
--- a/include/complex
+++ b/include/complex
-@@ -1518,6 +1518,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr complex<double> operator""i(unsigned long
+@@ -1513,6 +1513,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr complex<double> operator""i(unsigned long
return {0.0, static_cast<double>(__im)};
}
@@ -60,7 +73,7 @@ index e996485..d553dad 100644
_LIBCPP_HIDE_FROM_ABI inline constexpr complex<float> operator""if(long double __im) {
return {0.0f, static_cast<float>(__im)};
}
-@@ -1525,6 +1526,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr complex<float> operator""if(long double _
+@@ -1520,6 +1521,7 @@ _LIBCPP_HIDE_FROM_ABI inline constexpr complex<float> operator""if(long double _
_LIBCPP_HIDE_FROM_ABI inline constexpr complex<float> operator""if(unsigned long long __im) {
return {0.0f, static_cast<float>(__im)};
}
@@ -69,10 +82,10 @@ index e996485..d553dad 100644
} // namespace literals
#endif
diff --git a/include/tuple b/include/tuple
-index 0101d64..f2369fa 100644
+index c7fc550..ed7d912 100644
--- a/include/tuple
+++ b/include/tuple
-@@ -305,7 +305,7 @@ class __tuple_leaf {
+@@ -297,7 +297,7 @@ class __tuple_leaf {
template <class _Tp>
static _LIBCPP_HIDE_FROM_ABI constexpr bool __can_bind_reference() {
@@ -81,7 +94,7 @@ index 0101d64..f2369fa 100644
return !__reference_binds_to_temporary(_Hp, _Tp);
# else
return true;
-@@ -611,8 +611,16 @@ public:
+@@ -599,8 +599,16 @@ public:
is_constructible<_Tp, _Up>... > {};
template <class... _Up,
diff --git a/contrib/libs/cxxsupp/libcxx/patches/33__split_buffer.patch b/contrib/libs/cxxsupp/libcxx/patches/33__split_buffer.patch
index edfa17dafe..c5c6389e2c 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/33__split_buffer.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/33__split_buffer.patch
@@ -1,8 +1,8 @@
diff --git a/include/__split_buffer b/include/__split_buffer
-index aaf9556..2fe8b1e 100644
+index c68349e..b638cb0 100644
--- a/include/__split_buffer
+++ b/include/__split_buffer
-@@ -154,7 +154,7 @@ public:
+@@ -153,7 +153,7 @@ public:
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void pop_front() { __destruct_at_begin(__begin_ + 1); }
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void pop_back() { __destruct_at_end(__end_ - 1); }
@@ -11,7 +11,7 @@ index aaf9556..2fe8b1e 100644
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void __construct_at_end(size_type __n);
_LIBCPP_CONSTEXPR_SINCE_CXX20 _LIBCPP_HIDE_FROM_ABI void __construct_at_end(size_type __n, const_reference __x);
-@@ -237,6 +237,11 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __split_buffer<_Tp, _Allocator>::__invariants
+@@ -236,6 +236,11 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 bool __split_buffer<_Tp, _Allocator>::__invariants
return true;
}
diff --git a/contrib/libs/cxxsupp/libcxx/patches/38-complex.patch b/contrib/libs/cxxsupp/libcxx/patches/38-complex.patch
index a9ca4cd77c..c3cfdf28cc 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/38-complex.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/38-complex.patch
@@ -1,8 +1,8 @@
diff --git a/include/complex b/include/complex
-index d553dad..95be60c 100644
+index 1e4d99d..5f09e3e 100644
--- a/include/complex
+++ b/include/complex
-@@ -1341,7 +1341,8 @@ _LIBCPP_HIDE_FROM_ABI complex<_Tp> acos(const complex<_Tp>& __x) {
+@@ -1342,7 +1342,8 @@ _LIBCPP_HIDE_FROM_ABI complex<_Tp> acos(const complex<_Tp>& __x) {
}
if (std::__constexpr_isinf(__x.imag()))
return complex<_Tp>(__pi / _Tp(2), -__x.imag());
diff --git a/contrib/libs/cxxsupp/libcxx/patches/39-optional.patch b/contrib/libs/cxxsupp/libcxx/patches/39-optional.patch
index 0b5b5ed41d..63be005780 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/39-optional.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/39-optional.patch
@@ -1,8 +1,8 @@
diff --git a/include/optional b/include/optional
-index 99bfd0d..71ccbea 100644
+index a16e485..e6ff853 100644
--- a/include/optional
+++ b/include/optional
-@@ -294,7 +294,7 @@ struct __optional_destruct_base<_Tp, false> {
+@@ -288,7 +288,7 @@ struct __optional_destruct_base<_Tp, false> {
};
bool __engaged_;
diff --git a/contrib/libs/cxxsupp/libcxx/patches/40-deque.patch b/contrib/libs/cxxsupp/libcxx/patches/40-deque.patch
index 7c10cf4bbc..7bb15cde2f 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/40-deque.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/40-deque.patch
@@ -1,8 +1,8 @@
diff --git a/include/deque b/include/deque
-index 85ea9c6..2c6773a 100644
+index a6472e4..154926d 100644
--- a/include/deque
+++ b/include/deque
-@@ -249,7 +249,9 @@ class _LIBCPP_TEMPLATE_VIS deque;
+@@ -247,7 +247,9 @@ _LIBCPP_BEGIN_NAMESPACE_STD
template <class _ValueType, class _DiffType>
struct __deque_block_size {
@@ -13,7 +13,7 @@ index 85ea9c6..2c6773a 100644
};
template <class _ValueType,
-@@ -798,7 +800,7 @@ public:
+@@ -796,7 +798,7 @@ public:
#else
_NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || __is_nothrow_swappable<allocator_type>::value);
#endif
@@ -22,7 +22,7 @@ index 85ea9c6..2c6773a 100644
_LIBCPP_HIDE_FROM_ABI bool __invariants() const {
if (!__map_.__invariants())
-@@ -2494,7 +2496,7 @@ inline void deque<_Tp, _Allocator>::swap(deque& __c)
+@@ -2492,7 +2494,7 @@ inline void deque<_Tp, _Allocator>::swap(deque& __c)
}
template <class _Tp, class _Allocator>
diff --git a/contrib/libs/cxxsupp/libcxx/patches/41-exception.patch b/contrib/libs/cxxsupp/libcxx/patches/41-exception.patch
index adb9debf11..253914de18 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/41-exception.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/41-exception.patch
@@ -1,8 +1,8 @@
diff --git a/include/__exception/exception_ptr.h b/include/__exception/exception_ptr.h
-index 73834b6..e641928 100644
+index 868fd7c..bcc8768 100644
--- a/include/__exception/exception_ptr.h
+++ b/include/__exception/exception_ptr.h
-@@ -52,8 +52,6 @@ _LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception(
+@@ -56,8 +56,6 @@ _LIBCPP_OVERRIDABLE_FUNC_VIS __cxa_exception* __cxa_init_primary_exception(
namespace std { // purposefully not using versioning namespace
@@ -11,7 +11,7 @@ index 73834b6..e641928 100644
class _LIBCPP_EXPORTED_FROM_ABI exception_ptr {
void* __ptr_;
-@@ -80,10 +78,18 @@ public:
+@@ -84,10 +82,18 @@ public:
return !(__x == __y);
}
@@ -30,7 +30,7 @@ index 73834b6..e641928 100644
template <class _Ep>
_LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
# ifndef _LIBCPP_HAS_NO_EXCEPTIONS
-@@ -125,34 +131,7 @@ _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
+@@ -129,34 +135,7 @@ _LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
#else // _LIBCPP_ABI_MICROSOFT
@@ -66,7 +66,7 @@ index 73834b6..e641928 100644
// This is a built-in template function which automagically extracts the required
// information.
-@@ -160,7 +139,7 @@ template <class _E>
+@@ -164,7 +143,7 @@ template <class _E>
void* __GetExceptionInfo(_E);
template <class _Ep>
diff --git a/contrib/libs/cxxsupp/libcxx/patches/43-string.patch b/contrib/libs/cxxsupp/libcxx/patches/43-string.patch
index 2035bfab64..d07cab1c86 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/43-string.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/43-string.patch
@@ -1,5 +1,5 @@
diff --git a/include/string b/include/string
-index ca5b3fa..653aa6f 100644
+index a456f8c..804373b 100644
--- a/include/string
+++ b/include/string
@@ -83,6 +83,7 @@ template <> struct char_traits<char32_t>;
diff --git a/contrib/libs/cxxsupp/libcxx/patches/45-type-traits.patch b/contrib/libs/cxxsupp/libcxx/patches/45-type-traits.patch
index 8ae807e907..72fc90a682 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/45-type-traits.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/45-type-traits.patch
@@ -42,10 +42,10 @@ index 05e070a..7907c1f 100644
_LIBCPP_END_NAMESPACE_STD
diff --git a/include/__type_traits/is_nothrow_constructible.h b/include/__type_traits/is_nothrow_constructible.h
-index f56816b..8a87d19 100644
+index 2f7ed84..678debb 100644
--- a/include/__type_traits/is_nothrow_constructible.h
+++ b/include/__type_traits/is_nothrow_constructible.h
-@@ -23,7 +23,7 @@
+@@ -25,7 +25,7 @@
_LIBCPP_BEGIN_NAMESPACE_STD
// GCC is disabled due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106611
diff --git a/contrib/libs/cxxsupp/libcxx/patches/46-typeinfo-variant-valarray.patch b/contrib/libs/cxxsupp/libcxx/patches/46-typeinfo-variant-valarray.patch
index 9c9ba9afa3..3e1e4bb7f5 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/46-typeinfo-variant-valarray.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/46-typeinfo-variant-valarray.patch
@@ -1,8 +1,8 @@
diff --git a/include/typeinfo b/include/typeinfo
-index d4e5e4e..d39d8ab 100644
+index 3a1981a..bc8969a 100644
--- a/include/typeinfo
+++ b/include/typeinfo
-@@ -321,24 +321,40 @@ public:
+@@ -320,24 +320,40 @@ public:
class _LIBCPP_EXPORTED_FROM_ABI bad_cast : public exception {
public:
diff --git a/contrib/libs/cxxsupp/libcxx/patches/47-vector.patch b/contrib/libs/cxxsupp/libcxx/patches/47-vector.patch
index 8e589ccc0f..2ad873fe04 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/47-vector.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/47-vector.patch
@@ -1,11 +1,11 @@
diff --git a/include/vector b/include/vector
-index 89cbdf0..4a875b6 100644
+index 1defc43..8d5b846 100644
--- a/include/vector
+++ b/include/vector
-@@ -347,6 +347,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
+@@ -348,6 +348,7 @@ template<class T, class charT> requires is-vector-bool-reference<T> // Since C++
#include <__type_traits/is_allocator.h>
#include <__type_traits/is_constructible.h>
- #include <__type_traits/is_nothrow_move_assignable.h>
+ #include <__type_traits/is_nothrow_assignable.h>
+#include <__type_traits/is_trivially_destructible.h>
#include <__type_traits/noexcept_move_assign_container.h>
#include <__type_traits/type_identity.h>
diff --git a/contrib/libs/cxxsupp/libcxx/patches/49-string-view.patch b/contrib/libs/cxxsupp/libcxx/patches/49-string-view.patch
index c122effe72..ebb4fbabbc 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/49-string-view.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/49-string-view.patch
@@ -1,5 +1,5 @@
diff --git a/include/string_view b/include/string_view
-index e0dd5c5..2ddb931 100644
+index e8584a6..4df4f02 100644
--- a/include/string_view
+++ b/include/string_view
@@ -306,6 +306,8 @@ public:
@@ -11,7 +11,7 @@ index e0dd5c5..2ddb931 100644
_LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI basic_string_view(const _CharT* __s, size_type __len) _NOEXCEPT
: __data_(__s),
__size_(__len) {
-@@ -343,7 +345,7 @@ public:
+@@ -344,7 +346,7 @@ public:
_LIBCPP_CONSTEXPR _LIBCPP_HIDE_FROM_ABI basic_string_view(const _CharT* __s)
: __data_(__s), __size_(std::__char_traits_length_checked<_Traits>(__s)) {}
@@ -20,7 +20,7 @@ index e0dd5c5..2ddb931 100644
basic_string_view(nullptr_t) = delete;
#endif
-@@ -665,7 +667,7 @@ public:
+@@ -666,7 +668,7 @@ public:
}
#endif
diff --git a/contrib/libs/cxxsupp/libcxx/patches/60-chrono.patch b/contrib/libs/cxxsupp/libcxx/patches/60-chrono.patch
index f9336f7e1d..b959cf3b31 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/60-chrono.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/60-chrono.patch
@@ -1,5 +1,5 @@
diff --git a/include/chrono b/include/chrono
-index b3b260c..e158436 100644
+index 5bab3f8..956badd 100644
--- a/include/chrono
+++ b/include/chrono
@@ -853,7 +853,7 @@ constexpr chrono::year operator ""y(unsigned lo
diff --git a/contrib/libs/cxxsupp/libcxx/patches/65-string-iterator-pointer.patch b/contrib/libs/cxxsupp/libcxx/patches/65-string-iterator-pointer.patch
index 8afcfd1880..c132c52847 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/65-string-iterator-pointer.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/65-string-iterator-pointer.patch
@@ -1,5 +1,5 @@
diff --git a/include/string b/include/string
-index 653aa6f..c7f7bcb 100644
+index 804373b..6465702 100644
--- a/include/string
+++ b/include/string
@@ -753,9 +753,14 @@ public:
diff --git a/contrib/libs/cxxsupp/libcxx/patches/66-vector-iterator-pointer.patch b/contrib/libs/cxxsupp/libcxx/patches/66-vector-iterator-pointer.patch
index 93b767c6be..bbd2b71e10 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/66-vector-iterator-pointer.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/66-vector-iterator-pointer.patch
@@ -1,5 +1,5 @@
diff --git a/include/vector b/include/vector
-index 4a875b6..3aeb250 100644
+index 8d5b846..b989a3c 100644
--- a/include/vector
+++ b/include/vector
@@ -401,9 +401,14 @@ public:
diff --git a/contrib/libs/cxxsupp/libcxx/patches/68-asan-contiguous-container.patch b/contrib/libs/cxxsupp/libcxx/patches/68-asan-contiguous-container.patch
index 7895c16330..cabdbe8366 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/68-asan-contiguous-container.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/68-asan-contiguous-container.patch
@@ -1,8 +1,8 @@
diff --git a/include/__config b/include/__config
-index 5eeb235..255b858 100644
+index a7d7799..e78d8e9 100644
--- a/include/__config
+++ b/include/__config
-@@ -1035,10 +1035,12 @@ typedef __char32_t char32_t;
+@@ -1091,10 +1091,12 @@ typedef __char32_t char32_t;
# ifndef _LIBCPP_HAS_NO_ASAN
extern "C" _LIBCPP_EXPORTED_FROM_ABI void
__sanitizer_annotate_contiguous_container(const void*, const void*, const void*, const void*);
@@ -16,10 +16,10 @@ index 5eeb235..255b858 100644
// Try to find out if RTTI is disabled.
diff --git a/include/deque b/include/deque
-index 2c6773a..26bacb7 100644
+index 154926d..9559235 100644
--- a/include/deque
+++ b/include/deque
-@@ -888,7 +888,7 @@ private:
+@@ -886,7 +886,7 @@ private:
(void)__old_con_end;
(void)__new_con_beg;
(void)__new_con_end;
@@ -28,7 +28,7 @@ index 2c6773a..26bacb7 100644
if (__beg != nullptr && __asan_annotate_container_with_allocator<_Allocator>::value)
__sanitizer_annotate_double_ended_contiguous_container(
__beg, __end, __old_con_beg, __old_con_end, __new_con_beg, __new_con_end);
-@@ -1079,7 +1079,7 @@ private:
+@@ -1077,7 +1077,7 @@ private:
}
#endif
}
@@ -38,7 +38,7 @@ index 2c6773a..26bacb7 100644
public:
_LIBCPP_HIDE_FROM_ABI bool __verify_asan_annotations() const _NOEXCEPT {
diff --git a/include/vector b/include/vector
-index 3aeb250..cc80875 100644
+index b989a3c..61e3263 100644
--- a/include/vector
+++ b/include/vector
@@ -848,7 +848,7 @@ private:
diff --git a/contrib/libs/cxxsupp/libcxx/patches/71-char-traits-deprecated.patch b/contrib/libs/cxxsupp/libcxx/patches/71-char-traits-deprecated.patch
index 1cb832634f..294adcf5a9 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/71-char-traits-deprecated.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/71-char-traits-deprecated.patch
@@ -1,8 +1,8 @@
diff --git a/include/__string/char_traits.h b/include/__string/char_traits.h
-index 5880d3a..91b413a 100644
+index 47ed105..249057c 100644
--- a/include/__string/char_traits.h
+++ b/include/__string/char_traits.h
-@@ -73,6 +73,106 @@ exposition-only to document what members a char_traits specialization should pro
+@@ -72,6 +72,106 @@ exposition-only to document what members a char_traits specialization should pro
};
*/
diff --git a/contrib/libs/cxxsupp/libcxx/patches/72-abi-has-no-init_primary_exception.patch b/contrib/libs/cxxsupp/libcxx/patches/72-abi-has-no-init_primary_exception.patch
index 9564e46456..8a1d6c9f8b 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/72-abi-has-no-init_primary_exception.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/72-abi-has-no-init_primary_exception.patch
@@ -1,8 +1,8 @@
diff --git a/include/__exception/exception_ptr.h b/include/__exception/exception_ptr.h
-index e641928..08e3496 100644
+index bcc8768..f0f2f12 100644
--- a/include/__exception/exception_ptr.h
+++ b/include/__exception/exception_ptr.h
-@@ -93,7 +93,7 @@ public:
+@@ -97,7 +97,7 @@ public:
template <class _Ep>
_LIBCPP_HIDE_FROM_ABI exception_ptr make_exception_ptr(_Ep __e) _NOEXCEPT {
# ifndef _LIBCPP_HAS_NO_EXCEPTIONS
diff --git a/contrib/libs/cxxsupp/libcxx/patches/73-deque-disable-harderning.patch b/contrib/libs/cxxsupp/libcxx/patches/73-deque-disable-harderning.patch
index b7ae8d1acf..99a0a7d17b 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/73-deque-disable-harderning.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/73-deque-disable-harderning.patch
@@ -1,8 +1,8 @@
diff --git a/include/deque b/include/deque
-index 26bacb7..d4238a4 100644
+index 9559235..c830b6d 100644
--- a/include/deque
+++ b/include/deque
-@@ -2431,7 +2431,8 @@ typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::erase(const_it
+@@ -2429,7 +2429,8 @@ typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::erase(const_it
template <class _Tp, class _Allocator>
typename deque<_Tp, _Allocator>::iterator deque<_Tp, _Allocator>::erase(const_iterator __f, const_iterator __l) {
diff --git a/contrib/libs/cxxsupp/libcxx/patches/74-no-builtin_remove_reference_clang14.patch b/contrib/libs/cxxsupp/libcxx/patches/74-no-builtin_remove_reference_clang14.patch
new file mode 100644
index 0000000000..1299c98990
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/patches/74-no-builtin_remove_reference_clang14.patch
@@ -0,0 +1,19 @@
+diff --git a/include/__type_traits/remove_reference.h b/include/__type_traits/remove_reference.h
+index ba67891..ef11b16 100644
+--- a/include/__type_traits/remove_reference.h
++++ b/include/__type_traits/remove_reference.h
+@@ -34,7 +34,13 @@ struct remove_reference {
+ template <class _Tp>
+ using __libcpp_remove_reference_t = typename remove_reference<_Tp>::type;
+ #else
+-# error "remove_reference not implemented!"
++// clang-format off
++template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference {typedef _LIBCPP_NODEBUG _Tp type;};
++template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&> {typedef _LIBCPP_NODEBUG _Tp type;};
++template <class _Tp> struct _LIBCPP_TEMPLATE_VIS remove_reference<_Tp&&> {typedef _LIBCPP_NODEBUG _Tp type;};
++// clang-format on
++template <class _Tp>
++using __libcpp_remove_reference_t = typename remove_reference<_Tp>::type;
+ #endif // __has_builtin(__remove_reference_t)
+
+ #if _LIBCPP_STD_VER >= 14
diff --git a/contrib/libs/cxxsupp/libcxx/patches/75-allocator-removed-members.patch b/contrib/libs/cxxsupp/libcxx/patches/75-allocator-removed-members.patch
new file mode 100644
index 0000000000..abfa0cc987
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/patches/75-allocator-removed-members.patch
@@ -0,0 +1,46 @@
+diff --git a/include/__memory/allocator.h b/include/__memory/allocator.h
+index 26e5d49..b63a809 100644
+--- a/include/__memory/allocator.h
++++ b/include/__memory/allocator.h
+@@ -31,12 +31,12 @@ _LIBCPP_BEGIN_NAMESPACE_STD
+ template <class _Tp>
+ class allocator;
+
+-#if _LIBCPP_STD_VER <= 17
++#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_VOID_SPECIALIZATION)
+ // These specializations shouldn't be marked _LIBCPP_DEPRECATED_IN_CXX17.
+ // Specializing allocator<void> is deprecated, but not using it.
+ template <>
+ class _LIBCPP_TEMPLATE_VIS allocator<void> {
+-# if _LIBCPP_STD_VER <= 17
++# if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS)
+
+ public:
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef void* pointer;
+@@ -52,7 +52,7 @@ public:
+
+ template <>
+ class _LIBCPP_TEMPLATE_VIS allocator<const void> {
+-# if _LIBCPP_STD_VER <= 17
++# if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS)
+
+ public:
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef const void* pointer;
+@@ -135,7 +135,7 @@ public:
+ }
+
+ // C++20 Removed members
+-#if _LIBCPP_STD_VER <= 17
++#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS)
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp* pointer;
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef const _Tp* const_pointer;
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef _Tp& reference;
+@@ -215,7 +215,7 @@ public:
+ }
+
+ // C++20 Removed members
+-#if _LIBCPP_STD_VER <= 17
++#if _LIBCPP_STD_VER <= 17 || defined(_LIBCPP_ENABLE_CXX20_REMOVED_ALLOCATOR_MEMBERS)
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef const _Tp* pointer;
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef const _Tp* const_pointer;
+ _LIBCPP_DEPRECATED_IN_CXX17 typedef const _Tp& reference;
diff --git a/contrib/libs/cxxsupp/libcxx/patches/77-__builtin_convertvector-win-clang18.patch b/contrib/libs/cxxsupp/libcxx/patches/77-__builtin_convertvector-win-clang18.patch
new file mode 100644
index 0000000000..f18d439fd2
--- /dev/null
+++ b/contrib/libs/cxxsupp/libcxx/patches/77-__builtin_convertvector-win-clang18.patch
@@ -0,0 +1,13 @@
+diff --git a/include/__algorithm/simd_utils.h b/include/__algorithm/simd_utils.h
+index c2fc02e..3548c00 100644
+--- a/include/__algorithm/simd_utils.h
++++ b/include/__algorithm/simd_utils.h
+@@ -27,7 +27,7 @@ _LIBCPP_PUSH_MACROS
+ #include <__undef_macros>
+
+ // TODO: Find out how altivec changes things and allow vectorizations there too.
+-#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1700 && !defined(__ALTIVEC__) && !defined(__CUDACC__)
++#if _LIBCPP_STD_VER >= 14 && defined(_LIBCPP_CLANG_VER) && _LIBCPP_CLANG_VER >= 1700 && !defined(__ALTIVEC__) && !defined(__CUDACC__) && !(defined(_MSC_VER) && _LIBCPP_CLANG_VER <= 1801)
+ # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 1
+ #else
+ # define _LIBCPP_HAS_ALGORITHM_VECTOR_UTILS 0
diff --git a/contrib/libs/cxxsupp/libcxx/patches/xxx-config-epilogue.patch b/contrib/libs/cxxsupp/libcxx/patches/xxx-config-epilogue.patch
index 1eb8694739..e959bd323f 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/xxx-config-epilogue.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/xxx-config-epilogue.patch
@@ -1,8 +1,8 @@
diff --git a/include/__config b/include/__config
-index 255b858..4e6feac 100644
+index e78d8e9..9505d9b 100644
--- a/include/__config
+++ b/include/__config
-@@ -1541,4 +1541,6 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
+@@ -1578,4 +1578,6 @@ __sanitizer_verify_double_ended_contiguous_container(const void*, const void*, c
#endif // __cplusplus
diff --git a/contrib/libs/cxxsupp/libcxx/patches/yyy-enable-std-expected.patch b/contrib/libs/cxxsupp/libcxx/patches/yyy-enable-std-expected.patch
index 4e0b9689a3..7f59d1e737 100644
--- a/contrib/libs/cxxsupp/libcxx/patches/yyy-enable-std-expected.patch
+++ b/contrib/libs/cxxsupp/libcxx/patches/yyy-enable-std-expected.patch
@@ -12,10 +12,10 @@ index 27f01d9..174f97f 100644
_LIBCPP_BEGIN_NAMESPACE_STD
diff --git a/include/__expected/expected.h b/include/__expected/expected.h
-index 443d925..bfa3d25 100644
+index d7adaac..21b610b 100644
--- a/include/__expected/expected.h
+++ b/include/__expected/expected.h
-@@ -62,7 +62,7 @@
+@@ -52,7 +52,7 @@
_LIBCPP_PUSH_MACROS
#include <__undef_macros>
diff --git a/contrib/libs/cxxsupp/libcxx/src/include/tzdb/tzdb_list_private.h b/contrib/libs/cxxsupp/libcxx/src/include/tzdb/tzdb_list_private.h
index f43d7d8ea7..969b2b9f8a 100644
--- a/contrib/libs/cxxsupp/libcxx/src/include/tzdb/tzdb_list_private.h
+++ b/contrib/libs/cxxsupp/libcxx/src/include/tzdb/tzdb_list_private.h
@@ -54,14 +54,14 @@ public:
using const_iterator = tzdb_list::const_iterator;
- const tzdb& front() const noexcept {
+ const tzdb& __front() const noexcept {
#ifndef _LIBCPP_HAS_NO_THREADS
shared_lock __lock{__mutex_};
#endif
return __tzdb_.front();
}
- const_iterator erase_after(const_iterator __p) {
+ const_iterator __erase_after(const_iterator __p) {
#ifndef _LIBCPP_HAS_NO_THREADS
unique_lock __lock{__mutex_};
#endif
@@ -70,20 +70,17 @@ public:
return __tzdb_.erase_after(__p);
}
- const_iterator begin() const noexcept {
+ const_iterator __begin() const noexcept {
#ifndef _LIBCPP_HAS_NO_THREADS
shared_lock __lock{__mutex_};
#endif
return __tzdb_.begin();
}
- const_iterator end() const noexcept {
+ const_iterator __end() const noexcept {
// forward_list<T>::end does not access the list, so no need to take a lock.
return __tzdb_.end();
}
- const_iterator cbegin() const noexcept { return begin(); }
- const_iterator cend() const noexcept { return end(); }
-
private:
// Loads the tzdbs
// pre: The caller ensures the locking, if needed, is done.
diff --git a/contrib/libs/cxxsupp/libcxx/src/ios.cpp b/contrib/libs/cxxsupp/libcxx/src/ios.cpp
index d58827fa12..a727855c46 100644
--- a/contrib/libs/cxxsupp/libcxx/src/ios.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/ios.cpp
@@ -195,6 +195,10 @@ void ios_base::register_callback(event_callback fn, int index) {
}
ios_base::~ios_base() {
+ // Avoid UB when not properly initialized. See ios_base::ios_base for
+ // more information.
+ if (!__loc_)
+ return;
__call_callbacks(erase_event);
locale& loc_storage = *reinterpret_cast<locale*>(&__loc_);
loc_storage.~locale();
diff --git a/contrib/libs/cxxsupp/libcxx/src/random.cpp b/contrib/libs/cxxsupp/libcxx/src/random.cpp
index c7073c54da..93590af310 100644
--- a/contrib/libs/cxxsupp/libcxx/src/random.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/random.cpp
@@ -79,8 +79,10 @@ unsigned random_device::operator()() {
char* p = reinterpret_cast<char*>(&r);
while (n > 0) {
ssize_t s = read(__f_, p, n);
+ _LIBCPP_SUPPRESS_DEPRECATED_PUSH
if (s == 0)
- __throw_system_error(ENODATA, "random_device got EOF");
+ __throw_system_error(ENODATA, "random_device got EOF"); // TODO ENODATA -> ENOMSG
+ _LIBCPP_SUPPRESS_DEPRECATED_POP
if (s == -1) {
if (errno != EINTR)
__throw_system_error(errno, "random_device got an unexpected error");
diff --git a/contrib/libs/cxxsupp/libcxx/src/tzdb.cpp b/contrib/libs/cxxsupp/libcxx/src/tzdb.cpp
index 2bb801e486..0307f754ca 100644
--- a/contrib/libs/cxxsupp/libcxx/src/tzdb.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/tzdb.cpp
@@ -511,14 +511,33 @@ static string __parse_version(istream& __input) {
return chrono::__parse_string(__input);
}
+[[nodiscard]]
+static __tz::__rule& __create_entry(__tz::__rules_storage_type& __rules, const string& __name) {
+ auto __result = [&]() -> __tz::__rule& {
+ auto& __rule = __rules.emplace_back(__name, vector<__tz::__rule>{});
+ return __rule.second.emplace_back();
+ };
+
+ if (__rules.empty())
+ return __result();
+
+ // Typically rules are in contiguous order in the database.
+ // But there are exceptions, some rules are interleaved.
+ if (__rules.back().first == __name)
+ return __rules.back().second.emplace_back();
+
+ if (auto __it = ranges::find(__rules, __name, [](const auto& __r) { return __r.first; });
+ __it != ranges::end(__rules))
+ return __it->second.emplace_back();
+
+ return __result();
+}
+
static void __parse_rule(tzdb& __tzdb, __tz::__rules_storage_type& __rules, istream& __input) {
chrono::__skip_mandatory_whitespace(__input);
string __name = chrono::__parse_string(__input);
- if (__rules.empty() || __rules.back().first != __name)
- __rules.emplace_back(__name, vector<__tz::__rule>{});
-
- __tz::__rule& __rule = __rules.back().second.emplace_back();
+ __tz::__rule& __rule = __create_entry(__rules, __name);
chrono::__skip_mandatory_whitespace(__input);
__rule.__from = chrono::__parse_year(__input);
diff --git a/contrib/libs/cxxsupp/libcxx/src/tzdb_list.cpp b/contrib/libs/cxxsupp/libcxx/src/tzdb_list.cpp
index d3ee8b58f9..b99c30a9b9 100644
--- a/contrib/libs/cxxsupp/libcxx/src/tzdb_list.cpp
+++ b/contrib/libs/cxxsupp/libcxx/src/tzdb_list.cpp
@@ -18,26 +18,24 @@ namespace chrono {
_LIBCPP_EXPORTED_FROM_ABI tzdb_list::~tzdb_list() { delete __impl_; }
-_LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI const tzdb& tzdb_list::front() const noexcept {
- return __impl_->front();
-}
+[[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI const tzdb& tzdb_list::__front() const noexcept { return __impl_->__front(); }
-_LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::erase_after(const_iterator __p) {
- return __impl_->erase_after(__p);
+_LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::__erase_after(const_iterator __p) {
+ return __impl_->__erase_after(__p);
}
-_LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::begin() const noexcept {
- return __impl_->begin();
+[[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::__begin() const noexcept {
+ return __impl_->__begin();
}
-_LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::end() const noexcept {
- return __impl_->end();
+[[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::__end() const noexcept {
+ return __impl_->__end();
}
-_LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::cbegin() const noexcept {
- return __impl_->cbegin();
+[[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::__cbegin() const noexcept {
+ return __impl_->__begin();
}
-_LIBCPP_NODISCARD_EXT _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::cend() const noexcept {
- return __impl_->cend();
+[[nodiscard]] _LIBCPP_EXPORTED_FROM_ABI tzdb_list::const_iterator tzdb_list::__cend() const noexcept {
+ return __impl_->__end();
}
} // namespace chrono
diff --git a/contrib/libs/cxxsupp/libcxx/ya.make b/contrib/libs/cxxsupp/libcxx/ya.make
index 4975b1573f..7f7045a21e 100644
--- a/contrib/libs/cxxsupp/libcxx/ya.make
+++ b/contrib/libs/cxxsupp/libcxx/ya.make
@@ -14,9 +14,9 @@ LICENSE(
LICENSE_TEXTS(.yandex_meta/licenses.list.txt)
-VERSION(2024-03-05)
+VERSION(2024-04-02)
-ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/80f9458cf30d13eef21b09042ea590945c5e64db.tar.gz)
+ORIGINAL_SOURCE(https://github.com/llvm/llvm-project/archive/239236b8c2154aa49e98bc7ed774a7d2712edf50.tar.gz)
ADDINCL(
GLOBAL contrib/libs/cxxsupp/libcxx/include