@zigc/lib 0.17.0-dev.27 → 0.17.0-dev.292

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1102) hide show
  1. package/c/fcntl.zig +6 -1
  2. package/c/inttypes.zig +0 -10
  3. package/c/math.zig +52 -112
  4. package/c/pthread.zig +57 -0
  5. package/c/search.zig +1 -27
  6. package/c/stdlib/drand48.zig +0 -57
  7. package/c/stdlib.zig +31 -121
  8. package/c/string.zig +20 -7
  9. package/c/strings.zig +0 -38
  10. package/c/unistd.zig +27 -26
  11. package/c/wchar.zig +10 -0
  12. package/c.zig +2 -2
  13. package/compiler/aro/aro/CodeGen.zig +7 -8
  14. package/compiler/aro/aro/Compilation.zig +17 -17
  15. package/compiler/aro/aro/Driver.zig +14 -13
  16. package/compiler/aro/aro/Parser.zig +20 -15
  17. package/compiler/aro/aro/Pragma.zig +3 -2
  18. package/compiler/aro/aro/Preprocessor.zig +9 -6
  19. package/compiler/aro/aro/pragmas/message.zig +3 -2
  20. package/compiler/aro/aro/text_literal.zig +3 -2
  21. package/compiler/aro/assembly_backend/x86_64.zig +4 -4
  22. package/compiler/build_runner.zig +2 -4
  23. package/compiler/reduce/Walk.zig +8 -13
  24. package/compiler/resinator/compile.zig +1 -1
  25. package/compiler/resinator/cvtres.zig +4 -4
  26. package/compiler/resinator/errors.zig +7 -7
  27. package/compiler/resinator/ico.zig +4 -4
  28. package/compiler/resinator/parse.zig +2 -2
  29. package/compiler/resinator/res.zig +1 -1
  30. package/compiler/std-docs.zig +1 -1
  31. package/compiler/test_runner.zig +1 -1
  32. package/compiler/translate-c/MacroTranslator.zig +1 -1
  33. package/compiler/translate-c/Translator.zig +6 -2
  34. package/compiler/translate-c/ast.zig +16 -23
  35. package/compiler/translate-c/main.zig +1 -1
  36. package/compiler_rt/addf3.zig +1 -1
  37. package/compiler_rt/arm.zig +3 -3
  38. package/compiler_rt/atomics.zig +1 -1
  39. package/compiler_rt/comparef.zig +3 -3
  40. package/compiler_rt/cos.zig +1 -3
  41. package/compiler_rt/count0bits.zig +1 -1
  42. package/compiler_rt/divdf3.zig +2 -2
  43. package/compiler_rt/divsf3.zig +1 -1
  44. package/compiler_rt/divtf3.zig +1 -1
  45. package/compiler_rt/divxf3.zig +1 -1
  46. package/compiler_rt/exp.zig +0 -2
  47. package/compiler_rt/exp2.zig +0 -2
  48. package/compiler_rt/extendf.zig +5 -5
  49. package/compiler_rt/fabs.zig +1 -3
  50. package/compiler_rt/float_from_int.zig +3 -4
  51. package/compiler_rt/fma.zig +0 -2
  52. package/compiler_rt/fmax.zig +1 -3
  53. package/compiler_rt/fmin.zig +1 -3
  54. package/compiler_rt/fmod.zig +2 -4
  55. package/compiler_rt/limb64.zig +3 -2
  56. package/compiler_rt/log.zig +0 -2
  57. package/compiler_rt/log10.zig +0 -2
  58. package/compiler_rt/log2.zig +0 -2
  59. package/compiler_rt/mulf3.zig +2 -2
  60. package/compiler_rt/rem_pio2l.zig +1 -1
  61. package/compiler_rt/round.zig +0 -2
  62. package/compiler_rt/sin.zig +1 -3
  63. package/compiler_rt/sincos.zig +1 -3
  64. package/compiler_rt/sqrt.zig +0 -2
  65. package/compiler_rt/ssp.zig +2 -2
  66. package/compiler_rt/tan.zig +1 -3
  67. package/compiler_rt/trunc.zig +0 -2
  68. package/compiler_rt/truncf.zig +3 -3
  69. package/compiler_rt/trunctfhf2.zig +3 -0
  70. package/compiler_rt.zig +5 -26
  71. package/docs/wasm/Walk.zig +1 -3
  72. package/docs/wasm/html_render.zig +1 -2
  73. package/docs/wasm/markdown/Parser.zig +16 -20
  74. package/fuzzer.zig +2 -0
  75. package/include/__clang_spirv_builtins.h +12 -12
  76. package/include/__float_float.h +176 -0
  77. package/include/__float_header_macro.h +12 -0
  78. package/include/__float_infinity_nan.h +20 -0
  79. package/include/amo.h +131 -0
  80. package/include/amxavx512intrin.h +215 -1
  81. package/include/amxintrin.h +0 -2
  82. package/include/arm_acle.h +37 -27
  83. package/include/arm_neon.h +218 -82
  84. package/include/arm_sme.h +8 -8
  85. package/include/arm_sve.h +4162 -3782
  86. package/include/avx10_2_512bf16intrin.h +19 -12
  87. package/include/avx10_2_512convertintrin.h +1 -1
  88. package/include/avx10_2_512niintrin.h +31 -31
  89. package/include/avx10_2_512satcvtdsintrin.h +1 -1
  90. package/include/avx10_2bf16intrin.h +54 -45
  91. package/include/avx10_2convertintrin.h +2 -2
  92. package/include/avx10_2copyintrin.h +1 -1
  93. package/include/avx10_2niintrin.h +14 -14
  94. package/include/avx10_2satcvtdsintrin.h +2 -2
  95. package/include/avx2intrin.h +275 -377
  96. package/include/avx512bf16intrin.h +25 -16
  97. package/include/avx512bitalgintrin.h +19 -30
  98. package/include/avx512bwintrin.h +386 -505
  99. package/include/avx512cdintrin.h +42 -55
  100. package/include/avx512dqintrin.h +132 -161
  101. package/include/avx512fintrin.h +1015 -1424
  102. package/include/avx512fp16intrin.h +112 -110
  103. package/include/avx512ifmaintrin.h +32 -34
  104. package/include/avx512ifmavlintrin.h +73 -46
  105. package/include/avx512vbmi2intrin.h +43 -32
  106. package/include/avx512vbmiintrin.h +19 -27
  107. package/include/avx512vbmivlintrin.h +35 -49
  108. package/include/avx512vlbf16intrin.h +32 -22
  109. package/include/avx512vlbitalgintrin.h +37 -53
  110. package/include/avx512vlbwintrin.h +470 -573
  111. package/include/avx512vlcdintrin.h +74 -102
  112. package/include/avx512vldqintrin.h +110 -127
  113. package/include/avx512vlfp16intrin.h +130 -111
  114. package/include/avx512vlintrin.h +945 -1299
  115. package/include/avx512vlvbmi2intrin.h +78 -63
  116. package/include/avx512vlvnniintrin.h +21 -18
  117. package/include/avx512vlvp2intersectintrin.h +2 -2
  118. package/include/avx512vnniintrin.h +10 -10
  119. package/include/avx512vp2intersectintrin.h +1 -2
  120. package/include/avx512vpopcntdqintrin.h +8 -10
  121. package/include/avx512vpopcntdqvlintrin.h +17 -15
  122. package/include/avxifmaintrin.h +16 -0
  123. package/include/avxintrin.h +165 -241
  124. package/include/avxvnniint16intrin.h +118 -99
  125. package/include/avxvnniint8intrin.h +56 -32
  126. package/include/avxvnniintrin.h +16 -8
  127. package/include/cpuid.h +101 -4
  128. package/include/emmintrin.h +168 -168
  129. package/include/f16cintrin.h +23 -9
  130. package/include/float.h +16 -155
  131. package/include/fma4intrin.h +98 -96
  132. package/include/fmaintrin.h +96 -66
  133. package/include/gfniintrin.h +21 -16
  134. package/include/hexagon_types.h +23 -20
  135. package/include/hvx_hexagon_protos.h +649 -860
  136. package/include/immintrin.h +0 -12
  137. package/include/intrin.h +4 -0
  138. package/include/lasxintrin.h +113 -0
  139. package/include/llvm_libc_wrappers/assert.h +3 -5
  140. package/include/llvm_libc_wrappers/ctype.h +3 -115
  141. package/include/llvm_libc_wrappers/inttypes.h +3 -5
  142. package/include/llvm_libc_wrappers/stdio.h +10 -38
  143. package/include/llvm_libc_wrappers/stdlib.h +3 -24
  144. package/include/llvm_libc_wrappers/string.h +2 -70
  145. package/include/llvm_libc_wrappers/time.h +4 -10
  146. package/include/mmintrin.h +188 -257
  147. package/include/module.modulemap +23 -4
  148. package/include/movrs_avx10_2_512intrin.h +2 -2
  149. package/include/movrs_avx10_2intrin.h +4 -4
  150. package/include/pmmintrin.h +12 -24
  151. package/include/ptrauth.h +16 -2
  152. package/include/riscv_mips.h +34 -0
  153. package/include/riscv_nds.h +89 -0
  154. package/include/sifive_vector.h +58 -2
  155. package/include/sm4evexintrin.h +2 -2
  156. package/include/smmintrin.h +77 -59
  157. package/include/spirvintrin.h +194 -0
  158. package/include/stddefer.h +19 -0
  159. package/include/tmmintrin.h +116 -147
  160. package/include/vaesintrin.h +1 -2
  161. package/include/xmmintrin.h +44 -70
  162. package/include/xopintrin.h +20 -10
  163. package/libc/include/aarch64-linux-any/asm/hwcap.h +1 -0
  164. package/libc/include/aarch64-linux-any/asm/unistd_64.h +1 -0
  165. package/libc/include/any-linux-any/asm-generic/errno.h +2 -0
  166. package/libc/include/any-linux-any/asm-generic/unistd.h +4 -1
  167. package/libc/include/any-linux-any/drm/amdgpu_drm.h +20 -6
  168. package/libc/include/any-linux-any/drm/amdxdna_accel.h +8 -0
  169. package/libc/include/any-linux-any/drm/drm_fourcc.h +6 -6
  170. package/libc/include/any-linux-any/drm/panfrost_drm.h +75 -1
  171. package/libc/include/any-linux-any/drm/panthor_drm.h +154 -3
  172. package/libc/include/any-linux-any/drm/rocket_accel.h +74 -24
  173. package/libc/include/any-linux-any/drm/xe_drm.h +89 -6
  174. package/libc/include/any-linux-any/linux/android/binder.h +1 -1
  175. package/libc/include/any-linux-any/linux/bpf.h +28 -0
  176. package/libc/include/any-linux-any/linux/btrfs.h +1 -0
  177. package/libc/include/any-linux-any/linux/btrfs_tree.h +32 -2
  178. package/libc/include/any-linux-any/linux/dma-buf.h +1 -0
  179. package/libc/include/any-linux-any/linux/dpll.h +1 -0
  180. package/libc/include/any-linux-any/linux/elf.h +2 -0
  181. package/libc/include/any-linux-any/linux/ethtool.h +21 -5
  182. package/libc/include/any-linux-any/linux/fs.h +1 -0
  183. package/libc/include/any-linux-any/linux/hyperv.h +1 -1
  184. package/libc/include/any-linux-any/linux/idxd.h +134 -134
  185. package/libc/include/any-linux-any/linux/if_alg.h +1 -1
  186. package/libc/include/any-linux-any/linux/if_link.h +1 -0
  187. package/libc/include/any-linux-any/linux/input-event-codes.h +4 -0
  188. package/libc/include/any-linux-any/linux/io_uring/bpf_filter.h +68 -0
  189. package/libc/include/any-linux-any/linux/io_uring/query.h +5 -1
  190. package/libc/include/any-linux-any/linux/io_uring.h +33 -2
  191. package/libc/include/any-linux-any/linux/iommufd.h +39 -0
  192. package/libc/include/any-linux-any/linux/kfd_ioctl.h +13 -3
  193. package/libc/include/any-linux-any/linux/kfd_sysfs.h +2 -1
  194. package/libc/include/any-linux-any/linux/kvm.h +30 -6
  195. package/libc/include/any-linux-any/linux/landlock.h +22 -8
  196. package/libc/include/any-linux-any/linux/magic.h +1 -0
  197. package/libc/include/any-linux-any/linux/mempolicy.h +3 -0
  198. package/libc/include/any-linux-any/linux/mount.h +11 -2
  199. package/libc/include/any-linux-any/linux/mptcp_pm.h +1 -1
  200. package/libc/include/any-linux-any/linux/mshv.h +2 -0
  201. package/libc/include/any-linux-any/linux/netfilter_bridge.h +5 -4
  202. package/libc/include/any-linux-any/linux/netfilter_ipv4.h +4 -5
  203. package/libc/include/any-linux-any/linux/netfilter_ipv6.h +3 -4
  204. package/libc/include/any-linux-any/linux/nfs.h +1 -1
  205. package/libc/include/any-linux-any/linux/nfsd_netlink.h +1 -0
  206. package/libc/include/any-linux-any/linux/nilfs2_api.h +2 -2
  207. package/libc/include/any-linux-any/linux/nilfs2_ondisk.h +97 -66
  208. package/libc/include/any-linux-any/linux/nl80211.h +104 -3
  209. package/libc/include/any-linux-any/linux/pci.h +7 -0
  210. package/libc/include/any-linux-any/linux/pci_regs.h +65 -6
  211. package/libc/include/any-linux-any/linux/pcitest.h +1 -0
  212. package/libc/include/any-linux-any/linux/perf_event.h +24 -3
  213. package/libc/include/any-linux-any/linux/pkt_sched.h +1 -0
  214. package/libc/include/any-linux-any/linux/prctl.h +30 -0
  215. package/libc/include/any-linux-any/linux/rseq.h +62 -5
  216. package/libc/include/any-linux-any/linux/shm.h +0 -1
  217. package/libc/include/any-linux-any/linux/stddef.h +4 -0
  218. package/libc/include/any-linux-any/linux/sysctl.h +1 -2
  219. package/libc/include/any-linux-any/linux/taskstats.h +12 -1
  220. package/libc/include/any-linux-any/linux/tcp.h +23 -3
  221. package/libc/include/any-linux-any/linux/typelimits.h +8 -0
  222. package/libc/include/any-linux-any/linux/ublk_cmd.h +120 -1
  223. package/libc/include/any-linux-any/linux/v4l2-controls.h +63 -0
  224. package/libc/include/any-linux-any/linux/vbox_vmmdev_types.h +2 -2
  225. package/libc/include/any-linux-any/linux/vduse.h +80 -5
  226. package/libc/include/any-linux-any/linux/version.h +3 -3
  227. package/libc/include/any-linux-any/linux/vfio.h +4 -0
  228. package/libc/include/any-linux-any/linux/videodev2.h +3 -0
  229. package/libc/include/any-linux-any/linux/virtio_ring.h +1 -2
  230. package/libc/include/any-linux-any/linux/vmclock-abi.h +20 -0
  231. package/libc/include/any-linux-any/rdma/bnxt_re-abi.h +16 -0
  232. package/libc/include/any-linux-any/rdma/ib_user_ioctl_cmds.h +16 -0
  233. package/libc/include/any-linux-any/rdma/mana-abi.h +3 -0
  234. package/libc/include/any-linux-any/scsi/scsi_bsg_ufs.h +8 -9
  235. package/libc/include/any-linux-any/sound/sof/tokens.h +6 -0
  236. package/libc/include/arc-linux-any/asm/swab.h +0 -63
  237. package/libc/include/arc-linux-any/asm/unistd_32.h +1 -0
  238. package/libc/include/arm-linux-any/asm/ptrace.h +0 -9
  239. package/libc/include/arm-linux-any/asm/unistd-eabi.h +1 -0
  240. package/libc/include/arm-linux-any/asm/unistd-oabi.h +1 -0
  241. package/libc/include/csky-linux-any/asm/unistd_32.h +1 -0
  242. package/libc/include/hexagon-linux-any/asm/unistd_32.h +1 -0
  243. package/libc/include/loongarch-linux-any/asm/hwcap.h +1 -0
  244. package/libc/include/loongarch-linux-any/asm/kvm.h +1 -0
  245. package/libc/include/loongarch-linux-any/asm/kvm_para.h +1 -0
  246. package/libc/include/loongarch-linux-any/asm/unistd_32.h +2 -0
  247. package/libc/include/loongarch-linux-any/asm/unistd_64.h +2 -0
  248. package/libc/include/m68k-linux-any/asm/unistd_32.h +1 -0
  249. package/libc/include/mips-linux-any/asm/errno.h +2 -0
  250. package/libc/include/mips-linux-any/asm/unistd_n32.h +1 -0
  251. package/libc/include/mips-linux-any/asm/unistd_n64.h +1 -0
  252. package/libc/include/mips-linux-any/asm/unistd_o32.h +1 -0
  253. package/libc/include/powerpc-linux-any/asm/unistd_32.h +1 -0
  254. package/libc/include/powerpc-linux-any/asm/unistd_64.h +1 -0
  255. package/libc/include/riscv-linux-any/asm/hwprobe.h +4 -0
  256. package/libc/include/riscv-linux-any/asm/kvm.h +3 -0
  257. package/libc/include/riscv-linux-any/asm/ptrace.h +37 -0
  258. package/libc/include/riscv-linux-any/asm/sigcontext.h +1 -0
  259. package/libc/include/riscv-linux-any/asm/unistd_32.h +1 -0
  260. package/libc/include/riscv-linux-any/asm/unistd_64.h +1 -0
  261. package/libc/include/s390x-linux-any/asm/unistd_64.h +1 -0
  262. package/libc/include/sparc-linux-any/asm/errno.h +2 -0
  263. package/libc/include/sparc-linux-any/asm/ioctls.h +4 -4
  264. package/libc/include/sparc-linux-any/asm/unistd_32.h +2 -0
  265. package/libc/include/sparc-linux-any/asm/unistd_64.h +2 -0
  266. package/libc/include/x86-linux-any/asm/auxvec.h +0 -4
  267. package/libc/include/x86-linux-any/asm/kvm.h +13 -8
  268. package/libc/include/x86-linux-any/asm/svm.h +16 -16
  269. package/libc/include/x86-linux-any/asm/unistd_32.h +1 -0
  270. package/libc/include/x86-linux-any/asm/unistd_64.h +1 -0
  271. package/libc/include/x86-linux-any/asm/unistd_x32.h +1 -0
  272. package/libc/include/xtensa-linux-any/asm/unistd_32.h +1 -0
  273. package/libc/musl/arch/mipsn32/syscall_arch.h +35 -32
  274. package/libcxx/include/__algorithm/all_of.h +11 -5
  275. package/libcxx/include/__algorithm/comp.h +4 -0
  276. package/libcxx/include/__algorithm/copy.h +28 -147
  277. package/libcxx/include/__algorithm/copy_backward.h +9 -24
  278. package/libcxx/include/__algorithm/copy_n.h +50 -16
  279. package/libcxx/include/__algorithm/count.h +2 -2
  280. package/libcxx/include/__algorithm/equal.h +43 -55
  281. package/libcxx/include/__algorithm/fill.h +26 -8
  282. package/libcxx/include/__algorithm/fill_n.h +32 -46
  283. package/libcxx/include/__algorithm/find.h +96 -39
  284. package/libcxx/include/__algorithm/find_end.h +105 -0
  285. package/libcxx/include/__algorithm/for_each.h +18 -24
  286. package/libcxx/include/__algorithm/for_each_n.h +20 -47
  287. package/libcxx/include/__algorithm/for_each_n_segment.h +1 -1
  288. package/libcxx/include/__algorithm/for_each_segment.h +26 -0
  289. package/libcxx/include/__algorithm/generate.h +4 -2
  290. package/libcxx/include/__algorithm/generate_n.h +19 -6
  291. package/libcxx/include/__algorithm/is_permutation.h +4 -4
  292. package/libcxx/include/__algorithm/iterator_operations.h +3 -0
  293. package/libcxx/include/__algorithm/lexicographical_compare.h +2 -2
  294. package/libcxx/include/__algorithm/lexicographical_compare_three_way.h +6 -6
  295. package/libcxx/include/__algorithm/make_heap.h +16 -4
  296. package/libcxx/include/__algorithm/mismatch.h +2 -2
  297. package/libcxx/include/__algorithm/move.h +8 -19
  298. package/libcxx/include/__algorithm/move_backward.h +9 -24
  299. package/libcxx/include/__algorithm/none_of.h +4 -4
  300. package/libcxx/include/__algorithm/partial_sort.h +1 -1
  301. package/libcxx/include/__algorithm/partial_sort_copy.h +1 -1
  302. package/libcxx/include/__algorithm/pstl.h +9 -9
  303. package/libcxx/include/__algorithm/radix_sort.h +27 -25
  304. package/libcxx/include/__algorithm/ranges_copy_n.h +3 -26
  305. package/libcxx/include/__algorithm/ranges_equal.h +17 -26
  306. package/libcxx/include/__algorithm/ranges_fill.h +7 -6
  307. package/libcxx/include/__algorithm/ranges_for_each.h +9 -1
  308. package/libcxx/include/__algorithm/ranges_generate_n.h +2 -6
  309. package/libcxx/include/__algorithm/ranges_search_n.h +2 -2
  310. package/libcxx/include/__algorithm/rotate.h +27 -44
  311. package/libcxx/include/__algorithm/search_n.h +49 -37
  312. package/libcxx/include/__algorithm/sift_down.h +19 -18
  313. package/libcxx/include/__algorithm/simd_utils.h +33 -4
  314. package/libcxx/include/__algorithm/specialized_algorithms.h +54 -0
  315. package/libcxx/include/__algorithm/stable_sort.h +1 -1
  316. package/libcxx/include/__assertion_handler +31 -4
  317. package/libcxx/include/__atomic/atomic.h +36 -60
  318. package/libcxx/include/__atomic/atomic_flag.h +19 -37
  319. package/libcxx/include/__atomic/atomic_ref.h +29 -12
  320. package/libcxx/include/__atomic/atomic_sync.h +127 -55
  321. package/libcxx/include/__atomic/atomic_sync_timed.h +144 -0
  322. package/libcxx/include/__atomic/atomic_waitable_traits.h +103 -0
  323. package/libcxx/include/__atomic/contention_t.h +27 -3
  324. package/libcxx/include/__atomic/floating_point_helper.h +55 -0
  325. package/libcxx/include/__bit/countl.h +1 -2
  326. package/libcxx/include/__bit/countr.h +1 -2
  327. package/libcxx/include/__bit/has_single_bit.h +1 -1
  328. package/libcxx/include/__bit/popcount.h +0 -1
  329. package/libcxx/include/__bit/rotate.h +15 -26
  330. package/libcxx/include/__bit_reference +207 -18
  331. package/libcxx/include/__charconv/from_chars_integral.h +1 -1
  332. package/libcxx/include/__charconv/from_chars_result.h +1 -1
  333. package/libcxx/include/__charconv/to_chars_integral.h +1 -0
  334. package/libcxx/include/__charconv/to_chars_result.h +1 -1
  335. package/libcxx/include/__charconv/traits.h +3 -24
  336. package/libcxx/include/__chrono/day.h +11 -0
  337. package/libcxx/include/__chrono/duration.h +58 -33
  338. package/libcxx/include/__chrono/file_clock.h +4 -2
  339. package/libcxx/include/__chrono/is_clock.h +72 -0
  340. package/libcxx/include/__chrono/leap_second.h +13 -0
  341. package/libcxx/include/__chrono/month.h +13 -0
  342. package/libcxx/include/__chrono/month_weekday.h +22 -0
  343. package/libcxx/include/__chrono/monthday.h +20 -0
  344. package/libcxx/include/__chrono/steady_clock.h +1 -1
  345. package/libcxx/include/__chrono/system_clock.h +3 -3
  346. package/libcxx/include/__chrono/time_point.h +37 -13
  347. package/libcxx/include/__chrono/weekday.h +25 -0
  348. package/libcxx/include/__chrono/year.h +11 -0
  349. package/libcxx/include/__chrono/year_month.h +13 -0
  350. package/libcxx/include/__chrono/year_month_day.h +23 -0
  351. package/libcxx/include/__chrono/year_month_weekday.h +26 -0
  352. package/libcxx/include/__chrono/zoned_time.h +16 -0
  353. package/libcxx/include/__compare/is_eq.h +6 -6
  354. package/libcxx/include/__compare/strong_order.h +12 -30
  355. package/libcxx/include/__compare/three_way_comparable.h +2 -2
  356. package/libcxx/include/__concepts/comparison_common_type.h +40 -0
  357. package/libcxx/include/__concepts/equality_comparable.h +2 -1
  358. package/libcxx/include/__condition_variable/condition_variable.h +1 -1
  359. package/libcxx/include/__config +63 -280
  360. package/libcxx/include/__configuration/abi.h +14 -24
  361. package/libcxx/include/__configuration/availability.h +65 -118
  362. package/libcxx/include/__configuration/compiler.h +6 -6
  363. package/libcxx/include/__configuration/experimental.h +38 -0
  364. package/libcxx/include/__configuration/hardening.h +215 -0
  365. package/libcxx/include/__configuration/language.h +3 -0
  366. package/libcxx/include/__configuration/platform.h +9 -16
  367. package/libcxx/include/__coroutine/coroutine_handle.h +9 -9
  368. package/libcxx/include/__coroutine/noop_coroutine_handle.h +11 -13
  369. package/libcxx/include/__debug_utils/strict_weak_ordering_check.h +1 -1
  370. package/libcxx/include/__exception/exception.h +6 -4
  371. package/libcxx/include/__exception/exception_ptr.h +27 -5
  372. package/libcxx/include/__exception/nested_exception.h +2 -2
  373. package/libcxx/include/__exception/operations.h +5 -5
  374. package/libcxx/include/__expected/bad_expected_access.h +8 -6
  375. package/libcxx/include/__expected/expected.h +62 -64
  376. package/libcxx/include/__expected/unexpected.h +4 -4
  377. package/libcxx/include/__filesystem/copy_options.h +4 -4
  378. package/libcxx/include/__filesystem/directory_entry.h +37 -33
  379. package/libcxx/include/__filesystem/directory_iterator.h +9 -11
  380. package/libcxx/include/__filesystem/directory_options.h +7 -4
  381. package/libcxx/include/__filesystem/file_status.h +3 -3
  382. package/libcxx/include/__filesystem/filesystem_error.h +9 -10
  383. package/libcxx/include/__filesystem/operations.h +97 -66
  384. package/libcxx/include/__filesystem/path.h +68 -64
  385. package/libcxx/include/__filesystem/path_iterator.h +1 -3
  386. package/libcxx/include/__filesystem/perm_options.h +4 -4
  387. package/libcxx/include/__filesystem/perms.h +4 -4
  388. package/libcxx/include/__filesystem/recursive_directory_iterator.h +9 -14
  389. package/libcxx/include/__filesystem/space_info.h +1 -1
  390. package/libcxx/include/__filesystem/u8path.h +12 -14
  391. package/libcxx/include/__flat_map/flat_map.h +88 -71
  392. package/libcxx/include/__flat_map/flat_multimap.h +251 -172
  393. package/libcxx/include/__flat_map/key_value_iterator.h +0 -1
  394. package/libcxx/include/__flat_map/utils.h +1 -0
  395. package/libcxx/include/__flat_set/flat_multiset.h +211 -143
  396. package/libcxx/include/__flat_set/flat_set.h +86 -68
  397. package/libcxx/include/__format/concepts.h +0 -14
  398. package/libcxx/include/__format/extended_grapheme_cluster_table.h +3 -2
  399. package/libcxx/include/__format/fmt_pair_like.h +42 -0
  400. package/libcxx/include/__format/format_arg.h +7 -10
  401. package/libcxx/include/__format/format_args.h +1 -1
  402. package/libcxx/include/__format/format_context.h +5 -5
  403. package/libcxx/include/__format/format_parse_context.h +2 -2
  404. package/libcxx/include/__format/formatter_output.h +30 -34
  405. package/libcxx/include/__format/indic_conjunct_break_table.h +3 -2
  406. package/libcxx/include/__format/range_default_formatter.h +2 -41
  407. package/libcxx/include/__format/range_format.h +71 -0
  408. package/libcxx/include/__format/range_formatter.h +1 -0
  409. package/libcxx/include/__format/width_estimation_table.h +4 -2
  410. package/libcxx/include/__functional/bind.h +10 -15
  411. package/libcxx/include/__functional/bind_back.h +1 -1
  412. package/libcxx/include/__functional/bind_front.h +1 -1
  413. package/libcxx/include/__functional/function.h +57 -75
  414. package/libcxx/include/__functional/hash.h +1 -10
  415. package/libcxx/include/__functional/identity.h +1 -1
  416. package/libcxx/include/__functional/is_transparent.h +8 -0
  417. package/libcxx/include/__functional/mem_fn.h +2 -1
  418. package/libcxx/include/__functional/operations.h +18 -0
  419. package/libcxx/include/__functional/ranges_operations.h +7 -0
  420. package/libcxx/include/__functional/reference_wrapper.h +7 -5
  421. package/libcxx/include/__functional/weak_result_type.h +14 -28
  422. package/libcxx/include/__fwd/ios.h +1 -1
  423. package/libcxx/include/__fwd/tuple.h +14 -0
  424. package/libcxx/include/__hash_table +371 -357
  425. package/libcxx/include/__ios/fpos.h +4 -4
  426. package/libcxx/include/__iterator/back_insert_iterator.h +1 -7
  427. package/libcxx/include/__iterator/bounded_iter.h +7 -8
  428. package/libcxx/include/__iterator/concepts.h +6 -9
  429. package/libcxx/include/__iterator/cpp17_iterator_concepts.h +13 -12
  430. package/libcxx/include/__iterator/distance.h +40 -18
  431. package/libcxx/include/__iterator/front_insert_iterator.h +1 -7
  432. package/libcxx/include/__iterator/insert_iterator.h +1 -7
  433. package/libcxx/include/__iterator/istream_iterator.h +6 -7
  434. package/libcxx/include/__iterator/istreambuf_iterator.h +6 -7
  435. package/libcxx/include/__iterator/iter_move.h +1 -1
  436. package/libcxx/include/__iterator/iterator.h +13 -0
  437. package/libcxx/include/__iterator/iterator_traits.h +13 -14
  438. package/libcxx/include/__iterator/ostream_iterator.h +1 -7
  439. package/libcxx/include/__iterator/ostreambuf_iterator.h +1 -7
  440. package/libcxx/include/__iterator/reverse_iterator.h +8 -13
  441. package/libcxx/include/__iterator/segmented_iterator.h +3 -8
  442. package/libcxx/include/__iterator/static_bounded_iter.h +3 -3
  443. package/libcxx/include/__iterator/wrap_iter.h +8 -6
  444. package/libcxx/include/__locale +3 -10
  445. package/libcxx/include/__locale_dir/locale_base_api/bsd_locale_fallbacks.h +0 -10
  446. package/libcxx/include/__locale_dir/locale_base_api.h +5 -28
  447. package/libcxx/include/__locale_dir/messages.h +1 -1
  448. package/libcxx/include/__locale_dir/money.h +2 -2
  449. package/libcxx/include/__locale_dir/num.h +190 -243
  450. package/libcxx/include/__locale_dir/pad_and_output.h +5 -6
  451. package/libcxx/include/__locale_dir/support/bsd_like.h +0 -20
  452. package/libcxx/include/__locale_dir/support/fuchsia.h +0 -7
  453. package/libcxx/include/__locale_dir/support/linux.h +0 -37
  454. package/libcxx/include/__locale_dir/support/netbsd.h +0 -2
  455. package/libcxx/include/__locale_dir/support/newlib.h +243 -0
  456. package/libcxx/include/__locale_dir/support/no_locale/characters.h +0 -4
  457. package/libcxx/include/__locale_dir/support/no_locale/strtonum.h +0 -9
  458. package/libcxx/include/__locale_dir/support/windows.h +0 -29
  459. package/libcxx/include/__locale_dir/time.h +3 -7
  460. package/libcxx/include/__math/hypot.h +1 -1
  461. package/libcxx/include/__math/logarithms.h +1 -1
  462. package/libcxx/include/__math/traits.h +80 -11
  463. package/libcxx/include/__mdspan/extents.h +7 -4
  464. package/libcxx/include/__mdspan/layout_stride.h +4 -5
  465. package/libcxx/include/__mdspan/mdspan.h +29 -23
  466. package/libcxx/include/__memory/addressof.h +7 -5
  467. package/libcxx/include/__memory/align.h +18 -1
  468. package/libcxx/include/__memory/allocate_at_least.h +15 -10
  469. package/libcxx/include/__memory/allocator.h +14 -26
  470. package/libcxx/include/__memory/allocator_traits.h +6 -4
  471. package/libcxx/include/__memory/compressed_pair.h +15 -9
  472. package/libcxx/include/__memory/construct_at.h +12 -23
  473. package/libcxx/include/__memory/inout_ptr.h +1 -1
  474. package/libcxx/include/__memory/is_sufficiently_aligned.h +1 -1
  475. package/libcxx/include/__memory/out_ptr.h +1 -1
  476. package/libcxx/include/__memory/pointer_traits.h +1 -1
  477. package/libcxx/include/__memory/raw_storage_iterator.h +3 -9
  478. package/libcxx/include/__memory/shared_count.h +9 -30
  479. package/libcxx/include/__memory/shared_ptr.h +100 -145
  480. package/libcxx/include/__memory/temp_value.h +1 -2
  481. package/libcxx/include/__memory/uninitialized_algorithms.h +44 -115
  482. package/libcxx/include/__memory/unique_ptr.h +14 -16
  483. package/libcxx/include/__memory/uses_allocator_construction.h +1 -0
  484. package/libcxx/include/__memory_resource/memory_resource.h +4 -2
  485. package/libcxx/include/__memory_resource/monotonic_buffer_resource.h +1 -1
  486. package/libcxx/include/__memory_resource/polymorphic_allocator.h +13 -8
  487. package/libcxx/include/__memory_resource/pool_options.h +1 -1
  488. package/libcxx/include/__memory_resource/synchronized_pool_resource.h +4 -2
  489. package/libcxx/include/__memory_resource/unsynchronized_pool_resource.h +1 -1
  490. package/libcxx/include/__mutex/mutex.h +2 -2
  491. package/libcxx/include/__mutex/once_flag.h +14 -11
  492. package/libcxx/include/__mutex/tag_types.h +3 -3
  493. package/libcxx/include/__mutex/unique_lock.h +8 -7
  494. package/libcxx/include/__new/align_val_t.h +6 -0
  495. package/libcxx/include/__new/allocate.h +1 -2
  496. package/libcxx/include/__new/exceptions.h +8 -2
  497. package/libcxx/include/__new/global_new_delete.h +4 -11
  498. package/libcxx/include/__new/interference_size.h +0 -4
  499. package/libcxx/include/__new/launder.h +3 -5
  500. package/libcxx/include/__new/nothrow_t.h +1 -1
  501. package/libcxx/include/__numeric/gcd_lcm.h +24 -34
  502. package/libcxx/include/__numeric/midpoint.h +9 -14
  503. package/libcxx/include/__numeric/pstl.h +2 -2
  504. package/libcxx/include/__numeric/saturation_arithmetic.h +13 -5
  505. package/libcxx/include/__ostream/basic_ostream.h +8 -8
  506. package/libcxx/include/__pstl/backends/default.h +14 -14
  507. package/libcxx/include/__pstl/backends/libdispatch.h +2 -2
  508. package/libcxx/include/__pstl/cpu_algos/find_if.h +1 -1
  509. package/libcxx/include/__pstl/cpu_algos/transform.h +5 -6
  510. package/libcxx/include/__pstl/cpu_algos/transform_reduce.h +5 -4
  511. package/libcxx/include/__random/binomial_distribution.h +10 -4
  512. package/libcxx/include/__random/mersenne_twister_engine.h +50 -154
  513. package/libcxx/include/__random/piecewise_constant_distribution.h +3 -2
  514. package/libcxx/include/__random/piecewise_linear_distribution.h +3 -2
  515. package/libcxx/include/__ranges/adjacent_transform_view.h +406 -0
  516. package/libcxx/include/__ranges/adjacent_view.h +419 -0
  517. package/libcxx/include/__ranges/as_rvalue_view.h +9 -9
  518. package/libcxx/include/__ranges/chunk_by_view.h +6 -6
  519. package/libcxx/include/__ranges/common_view.h +7 -7
  520. package/libcxx/include/__ranges/drop_view.h +8 -8
  521. package/libcxx/include/__ranges/drop_while_view.h +5 -5
  522. package/libcxx/include/__ranges/elements_of.h +49 -0
  523. package/libcxx/include/__ranges/empty_view.h +5 -5
  524. package/libcxx/include/__ranges/filter_view.h +10 -10
  525. package/libcxx/include/__ranges/iota_view.h +41 -22
  526. package/libcxx/include/__ranges/owning_view.h +15 -15
  527. package/libcxx/include/__ranges/ref_view.h +6 -6
  528. package/libcxx/include/__ranges/repeat_view.h +17 -10
  529. package/libcxx/include/__ranges/single_view.h +8 -8
  530. package/libcxx/include/__ranges/take_view.h +9 -9
  531. package/libcxx/include/__ranges/transform_view.h +1 -2
  532. package/libcxx/include/__ranges/view_interface.h +10 -10
  533. package/libcxx/include/__ranges/zip_transform_view.h +357 -0
  534. package/libcxx/include/__ranges/zip_view.h +20 -20
  535. package/libcxx/include/__split_buffer +612 -240
  536. package/libcxx/include/__stop_token/atomic_unique_lock.h +1 -1
  537. package/libcxx/include/__stop_token/stop_callback.h +2 -2
  538. package/libcxx/include/__stop_token/stop_source.h +1 -1
  539. package/libcxx/include/__stop_token/stop_state.h +4 -4
  540. package/libcxx/include/__stop_token/stop_token.h +1 -1
  541. package/libcxx/include/__string/char_traits.h +51 -31
  542. package/libcxx/include/__string/constexpr_c_functions.h +5 -5
  543. package/libcxx/include/__support/xlocale/__strtonum_fallback.h +0 -8
  544. package/libcxx/include/__system_error/error_category.h +8 -8
  545. package/libcxx/include/__system_error/error_code.h +5 -5
  546. package/libcxx/include/__system_error/error_condition.h +4 -4
  547. package/libcxx/include/__system_error/system_error.h +1 -1
  548. package/libcxx/include/__thread/id.h +1 -1
  549. package/libcxx/include/__thread/jthread.h +1 -1
  550. package/libcxx/include/__thread/poll_with_backoff.h +27 -8
  551. package/libcxx/include/__thread/support/c11.h +8 -8
  552. package/libcxx/include/__thread/support/pthread.h +8 -8
  553. package/libcxx/include/__thread/support/windows.h +8 -8
  554. package/libcxx/include/__thread/thread.h +13 -8
  555. package/libcxx/include/__thread/timed_backoff_policy.h +3 -2
  556. package/libcxx/include/__tree +849 -701
  557. package/libcxx/include/__tuple/sfinae_helpers.h +1 -44
  558. package/libcxx/include/__tuple/tuple_element.h +0 -12
  559. package/libcxx/include/__tuple/tuple_size.h +0 -4
  560. package/libcxx/include/__tuple/tuple_transform.h +45 -0
  561. package/libcxx/include/__type_traits/aligned_storage.h +13 -40
  562. package/libcxx/include/__type_traits/desugars_to.h +4 -0
  563. package/libcxx/include/__type_traits/invoke.h +8 -0
  564. package/libcxx/include/__type_traits/is_allocator.h +6 -7
  565. package/libcxx/include/__type_traits/is_array.h +26 -0
  566. package/libcxx/include/__type_traits/is_equality_comparable.h +16 -21
  567. package/libcxx/include/__type_traits/is_final.h +1 -1
  568. package/libcxx/include/__type_traits/is_floating_point.h +7 -6
  569. package/libcxx/include/__type_traits/is_generic_transparent_comparator.h +30 -0
  570. package/libcxx/include/__type_traits/is_specialization.h +2 -6
  571. package/libcxx/include/__type_traits/is_within_lifetime.h +29 -0
  572. package/libcxx/include/__type_traits/make_transparent.h +52 -0
  573. package/libcxx/include/__type_traits/reference_constructs_from_temporary.h +1 -7
  574. package/libcxx/include/__type_traits/reference_converts_from_temporary.h +1 -1
  575. package/libcxx/include/__utility/cmp.h +19 -7
  576. package/libcxx/include/__utility/default_three_way_comparator.h +70 -0
  577. package/libcxx/include/__utility/in_place.h +1 -1
  578. package/libcxx/include/__utility/integer_sequence.h +56 -41
  579. package/libcxx/include/__utility/lazy_synth_three_way_comparator.h +120 -0
  580. package/libcxx/include/__utility/pair.h +22 -25
  581. package/libcxx/include/__utility/scope_guard.h +2 -0
  582. package/libcxx/include/__utility/try_key_extraction.h +114 -0
  583. package/libcxx/include/__vector/vector.h +187 -160
  584. package/libcxx/include/__vector/vector_bool.h +76 -83
  585. package/libcxx/include/any +118 -155
  586. package/libcxx/include/array +88 -56
  587. package/libcxx/include/atomic +2 -0
  588. package/libcxx/include/barrier +20 -24
  589. package/libcxx/include/bitset +49 -30
  590. package/libcxx/include/ccomplex +3 -11
  591. package/libcxx/include/chrono +47 -0
  592. package/libcxx/include/ciso646 +3 -6
  593. package/libcxx/include/complex +77 -65
  594. package/libcxx/include/complex.h +10 -10
  595. package/libcxx/include/condition_variable +3 -3
  596. package/libcxx/include/cstdalign +3 -10
  597. package/libcxx/include/cstdbool +3 -10
  598. package/libcxx/include/ctgmath +2 -11
  599. package/libcxx/include/ctype.h +24 -24
  600. package/libcxx/include/cwchar +2 -2
  601. package/libcxx/include/deque +109 -225
  602. package/libcxx/include/errno.h +269 -269
  603. package/libcxx/include/exception +4 -1
  604. package/libcxx/include/ext/hash_map +7 -48
  605. package/libcxx/include/ext/hash_set +2 -8
  606. package/libcxx/include/fenv.h +43 -43
  607. package/libcxx/include/flat_map +663 -11
  608. package/libcxx/include/flat_set +543 -8
  609. package/libcxx/include/float.h +16 -16
  610. package/libcxx/include/forward_list +33 -53
  611. package/libcxx/include/fstream +57 -42
  612. package/libcxx/include/future +41 -51
  613. package/libcxx/include/initializer_list +9 -3
  614. package/libcxx/include/inttypes.h +16 -16
  615. package/libcxx/include/ios +28 -28
  616. package/libcxx/include/istream +19 -13
  617. package/libcxx/include/iterator +10 -0
  618. package/libcxx/include/latch +7 -5
  619. package/libcxx/include/limits +4 -4
  620. package/libcxx/include/list +61 -79
  621. package/libcxx/include/map +386 -274
  622. package/libcxx/include/math.h +19 -0
  623. package/libcxx/include/mdspan +1 -5
  624. package/libcxx/include/mutex +29 -19
  625. package/libcxx/include/optional +644 -149
  626. package/libcxx/include/print +9 -5
  627. package/libcxx/include/queue +39 -37
  628. package/libcxx/include/ranges +48 -0
  629. package/libcxx/include/regex +33 -31
  630. package/libcxx/include/scoped_allocator +16 -11
  631. package/libcxx/include/semaphore +15 -18
  632. package/libcxx/include/set +220 -192
  633. package/libcxx/include/shared_mutex +3 -8
  634. package/libcxx/include/span +53 -37
  635. package/libcxx/include/sstream +34 -28
  636. package/libcxx/include/stack +13 -15
  637. package/libcxx/include/stddef.h +10 -10
  638. package/libcxx/include/stdexcept +2 -2
  639. package/libcxx/include/stdio.h +20 -21
  640. package/libcxx/include/streambuf +59 -19
  641. package/libcxx/include/string +574 -573
  642. package/libcxx/include/string_view +113 -89
  643. package/libcxx/include/strstream +10 -10
  644. package/libcxx/include/syncstream +4 -4
  645. package/libcxx/include/tgmath.h +12 -12
  646. package/libcxx/include/tuple +242 -212
  647. package/libcxx/include/type_traits +8 -2
  648. package/libcxx/include/typeindex +5 -3
  649. package/libcxx/include/typeinfo +92 -89
  650. package/libcxx/include/unordered_map +179 -304
  651. package/libcxx/include/unordered_set +168 -195
  652. package/libcxx/include/utility +12 -0
  653. package/libcxx/include/valarray +106 -161
  654. package/libcxx/include/variant +25 -33
  655. package/libcxx/include/version +41 -24
  656. package/libcxx/include/wctype.h +29 -29
  657. package/libcxx/libc/hdr/errno_macros.h +3 -1
  658. package/libcxx/libc/hdr/stdint_proxy.h +18 -0
  659. package/libcxx/libc/hdr/types/wchar_t.h +23 -0
  660. package/libcxx/libc/hdr/wchar_overlay.h +69 -0
  661. package/libcxx/libc/include/llvm-libc-macros/cfloat128-macros.h +41 -0
  662. package/libcxx/libc/include/llvm-libc-macros/cfloat16-macros.h +20 -0
  663. package/libcxx/libc/include/llvm-libc-macros/wchar-macros.h +18 -0
  664. package/libcxx/libc/include/llvm-libc-types/cfloat128.h +11 -28
  665. package/libcxx/libc/include/llvm-libc-types/cfloat16.h +4 -7
  666. package/libcxx/libc/include/llvm-libc-types/wint_t.h +14 -0
  667. package/libcxx/libc/shared/libc_common.h +5 -0
  668. package/libcxx/libc/src/__support/CPP/bit.h +50 -12
  669. package/libcxx/libc/src/__support/CPP/type_traits/is_complex.h +7 -0
  670. package/libcxx/libc/src/__support/CPP/type_traits/is_destructible.h +2 -1
  671. package/libcxx/libc/src/__support/CPP/type_traits/is_unsigned.h +6 -0
  672. package/libcxx/libc/src/__support/CPP/utility/integer_sequence.h +10 -0
  673. package/libcxx/libc/src/__support/FPUtil/FPBits.h +6 -7
  674. package/libcxx/libc/src/__support/FPUtil/rounding_mode.h +50 -4
  675. package/libcxx/libc/src/__support/big_int.h +14 -14
  676. package/libcxx/libc/src/__support/common.h +3 -2
  677. package/libcxx/libc/src/__support/ctype_utils.h +19 -12
  678. package/libcxx/libc/src/__support/detailed_powers_of_ten.h +1 -2
  679. package/libcxx/libc/src/__support/high_precision_decimal.h +33 -14
  680. package/libcxx/libc/src/__support/libc_assert.h +2 -0
  681. package/libcxx/libc/src/__support/macros/attributes.h +44 -1
  682. package/libcxx/libc/src/__support/macros/config.h +23 -0
  683. package/libcxx/libc/src/__support/macros/null_check.h +1 -2
  684. package/libcxx/libc/src/__support/macros/optimization.h +3 -0
  685. package/libcxx/libc/src/__support/macros/properties/architectures.h +5 -1
  686. package/libcxx/libc/src/__support/macros/properties/compiler.h +8 -3
  687. package/libcxx/libc/src/__support/macros/properties/cpu_features.h +17 -1
  688. package/libcxx/libc/src/__support/macros/properties/types.h +2 -3
  689. package/libcxx/libc/src/__support/macros/sanitizer.h +0 -10
  690. package/libcxx/libc/src/__support/math_extras.h +20 -4
  691. package/libcxx/libc/src/__support/str_to_float.h +98 -125
  692. package/libcxx/libc/src/__support/str_to_integer.h +39 -27
  693. package/libcxx/libc/src/__support/wctype_utils.h +588 -0
  694. package/libcxx/src/any.cpp +4 -0
  695. package/libcxx/src/atomic.cpp +365 -80
  696. package/libcxx/src/barrier.cpp +4 -3
  697. package/libcxx/src/charconv.cpp +6 -3
  698. package/libcxx/src/condition_variable_destructor.cpp +1 -1
  699. package/libcxx/src/error_category.cpp +3 -1
  700. package/libcxx/src/exception.cpp +2 -10
  701. package/libcxx/src/experimental/time_zone.cpp +1 -1
  702. package/libcxx/src/experimental/tzdb.cpp +4 -1
  703. package/libcxx/src/filesystem/error.h +4 -22
  704. package/libcxx/src/filesystem/format_string.h +9 -18
  705. package/libcxx/src/filesystem/int128_builtins.cpp +2 -0
  706. package/libcxx/src/filesystem/operations.cpp +2 -9
  707. package/libcxx/src/filesystem/path.cpp +3 -1
  708. package/libcxx/src/include/aligned_alloc.h +65 -0
  709. package/libcxx/src/include/config_elast.h +1 -1
  710. package/libcxx/src/include/from_chars_floating_point.h +11 -7
  711. package/libcxx/src/include/overridable_function.h +8 -10
  712. package/libcxx/src/iostream.cpp +56 -37
  713. package/libcxx/src/locale.cpp +213 -196
  714. package/libcxx/src/memory.cpp +12 -14
  715. package/libcxx/src/mutex_destructor.cpp +1 -1
  716. package/libcxx/src/new.cpp +5 -5
  717. package/libcxx/src/optional.cpp +4 -0
  718. package/libcxx/src/print.cpp +9 -1
  719. package/libcxx/src/random.cpp +0 -26
  720. package/libcxx/src/string.cpp +10 -25
  721. package/libcxx/src/support/runtime/exception_fallback.ipp +2 -0
  722. package/libcxx/src/support/runtime/exception_glibcxx.ipp +3 -0
  723. package/libcxx/src/support/runtime/exception_libcxxabi.ipp +6 -2
  724. package/libcxx/src/support/runtime/exception_libcxxrt.ipp +2 -0
  725. package/libcxx/src/support/runtime/exception_msvc.ipp +2 -0
  726. package/libcxx/src/support/runtime/exception_pointer_cxxabi.ipp +9 -10
  727. package/libcxx/src/support/runtime/exception_pointer_glibcxx.ipp +2 -0
  728. package/libcxx/src/support/runtime/exception_pointer_msvc.ipp +1 -0
  729. package/libcxx/src/support/runtime/exception_pointer_unimplemented.ipp +1 -0
  730. package/libcxx/src/support/win32/locale_win32.cpp +1 -1
  731. package/libcxx/src/system_error.cpp +2 -0
  732. package/libcxx/src/thread.cpp +1 -3
  733. package/libcxx/src/valarray.cpp +1 -2
  734. package/libcxx/src/vector.cpp +2 -2
  735. package/libcxxabi/include/__cxxabi_config.h +42 -23
  736. package/libcxxabi/src/cxa_exception.cpp +4 -2
  737. package/libcxxabi/src/cxa_exception.h +16 -14
  738. package/libcxxabi/src/cxa_personality.cpp +126 -9
  739. package/libcxxabi/src/cxa_thread_atexit.cpp +2 -1
  740. package/libcxxabi/src/demangle/DemangleConfig.h +4 -0
  741. package/libcxxabi/src/demangle/ItaniumDemangle.h +9 -6
  742. package/libcxxabi/src/demangle/Utility.h +21 -7
  743. package/libcxxabi/src/fallback_malloc.cpp +1 -1
  744. package/libcxxabi/src/private_typeinfo.cpp +6 -0
  745. package/libcxxabi/src/stdlib_new_delete.cpp +5 -5
  746. package/libtsan/LICENSE.TXT +311 -0
  747. package/libtsan/builtins/assembly.h +41 -8
  748. package/libtsan/interception/interception_win.cpp +4 -0
  749. package/libtsan/sanitizer_common/sanitizer_allocator_primary32.h +1 -0
  750. package/libtsan/sanitizer_common/sanitizer_allocator_primary64.h +18 -0
  751. package/libtsan/sanitizer_common/sanitizer_common.h +15 -2
  752. package/libtsan/sanitizer_common/sanitizer_common_interceptors.inc +30 -4
  753. package/libtsan/sanitizer_common/sanitizer_common_interceptors_ioctl.inc +4 -0
  754. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_aarch64.inc.S +2 -1
  755. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_i386.inc.S +2 -0
  756. package/libtsan/sanitizer_common/sanitizer_common_interceptors_vfork_x86_64.inc.S +2 -0
  757. package/libtsan/sanitizer_common/sanitizer_common_syscalls.inc +18 -0
  758. package/libtsan/sanitizer_common/sanitizer_file.cpp +40 -12
  759. package/libtsan/sanitizer_common/sanitizer_file.h +3 -0
  760. package/libtsan/sanitizer_common/sanitizer_flags.inc +7 -0
  761. package/libtsan/sanitizer_common/sanitizer_fuchsia.cpp +30 -3
  762. package/libtsan/sanitizer_common/sanitizer_haiku.cpp +2 -2
  763. package/libtsan/sanitizer_common/sanitizer_internal_defs.h +1 -1
  764. package/libtsan/sanitizer_common/sanitizer_libc.cpp +8 -0
  765. package/libtsan/sanitizer_common/sanitizer_libc.h +1 -0
  766. package/libtsan/sanitizer_common/sanitizer_linux.cpp +15 -7
  767. package/libtsan/sanitizer_common/sanitizer_linux.h +3 -3
  768. package/libtsan/sanitizer_common/sanitizer_linux_libcdep.cpp +1 -0
  769. package/libtsan/sanitizer_common/sanitizer_mac.cpp +255 -104
  770. package/libtsan/sanitizer_common/sanitizer_mac.h +5 -0
  771. package/libtsan/sanitizer_common/sanitizer_netbsd.cpp +2 -2
  772. package/libtsan/sanitizer_common/sanitizer_platform.h +27 -1
  773. package/libtsan/sanitizer_common/sanitizer_platform_interceptors.h +5 -4
  774. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.cpp +15 -17
  775. package/libtsan/sanitizer_common/sanitizer_platform_limits_posix.h +32 -6
  776. package/libtsan/sanitizer_common/sanitizer_posix.cpp +3 -12
  777. package/libtsan/sanitizer_common/sanitizer_posix.h +2 -1
  778. package/libtsan/sanitizer_common/sanitizer_posix_libcdep.cpp +19 -0
  779. package/libtsan/sanitizer_common/sanitizer_procmaps_mac.cpp +102 -37
  780. package/libtsan/sanitizer_common/sanitizer_redefine_builtins.h +1 -1
  781. package/libtsan/sanitizer_common/sanitizer_signal_interceptors.inc +40 -2
  782. package/libtsan/sanitizer_common/sanitizer_stoptheworld.h +1 -1
  783. package/libtsan/sanitizer_common/sanitizer_stoptheworld_linux_libcdep.cpp +83 -12
  784. package/libtsan/sanitizer_common/sanitizer_stoptheworld_mac.cpp +3 -3
  785. package/libtsan/sanitizer_common/sanitizer_stoptheworld_netbsd_libcdep.cpp +7 -7
  786. package/libtsan/sanitizer_common/sanitizer_stoptheworld_win.cpp +2 -2
  787. package/libtsan/sanitizer_common/sanitizer_symbolizer_internal.h +5 -1
  788. package/libtsan/sanitizer_common/sanitizer_symbolizer_libcdep.cpp +11 -1
  789. package/libtsan/sanitizer_common/sanitizer_symbolizer_mac.cpp +86 -29
  790. package/libtsan/sanitizer_common/sanitizer_symbolizer_posix_libcdep.cpp +27 -16
  791. package/libtsan/sanitizer_common/sanitizer_thread_registry.cpp +5 -4
  792. package/libtsan/sanitizer_common/sanitizer_thread_registry.h +4 -4
  793. package/libtsan/sanitizer_common/sanitizer_win.cpp +1 -3
  794. package/libtsan/tsan_debugging.cpp +2 -2
  795. package/libtsan/tsan_flags.cpp +37 -0
  796. package/libtsan/tsan_flags.h +8 -0
  797. package/libtsan/tsan_flags.inc +12 -0
  798. package/libtsan/tsan_interceptors.h +9 -1
  799. package/libtsan/tsan_interceptors_mac.cpp +19 -0
  800. package/libtsan/tsan_interceptors_posix.cpp +78 -32
  801. package/libtsan/tsan_interface.h +3 -3
  802. package/libtsan/tsan_interface_ann.cpp +23 -9
  803. package/libtsan/tsan_mman.cpp +18 -4
  804. package/libtsan/tsan_platform.h +44 -7
  805. package/libtsan/tsan_platform_linux.cpp +42 -14
  806. package/libtsan/tsan_platform_mac.cpp +16 -3
  807. package/libtsan/tsan_report.h +14 -1
  808. package/libtsan/tsan_rtl.cpp +14 -0
  809. package/libtsan/tsan_rtl.h +7 -2
  810. package/libtsan/tsan_rtl_aarch64.S +3 -5
  811. package/libtsan/tsan_rtl_access.cpp +8 -3
  812. package/libtsan/tsan_rtl_amd64.S +2 -0
  813. package/libtsan/tsan_rtl_mutex.cpp +94 -49
  814. package/libtsan/tsan_rtl_report.cpp +132 -65
  815. package/libtsan/tsan_rtl_thread.cpp +31 -9
  816. package/libtsan/tsan_symbolize.cpp +1 -1
  817. package/libtsan/tsan_symbolize.h +1 -1
  818. package/libtsan/tsan_trace.h +1 -1
  819. package/libunwind/include/__libunwind_config.h +11 -2
  820. package/libunwind/include/libunwind.h +117 -11
  821. package/libunwind/include/unwind_arm_ehabi.h +4 -1
  822. package/libunwind/src/AddressSpace.hpp +42 -20
  823. package/libunwind/src/CompactUnwinder.hpp +16 -5
  824. package/libunwind/src/DwarfInstructions.hpp +24 -13
  825. package/libunwind/src/DwarfParser.hpp +62 -23
  826. package/libunwind/src/EHHeaderParser.hpp +7 -4
  827. package/libunwind/src/Registers.hpp +226 -22
  828. package/libunwind/src/Unwind-seh.cpp +6 -7
  829. package/libunwind/src/Unwind-wasm.c +7 -7
  830. package/libunwind/src/UnwindCursor.hpp +167 -49
  831. package/libunwind/src/UnwindLevel1.c +46 -17
  832. package/libunwind/src/UnwindRegistersRestore.S +46 -5
  833. package/libunwind/src/UnwindRegistersSave.S +86 -2
  834. package/libunwind/src/assembly.h +5 -1
  835. package/libunwind/src/config.h +9 -0
  836. package/libunwind/src/gcc_personality_v0.c +79 -6
  837. package/libunwind/src/libunwind.cpp +104 -4
  838. package/libunwind/src/libunwind_ext.h +7 -1
  839. package/libunwind/src/shadow_stack_unwind.h +2 -2
  840. package/lldb/pretty_printers.py +948 -0
  841. package/package.json +1 -1
  842. package/std/Build/Cache/Path.zig +1 -1
  843. package/std/Build/Cache.zig +6 -6
  844. package/std/Build/Step/Compile.zig +18 -20
  845. package/std/Build/Step/ConfigHeader.zig +1 -1
  846. package/std/Build/Step/Run.zig +15 -8
  847. package/std/Build/Step.zig +2 -7
  848. package/std/Build/Watch/FsEvents.zig +1 -1
  849. package/std/Build/WebServer.zig +2 -2
  850. package/std/Build/abi.zig +1 -1
  851. package/std/Build.zig +0 -3
  852. package/std/Io/Dir.zig +9 -4
  853. package/std/Io/Dispatch.zig +8 -18
  854. package/std/Io/File/Writer.zig +8 -6
  855. package/std/Io/File.zig +0 -9
  856. package/std/Io/Kqueue.zig +3 -3
  857. package/std/Io/Reader.zig +8 -14
  858. package/std/Io/Semaphore.zig +112 -17
  859. package/std/Io/Terminal.zig +1 -1
  860. package/std/Io/Threaded.zig +183 -46
  861. package/std/Io/Uring.zig +18 -20
  862. package/std/Io/Writer.zig +10 -7
  863. package/std/Io/net/HostName.zig +11 -6
  864. package/std/Io/net.zig +11 -11
  865. package/std/Io.zig +104 -38
  866. package/std/Random/ChaCha.zig +2 -2
  867. package/std/Random/benchmark.zig +2 -2
  868. package/std/Random.zig +6 -6
  869. package/std/SemanticVersion.zig +1 -1
  870. package/std/Target/Query.zig +2 -2
  871. package/std/Target/aarch64.zig +620 -77
  872. package/std/Target/amdgcn.zig +421 -21
  873. package/std/Target/arm.zig +40 -6
  874. package/std/Target/bpf.zig +6 -0
  875. package/std/Target/hexagon.zig +41 -6
  876. package/std/Target/loongarch.zig +18 -0
  877. package/std/Target/mips.zig +6 -0
  878. package/std/Target/nvptx.zig +58 -35
  879. package/std/Target/powerpc.zig +27 -19
  880. package/std/Target/riscv.zig +415 -177
  881. package/std/Target/sparc.zig +17 -0
  882. package/std/Target/wasm.zig +7 -0
  883. package/std/Target/x86.zig +200 -31
  884. package/std/Target/xtensa.zig +65 -0
  885. package/std/Target.zig +67 -14
  886. package/std/Thread.zig +5 -2
  887. package/std/array_hash_map.zig +103 -57
  888. package/std/array_list.zig +10 -31
  889. package/std/base64.zig +5 -5
  890. package/std/bit_set.zig +86 -69
  891. package/std/c/haiku.zig +3 -0
  892. package/std/c/serenity.zig +1 -6
  893. package/std/c.zig +123 -32
  894. package/std/compress/flate/Decompress.zig +3 -4
  895. package/std/compress/zstd/Decompress.zig +7 -9
  896. package/std/crypto/25519/curve25519.zig +2 -2
  897. package/std/crypto/25519/edwards25519.zig +3 -3
  898. package/std/crypto/25519/ristretto255.zig +2 -2
  899. package/std/crypto/25519/scalar.zig +6 -6
  900. package/std/crypto/25519/x25519.zig +1 -1
  901. package/std/crypto/Certificate.zig +14 -2
  902. package/std/crypto/Sha1.zig +1 -1
  903. package/std/crypto/aegis.zig +45 -39
  904. package/std/crypto/aes_ccm.zig +22 -22
  905. package/std/crypto/aes_gcm.zig +10 -12
  906. package/std/crypto/aes_ocb.zig +9 -9
  907. package/std/crypto/argon2.zig +15 -15
  908. package/std/crypto/ascon.zig +75 -33
  909. package/std/crypto/bcrypt.zig +20 -10
  910. package/std/crypto/benchmark.zig +7 -7
  911. package/std/crypto/blake2.zig +100 -64
  912. package/std/crypto/cbc_mac.zig +1 -1
  913. package/std/crypto/chacha20.zig +10 -10
  914. package/std/crypto/cmac.zig +3 -3
  915. package/std/crypto/codecs/asn1/Oid.zig +12 -1
  916. package/std/crypto/codecs/asn1/der/Encoder.zig +1 -1
  917. package/std/crypto/codecs/asn1.zig +1 -1
  918. package/std/crypto/codecs/base64_hex_ct.zig +3 -5
  919. package/std/crypto/ecdsa.zig +9 -9
  920. package/std/crypto/ff.zig +4 -5
  921. package/std/crypto/ghash_polyval.zig +4 -4
  922. package/std/crypto/hkdf.zig +1 -1
  923. package/std/crypto/isap.zig +3 -3
  924. package/std/crypto/kangarootwelve.zig +1 -1
  925. package/std/crypto/keccak_p.zig +8 -8
  926. package/std/crypto/md5.zig +1 -1
  927. package/std/crypto/ml_dsa.zig +39 -39
  928. package/std/crypto/ml_kem.zig +12 -34
  929. package/std/crypto/modes.zig +2 -2
  930. package/std/crypto/pbkdf2.zig +1 -1
  931. package/std/crypto/pcurves/common.zig +4 -5
  932. package/std/crypto/pcurves/p256/scalar.zig +3 -3
  933. package/std/crypto/pcurves/p384/scalar.zig +2 -2
  934. package/std/crypto/pcurves/secp256k1/scalar.zig +3 -3
  935. package/std/crypto/pcurves/tests/p256.zig +5 -5
  936. package/std/crypto/pcurves/tests/p384.zig +5 -5
  937. package/std/crypto/pcurves/tests/secp256k1.zig +3 -3
  938. package/std/crypto/salsa20.zig +8 -8
  939. package/std/crypto/sha2.zig +2 -2
  940. package/std/crypto/sha3.zig +2 -2
  941. package/std/crypto/siphash.zig +1 -1
  942. package/std/crypto/timing_safe.zig +10 -9
  943. package/std/crypto/tls/Client.zig +89 -13
  944. package/std/crypto/tls.zig +1 -1
  945. package/std/crypto.zig +4 -3
  946. package/std/debug/Dwarf.zig +15 -12
  947. package/std/debug/Pdb.zig +25 -17
  948. package/std/debug.zig +14 -8
  949. package/std/deque.zig +1 -1
  950. package/std/elf.zig +1 -1
  951. package/std/enums.zig +8 -8
  952. package/std/fmt/parse_float/decimal.zig +1 -1
  953. package/std/fmt/parse_float.zig +1 -1
  954. package/std/fmt.zig +14 -10
  955. package/std/fs/path.zig +7 -5
  956. package/std/hash/Adler32.zig +3 -3
  957. package/std/hash/benchmark.zig +2 -2
  958. package/std/hash/wyhash.zig +2 -2
  959. package/std/hash/xxhash.zig +0 -6
  960. package/std/hash_map.zig +20 -1
  961. package/std/heap/BufferFirstAllocator.zig +165 -0
  962. package/std/heap/debug_allocator.zig +2 -2
  963. package/std/heap/memory_pool.zig +34 -197
  964. package/std/heap.zig +2 -133
  965. package/std/http/Client.zig +21 -24
  966. package/std/http.zig +4 -5
  967. package/std/json/Scanner.zig +2 -2
  968. package/std/json/static.zig +2 -2
  969. package/std/{builtin.zig → lang.zig} +5 -1
  970. package/std/leb128.zig +2 -2
  971. package/std/math/big/int.zig +5 -5
  972. package/std/math/big.zig +4 -4
  973. package/std/math/copysign.zig +1 -1
  974. package/std/math/float.zig +62 -0
  975. package/std/math/frexp.zig +4 -4
  976. package/std/math/ilogb.zig +1 -1
  977. package/std/math/isfinite.zig +1 -1
  978. package/std/math/isinf.zig +1 -1
  979. package/std/math/isnan.zig +1 -2
  980. package/std/math/isnormal.zig +2 -2
  981. package/std/math/iszero.zig +2 -2
  982. package/std/math/ldexp.zig +2 -2
  983. package/std/math/log10.zig +0 -2
  984. package/std/math/modf.zig +1 -2
  985. package/std/math/nextafter.zig +3 -4
  986. package/std/math/pow.zig +1 -1
  987. package/std/math/powi.zig +2 -3
  988. package/std/math/signbit.zig +0 -1
  989. package/std/math.zig +21 -26
  990. package/std/mem/Allocator.zig +0 -6
  991. package/std/mem.zig +31 -31
  992. package/std/meta/trailer_flags.zig +1 -1
  993. package/std/meta.zig +4 -36
  994. package/std/multi_array_list.zig +24 -0
  995. package/std/os/emscripten.zig +7 -6
  996. package/std/os/linux/IoUring.zig +2 -0
  997. package/std/os/linux/aarch64.zig +41 -12
  998. package/std/os/linux/arc.zig +41 -12
  999. package/std/os/linux/arm.zig +41 -12
  1000. package/std/os/linux/bpf.zig +6 -0
  1001. package/std/os/linux/hexagon.zig +33 -11
  1002. package/std/os/linux/ioctl.zig +2 -2
  1003. package/std/os/linux/loongarch32.zig +41 -13
  1004. package/std/os/linux/loongarch64.zig +41 -12
  1005. package/std/os/linux/m68k.zig +41 -13
  1006. package/std/os/linux/mips.zig +67 -36
  1007. package/std/os/linux/mips64.zig +60 -29
  1008. package/std/os/linux/mipsn32.zig +60 -29
  1009. package/std/os/linux/or1k.zig +41 -12
  1010. package/std/os/linux/powerpc.zig +41 -12
  1011. package/std/os/linux/powerpc64.zig +41 -12
  1012. package/std/os/linux/riscv32.zig +41 -12
  1013. package/std/os/linux/riscv64.zig +41 -12
  1014. package/std/os/linux/s390x.zig +44 -7
  1015. package/std/os/linux/sparc64.zig +83 -52
  1016. package/std/os/linux/syscalls.zig +26 -1
  1017. package/std/os/linux/thumb.zig +52 -36
  1018. package/std/os/linux/x32.zig +41 -12
  1019. package/std/os/linux/x86.zig +44 -15
  1020. package/std/os/linux/x86_64.zig +41 -12
  1021. package/std/os/linux.zig +416 -450
  1022. package/std/os/plan9.zig +1 -1
  1023. package/std/os/uefi/hii.zig +1 -1
  1024. package/std/os/uefi/tables/boot_services.zig +9 -8
  1025. package/std/os/uefi/tables/runtime_services.zig +1 -1
  1026. package/std/os/windows.zig +130 -1
  1027. package/std/os.zig +41 -0
  1028. package/std/posix.zig +1 -1
  1029. package/std/process/Environ.zig +1 -1
  1030. package/std/process.zig +5 -4
  1031. package/std/simd.zig +4 -21
  1032. package/std/sort.zig +3 -3
  1033. package/std/start.zig +17 -4
  1034. package/std/std.zig +8 -1
  1035. package/std/tar/Writer.zig +39 -33
  1036. package/std/tar.zig +8 -4
  1037. package/std/testing.zig +2 -2
  1038. package/std/unicode.zig +13 -8
  1039. package/std/zig/Ast/Render.zig +6 -30
  1040. package/std/zig/Ast.zig +12 -37
  1041. package/std/zig/AstGen.zig +175 -332
  1042. package/std/zig/AstRlAnnotate.zig +1 -22
  1043. package/std/zig/AstSmith.zig +5 -11
  1044. package/std/zig/BuiltinFn.zig +0 -32
  1045. package/std/zig/ErrorBundle.zig +6 -2
  1046. package/std/zig/LibCInstallation.zig +34 -12
  1047. package/std/zig/Parse.zig +11 -76
  1048. package/std/zig/TokenSmith.zig +0 -6
  1049. package/std/zig/WindowsSdk.zig +18 -18
  1050. package/std/zig/Zir.zig +65 -132
  1051. package/std/zig/ZonGen.zig +19 -27
  1052. package/std/zig/llvm/Builder.zig +39 -33
  1053. package/std/zig/llvm/bitcode_writer.zig +3 -3
  1054. package/std/zig/llvm/ir.zig +8 -8
  1055. package/std/zig/system/arm.zig +56 -2
  1056. package/std/zig/system/windows.zig +34 -1
  1057. package/std/zig/system/x86.zig +60 -16
  1058. package/std/zig/system.zig +0 -10
  1059. package/std/zig/target.zig +1 -4
  1060. package/std/zig/tokenizer.zig +4 -43
  1061. package/std/zig.zig +3 -14
  1062. package/std/zip.zig +5 -5
  1063. package/std/zon/parse.zig +1 -1
  1064. package/zig.h +340 -1
  1065. package/compiler_rt/long_double.zig +0 -37
  1066. package/include/amxbf16transposeintrin.h +0 -94
  1067. package/include/amxcomplextransposeintrin.h +0 -303
  1068. package/include/amxfp16transposeintrin.h +0 -94
  1069. package/include/amxmovrstransposeintrin.h +0 -200
  1070. package/include/amxtf32transposeintrin.h +0 -105
  1071. package/include/amxtransposeintrin.h +0 -248
  1072. package/libc/include/hexagon-linux-any/asm/signal.h +0 -29
  1073. package/libc/include/s390x-linux-any/asm/tape390.h +0 -103
  1074. package/libc/mingw/math/lrintl.c +0 -18
  1075. package/libc/mingw/math/rintl.c +0 -16
  1076. package/libc/mingw/winpthreads/spinlock.c +0 -82
  1077. package/libc/musl/src/linux/tee.c +0 -8
  1078. package/libc/musl/src/math/i386/lrintl.c +0 -8
  1079. package/libc/musl/src/math/i386/rintl.c +0 -7
  1080. package/libc/musl/src/math/lrintl.c +0 -36
  1081. package/libc/musl/src/math/rintl.c +0 -29
  1082. package/libc/musl/src/math/s390x/rintl.c +0 -15
  1083. package/libc/musl/src/math/x32/lrintl.s +0 -7
  1084. package/libc/musl/src/math/x32/rintl.s +0 -6
  1085. package/libc/musl/src/math/x86_64/lrintl.c +0 -8
  1086. package/libc/musl/src/math/x86_64/rintl.c +0 -7
  1087. package/libc/musl/src/string/strdup.c +0 -10
  1088. package/libc/musl/src/string/strndup.c +0 -12
  1089. package/libc/musl/src/string/wcsdup.c +0 -10
  1090. package/libc/musl/src/thread/pthread_spin_destroy.c +0 -6
  1091. package/libc/musl/src/thread/pthread_spin_init.c +0 -6
  1092. package/libc/musl/src/thread/pthread_spin_lock.c +0 -8
  1093. package/libc/musl/src/thread/pthread_spin_trylock.c +0 -7
  1094. package/libc/musl/src/thread/pthread_spin_unlock.c +0 -7
  1095. package/libc/musl/src/unistd/dup2.c +0 -20
  1096. package/libc/musl/src/unistd/dup3.c +0 -26
  1097. package/libc/wasi/thread-stub/pthread_spin_lock.c +0 -8
  1098. package/libc/wasi/thread-stub/pthread_spin_trylock.c +0 -8
  1099. package/libc/wasi/thread-stub/pthread_spin_unlock.c +0 -7
  1100. package/libtsan/sanitizer_common/sanitizer_coverage_interface.inc +0 -43
  1101. package/std/Build/Step/CheckObject.zig +0 -2764
  1102. /package/std/{builtin → lang}/assembly.zig +0 -0
@@ -577,12 +577,12 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
577
577
  # include <__algorithm/equal.h>
578
578
  # include <__algorithm/lexicographical_compare.h>
579
579
  # include <__algorithm/lexicographical_compare_three_way.h>
580
+ # include <__algorithm/specialized_algorithms.h>
580
581
  # include <__assert>
581
582
  # include <__config>
582
583
  # include <__functional/binary_function.h>
583
584
  # include <__functional/is_transparent.h>
584
585
  # include <__functional/operations.h>
585
- # include <__fwd/map.h>
586
586
  # include <__iterator/erase_if_container.h>
587
587
  # include <__iterator/iterator_traits.h>
588
588
  # include <__iterator/ranges_iterator_traits.h>
@@ -590,19 +590,23 @@ erase_if(multimap<Key, T, Compare, Allocator>& c, Predicate pred); // C++20
590
590
  # include <__memory/addressof.h>
591
591
  # include <__memory/allocator.h>
592
592
  # include <__memory/allocator_traits.h>
593
+ # include <__memory/compressed_pair.h>
593
594
  # include <__memory/pointer_traits.h>
594
595
  # include <__memory/unique_ptr.h>
595
596
  # include <__memory_resource/polymorphic_allocator.h>
596
597
  # include <__node_handle>
598
+ # include <__ranges/access.h>
597
599
  # include <__ranges/concepts.h>
598
600
  # include <__ranges/container_compatible_range.h>
599
601
  # include <__ranges/from_range.h>
600
602
  # include <__tree>
601
603
  # include <__type_traits/container_traits.h>
602
604
  # include <__type_traits/is_allocator.h>
605
+ # include <__type_traits/make_transparent.h>
603
606
  # include <__type_traits/remove_const.h>
604
607
  # include <__type_traits/type_identity.h>
605
608
  # include <__utility/forward.h>
609
+ # include <__utility/lazy_synth_three_way_comparator.h>
606
610
  # include <__utility/pair.h>
607
611
  # include <__utility/piecewise_construct.h>
608
612
  # include <__utility/swap.h>
@@ -632,47 +636,9 @@ _LIBCPP_PUSH_MACROS
632
636
 
633
637
  _LIBCPP_BEGIN_NAMESPACE_STD
634
638
 
635
- template <class _Key,
636
- class _CP,
637
- class _Compare,
638
- bool = is_empty<_Compare>::value && !__libcpp_is_final<_Compare>::value>
639
- class __map_value_compare : private _Compare {
640
- public:
641
- _LIBCPP_HIDE_FROM_ABI __map_value_compare() _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
642
- : _Compare() {}
643
- _LIBCPP_HIDE_FROM_ABI __map_value_compare(_Compare __c) _NOEXCEPT_(is_nothrow_copy_constructible<_Compare>::value)
644
- : _Compare(__c) {}
645
- _LIBCPP_HIDE_FROM_ABI const _Compare& key_comp() const _NOEXCEPT { return *this; }
646
- _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _CP& __y) const {
647
- return static_cast<const _Compare&>(*this)(__x.first, __y.first);
648
- }
649
- _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _Key& __y) const {
650
- return static_cast<const _Compare&>(*this)(__x.first, __y);
651
- }
652
- _LIBCPP_HIDE_FROM_ABI bool operator()(const _Key& __x, const _CP& __y) const {
653
- return static_cast<const _Compare&>(*this)(__x, __y.first);
654
- }
655
- _LIBCPP_HIDE_FROM_ABI void swap(__map_value_compare& __y) _NOEXCEPT_(__is_nothrow_swappable_v<_Compare>) {
656
- using std::swap;
657
- swap(static_cast<_Compare&>(*this), static_cast<_Compare&>(__y));
658
- }
659
-
660
- # if _LIBCPP_STD_VER >= 14
661
- template <typename _K2>
662
- _LIBCPP_HIDE_FROM_ABI bool operator()(const _K2& __x, const _CP& __y) const {
663
- return static_cast<const _Compare&>(*this)(__x, __y.first);
664
- }
665
-
666
- template <typename _K2>
667
- _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _K2& __y) const {
668
- return static_cast<const _Compare&>(*this)(__x.first, __y);
669
- }
670
- # endif
671
- };
672
-
673
639
  template <class _Key, class _CP, class _Compare>
674
- class __map_value_compare<_Key, _CP, _Compare, false> {
675
- _Compare __comp_;
640
+ class __map_value_compare {
641
+ _LIBCPP_COMPRESSED_ELEMENT(_Compare, __comp_);
676
642
 
677
643
  public:
678
644
  _LIBCPP_HIDE_FROM_ABI __map_value_compare() _NOEXCEPT_(is_nothrow_default_constructible<_Compare>::value)
@@ -684,7 +650,7 @@ public:
684
650
  _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _CP& __y) const { return __comp_(__x.first, __y.first); }
685
651
  _LIBCPP_HIDE_FROM_ABI bool operator()(const _CP& __x, const _Key& __y) const { return __comp_(__x.first, __y); }
686
652
  _LIBCPP_HIDE_FROM_ABI bool operator()(const _Key& __x, const _CP& __y) const { return __comp_(__x, __y.first); }
687
- void swap(__map_value_compare& __y) _NOEXCEPT_(__is_nothrow_swappable_v<_Compare>) {
653
+ _LIBCPP_HIDE_FROM_ABI void swap(__map_value_compare& __y) _NOEXCEPT_(__is_nothrow_swappable_v<_Compare>) {
688
654
  using std::swap;
689
655
  swap(__comp_, __y.__comp_);
690
656
  }
@@ -702,9 +668,58 @@ public:
702
668
  # endif
703
669
  };
704
670
 
705
- template <class _Key, class _CP, class _Compare, bool __b>
671
+ template <class _Key, class _MapValueT, class _Compare>
672
+ struct __make_transparent<_Key, __map_value_compare<_Key, _MapValueT, _Compare> > {
673
+ using type _LIBCPP_NODEBUG = __map_value_compare<_Key, _MapValueT, __make_transparent_t<_Key, _Compare> >;
674
+ };
675
+
676
+ # if _LIBCPP_STD_VER >= 14
677
+ template <class _MapValueT, class _Key, class _Compare>
678
+ struct __lazy_synth_three_way_comparator<__map_value_compare<_Key, _MapValueT, _Compare>, _MapValueT, _MapValueT> {
679
+ __lazy_synth_three_way_comparator<_Compare, _Key, _Key> __comp_;
680
+
681
+ __lazy_synth_three_way_comparator(
682
+ _LIBCPP_CTOR_LIFETIMEBOUND const __map_value_compare<_Key, _MapValueT, _Compare>& __comp)
683
+ : __comp_(__comp.key_comp()) {}
684
+
685
+ _LIBCPP_HIDE_FROM_ABI auto
686
+ operator()(_LIBCPP_LIFETIMEBOUND const _MapValueT& __lhs, _LIBCPP_LIFETIMEBOUND const _MapValueT& __rhs) const {
687
+ return __comp_(__lhs.first, __rhs.first);
688
+ }
689
+ };
690
+
691
+ template <class _MapValueT, class _Key, class _TransparentKey, class _Compare>
692
+ struct __lazy_synth_three_way_comparator<__map_value_compare<_Key, _MapValueT, _Compare>, _TransparentKey, _MapValueT> {
693
+ __lazy_synth_three_way_comparator<_Compare, _TransparentKey, _Key> __comp_;
694
+
695
+ __lazy_synth_three_way_comparator(
696
+ _LIBCPP_CTOR_LIFETIMEBOUND const __map_value_compare<_Key, _MapValueT, _Compare>& __comp)
697
+ : __comp_(__comp.key_comp()) {}
698
+
699
+ _LIBCPP_HIDE_FROM_ABI auto
700
+ operator()(_LIBCPP_LIFETIMEBOUND const _TransparentKey& __lhs, _LIBCPP_LIFETIMEBOUND const _MapValueT& __rhs) const {
701
+ return __comp_(__lhs, __rhs.first);
702
+ }
703
+ };
704
+
705
+ template <class _MapValueT, class _Key, class _TransparentKey, class _Compare>
706
+ struct __lazy_synth_three_way_comparator<__map_value_compare<_Key, _MapValueT, _Compare>, _MapValueT, _TransparentKey> {
707
+ __lazy_synth_three_way_comparator<_Compare, _Key, _TransparentKey> __comp_;
708
+
709
+ __lazy_synth_three_way_comparator(
710
+ _LIBCPP_CTOR_LIFETIMEBOUND const __map_value_compare<_Key, _MapValueT, _Compare>& __comp)
711
+ : __comp_(__comp.key_comp()) {}
712
+
713
+ _LIBCPP_HIDE_FROM_ABI auto
714
+ operator()(_LIBCPP_LIFETIMEBOUND const _MapValueT& __lhs, _LIBCPP_LIFETIMEBOUND const _TransparentKey& __rhs) const {
715
+ return __comp_(__lhs.first, __rhs);
716
+ }
717
+ };
718
+ # endif // _LIBCPP_STD_VER >= 14
719
+
720
+ template <class _Key, class _CP, class _Compare>
706
721
  inline _LIBCPP_HIDE_FROM_ABI void
707
- swap(__map_value_compare<_Key, _CP, _Compare, __b>& __x, __map_value_compare<_Key, _CP, _Compare, __b>& __y)
722
+ swap(__map_value_compare<_Key, _CP, _Compare>& __x, __map_value_compare<_Key, _CP, _Compare>& __y)
708
723
  _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) {
709
724
  __x.swap(__y);
710
725
  }
@@ -742,9 +757,9 @@ public:
742
757
 
743
758
  _LIBCPP_HIDE_FROM_ABI void operator()(pointer __p) _NOEXCEPT {
744
759
  if (__second_constructed)
745
- __alloc_traits::destroy(__na_, std::addressof(__p->__value_.second));
760
+ __alloc_traits::destroy(__na_, std::addressof(__p->__get_value().second));
746
761
  if (__first_constructed)
747
- __alloc_traits::destroy(__na_, std::addressof(__p->__value_.first));
762
+ __alloc_traits::destroy(__na_, std::addressof(__p->__get_value().first));
748
763
  if (__p)
749
764
  __alloc_traits::deallocate(__na_, __p, 1);
750
765
  }
@@ -804,7 +819,26 @@ public:
804
819
  friend class multimap;
805
820
  template <class>
806
821
  friend class __map_const_iterator;
822
+
823
+ template <class, class...>
824
+ friend struct __specialized_algorithm;
825
+ };
826
+
827
+ # ifndef _LIBCPP_CXX03_LANG
828
+ template <class _Alg, class _TreeIterator>
829
+ struct __specialized_algorithm<_Alg, __iterator_pair<__map_iterator<_TreeIterator>, __map_iterator<_TreeIterator>>> {
830
+ using __base _LIBCPP_NODEBUG = __specialized_algorithm<_Alg, __iterator_pair<_TreeIterator, _TreeIterator>>;
831
+
832
+ static const bool __has_algorithm = __base::__has_algorithm;
833
+
834
+ using __iterator _LIBCPP_NODEBUG = __map_iterator<_TreeIterator>;
835
+
836
+ template <class... _Args>
837
+ _LIBCPP_HIDE_FROM_ABI static void operator()(__iterator __first, __iterator __last, _Args&&... __args) {
838
+ __base()(__first.__i_, __last.__i_, std::forward<_Args>(__args)...);
839
+ }
807
840
  };
841
+ # endif
808
842
 
809
843
  template <class _TreeIterator>
810
844
  class __map_const_iterator {
@@ -859,9 +893,33 @@ public:
859
893
  friend class multimap;
860
894
  template <class, class, class>
861
895
  friend class __tree_const_iterator;
896
+
897
+ template <class, class...>
898
+ friend struct __specialized_algorithm;
862
899
  };
863
900
 
864
- template <class _Key, class _Tp, class _Compare, class _Allocator>
901
+ # ifndef _LIBCPP_CXX03_LANG
902
+ template <class _Alg, class _TreeIterator>
903
+ struct __specialized_algorithm<
904
+ _Alg,
905
+ __iterator_pair<__map_const_iterator<_TreeIterator>, __map_const_iterator<_TreeIterator>>> {
906
+ using __base _LIBCPP_NODEBUG = __specialized_algorithm<_Alg, __iterator_pair<_TreeIterator, _TreeIterator>>;
907
+
908
+ static const bool __has_algorithm = __base::__has_algorithm;
909
+
910
+ using __iterator _LIBCPP_NODEBUG = __map_const_iterator<_TreeIterator>;
911
+
912
+ template <class... _Args>
913
+ _LIBCPP_HIDE_FROM_ABI static void operator()(__iterator __first, __iterator __last, _Args&&... __args) {
914
+ __base()(__first.__i_, __last.__i_, std::forward<_Args>(__args)...);
915
+ }
916
+ };
917
+ # endif
918
+
919
+ template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
920
+ class multimap;
921
+
922
+ template <class _Key, class _Tp, class _Compare = less<_Key>, class _Allocator = allocator<pair<const _Key, _Tp> > >
865
923
  class map {
866
924
  public:
867
925
  // types:
@@ -970,17 +1028,17 @@ public:
970
1028
  : map(from_range, std::forward<_Range>(__range), key_compare(), __a) {}
971
1029
  # endif
972
1030
 
973
- _LIBCPP_HIDE_FROM_ABI map(const map& __m) : __tree_(__m.__tree_) { insert(__m.begin(), __m.end()); }
1031
+ _LIBCPP_HIDE_FROM_ABI map(const map& __m) = default;
974
1032
 
975
1033
  _LIBCPP_HIDE_FROM_ABI map& operator=(const map& __m) = default;
976
1034
 
977
1035
  # ifndef _LIBCPP_CXX03_LANG
978
1036
 
979
- _LIBCPP_HIDE_FROM_ABI map(map&& __m) noexcept(is_nothrow_move_constructible<__base>::value) = default;
1037
+ _LIBCPP_HIDE_FROM_ABI map(map&& __m) = default;
980
1038
 
981
- _LIBCPP_HIDE_FROM_ABI map(map&& __m, const allocator_type& __a);
1039
+ _LIBCPP_HIDE_FROM_ABI map(map&& __m, const allocator_type& __a) : __tree_(std::move(__m.__tree_), __a) {}
982
1040
 
983
- _LIBCPP_HIDE_FROM_ABI map& operator=(map&& __m) noexcept(is_nothrow_move_assignable<__base>::value) = default;
1041
+ _LIBCPP_HIDE_FROM_ABI map& operator=(map&& __m) = default;
984
1042
 
985
1043
  _LIBCPP_HIDE_FROM_ABI map(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
986
1044
  : __tree_(__vc(__comp)) {
@@ -998,7 +1056,8 @@ public:
998
1056
  # endif
999
1057
 
1000
1058
  _LIBCPP_HIDE_FROM_ABI map& operator=(initializer_list<value_type> __il) {
1001
- __tree_.__assign_unique(__il.begin(), __il.end());
1059
+ clear();
1060
+ insert(__il.begin(), __il.end());
1002
1061
  return *this;
1003
1062
  }
1004
1063
 
@@ -1006,43 +1065,66 @@ public:
1006
1065
 
1007
1066
  _LIBCPP_HIDE_FROM_ABI explicit map(const allocator_type& __a) : __tree_(typename __base::allocator_type(__a)) {}
1008
1067
 
1009
- _LIBCPP_HIDE_FROM_ABI map(const map& __m, const allocator_type& __a)
1010
- : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a)) {
1011
- insert(__m.begin(), __m.end());
1012
- }
1068
+ _LIBCPP_HIDE_FROM_ABI map(const map& __m, const allocator_type& __alloc) : __tree_(__m.__tree_, __alloc) {}
1013
1069
 
1014
1070
  _LIBCPP_HIDE_FROM_ABI ~map() { static_assert(sizeof(std::__diagnose_non_const_comparator<_Key, _Compare>()), ""); }
1015
1071
 
1016
- _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
1017
- _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
1018
- _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
1019
- _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
1072
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
1073
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
1074
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
1075
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
1020
1076
 
1021
- _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
1022
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT { return const_reverse_iterator(end()); }
1023
- _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
1024
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT { return const_reverse_iterator(begin()); }
1077
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
1078
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT {
1079
+ return const_reverse_iterator(end());
1080
+ }
1081
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
1082
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT {
1083
+ return const_reverse_iterator(begin());
1084
+ }
1025
1085
 
1026
- _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
1027
- _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
1028
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
1029
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
1086
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
1087
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
1088
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
1089
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
1030
1090
 
1031
1091
  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __tree_.size() == 0; }
1032
- _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
1033
- _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
1092
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
1093
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
1034
1094
 
1035
1095
  _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](const key_type& __k);
1036
1096
  # ifndef _LIBCPP_CXX03_LANG
1037
1097
  _LIBCPP_HIDE_FROM_ABI mapped_type& operator[](key_type&& __k);
1038
1098
  # endif
1039
1099
 
1040
- _LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __k);
1041
- _LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __k) const;
1100
+ template <class _Arg,
1101
+ __enable_if_t<__is_transparently_comparable_v<_Compare, key_type, __remove_cvref_t<_Arg> >, int> = 0>
1102
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI mapped_type& at(_Arg&& __arg) {
1103
+ auto [_, __child] = __tree_.__find_equal(__arg);
1104
+ if (__child == nullptr)
1105
+ std::__throw_out_of_range("map::at: key not found");
1106
+ return static_cast<__node_pointer>(__child)->__get_value().second;
1107
+ }
1108
+
1109
+ template <class _Arg,
1110
+ __enable_if_t<__is_transparently_comparable_v<_Compare, key_type, __remove_cvref_t<_Arg> >, int> = 0>
1111
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const mapped_type& at(_Arg&& __arg) const {
1112
+ auto [_, __child] = __tree_.__find_equal(__arg);
1113
+ if (__child == nullptr)
1114
+ std::__throw_out_of_range("map::at: key not found");
1115
+ return static_cast<__node_pointer>(__child)->__get_value().second;
1116
+ }
1042
1117
 
1043
- _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { return allocator_type(__tree_.__alloc()); }
1044
- _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
1045
- _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const { return value_compare(__tree_.value_comp().key_comp()); }
1118
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI mapped_type& at(const key_type& __k);
1119
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const mapped_type& at(const key_type& __k) const;
1120
+
1121
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT {
1122
+ return allocator_type(__tree_.__alloc());
1123
+ }
1124
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
1125
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const {
1126
+ return value_compare(__tree_.value_comp().key_comp());
1127
+ }
1046
1128
 
1047
1129
  # ifndef _LIBCPP_CXX03_LANG
1048
1130
  template <class... _Args>
@@ -1052,7 +1134,7 @@ public:
1052
1134
 
1053
1135
  template <class... _Args>
1054
1136
  _LIBCPP_HIDE_FROM_ABI iterator emplace_hint(const_iterator __p, _Args&&... __args) {
1055
- return __tree_.__emplace_hint_unique(__p.__i_, std::forward<_Args>(__args)...);
1137
+ return __tree_.__emplace_hint_unique(__p.__i_, std::forward<_Args>(__args)...).first;
1056
1138
  }
1057
1139
 
1058
1140
  template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
@@ -1062,7 +1144,7 @@ public:
1062
1144
 
1063
1145
  template <class _Pp, __enable_if_t<is_constructible<value_type, _Pp>::value, int> = 0>
1064
1146
  _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __pos, _Pp&& __p) {
1065
- return __tree_.__emplace_hint_unique(__pos.__i_, std::forward<_Pp>(__p));
1147
+ return __tree_.__emplace_hint_unique(__pos.__i_, std::forward<_Pp>(__p)).first;
1066
1148
  }
1067
1149
 
1068
1150
  # endif // _LIBCPP_CXX03_LANG
@@ -1070,7 +1152,7 @@ public:
1070
1152
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert(const value_type& __v) { return __tree_.__emplace_unique(__v); }
1071
1153
 
1072
1154
  _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, const value_type& __v) {
1073
- return __tree_.__emplace_hint_unique(__p.__i_, __v);
1155
+ return __tree_.__emplace_hint_unique(__p.__i_, __v).first;
1074
1156
  }
1075
1157
 
1076
1158
  # ifndef _LIBCPP_CXX03_LANG
@@ -1079,25 +1161,21 @@ public:
1079
1161
  }
1080
1162
 
1081
1163
  _LIBCPP_HIDE_FROM_ABI iterator insert(const_iterator __p, value_type&& __v) {
1082
- return __tree_.__emplace_hint_unique(__p.__i_, std::move(__v));
1164
+ return __tree_.__emplace_hint_unique(__p.__i_, std::move(__v)).first;
1083
1165
  }
1084
1166
 
1085
1167
  _LIBCPP_HIDE_FROM_ABI void insert(initializer_list<value_type> __il) { insert(__il.begin(), __il.end()); }
1086
1168
  # endif
1087
1169
 
1088
1170
  template <class _InputIterator>
1089
- _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
1090
- for (const_iterator __e = cend(); __f != __l; ++__f)
1091
- insert(__e.__i_, *__f);
1171
+ _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __first, _InputIterator __last) {
1172
+ __tree_.__insert_range_unique(__first, __last);
1092
1173
  }
1093
1174
 
1094
1175
  # if _LIBCPP_STD_VER >= 23
1095
1176
  template <_ContainerCompatibleRange<value_type> _Range>
1096
1177
  _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
1097
- const_iterator __end = cend();
1098
- for (auto&& __element : __range) {
1099
- insert(__end.__i_, std::forward<decltype(__element)>(__element));
1100
- }
1178
+ __tree_.__insert_range_unique(ranges::begin(__range), ranges::end(__range));
1101
1179
  }
1102
1180
  # endif
1103
1181
 
@@ -1105,17 +1183,13 @@ public:
1105
1183
 
1106
1184
  template <class... _Args>
1107
1185
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> try_emplace(const key_type& __k, _Args&&... __args) {
1108
- return __tree_.__emplace_unique_key_args(
1109
- __k,
1110
- std::piecewise_construct,
1111
- std::forward_as_tuple(__k),
1112
- std::forward_as_tuple(std::forward<_Args>(__args)...));
1186
+ return __tree_.__emplace_unique(
1187
+ std::piecewise_construct, std::forward_as_tuple(__k), std::forward_as_tuple(std::forward<_Args>(__args)...));
1113
1188
  }
1114
1189
 
1115
1190
  template <class... _Args>
1116
1191
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> try_emplace(key_type&& __k, _Args&&... __args) {
1117
- return __tree_.__emplace_unique_key_args(
1118
- __k,
1192
+ return __tree_.__emplace_unique(
1119
1193
  std::piecewise_construct,
1120
1194
  std::forward_as_tuple(std::move(__k)),
1121
1195
  std::forward_as_tuple(std::forward<_Args>(__args)...));
@@ -1124,9 +1198,8 @@ public:
1124
1198
  template <class... _Args>
1125
1199
  _LIBCPP_HIDE_FROM_ABI iterator try_emplace(const_iterator __h, const key_type& __k, _Args&&... __args) {
1126
1200
  return __tree_
1127
- .__emplace_hint_unique_key_args(
1201
+ .__emplace_hint_unique(
1128
1202
  __h.__i_,
1129
- __k,
1130
1203
  std::piecewise_construct,
1131
1204
  std::forward_as_tuple(__k),
1132
1205
  std::forward_as_tuple(std::forward<_Args>(__args)...))
@@ -1136,9 +1209,8 @@ public:
1136
1209
  template <class... _Args>
1137
1210
  _LIBCPP_HIDE_FROM_ABI iterator try_emplace(const_iterator __h, key_type&& __k, _Args&&... __args) {
1138
1211
  return __tree_
1139
- .__emplace_hint_unique_key_args(
1212
+ .__emplace_hint_unique(
1140
1213
  __h.__i_,
1141
- __k,
1142
1214
  std::piecewise_construct,
1143
1215
  std::forward_as_tuple(std::move(__k)),
1144
1216
  std::forward_as_tuple(std::forward<_Args>(__args)...))
@@ -1147,27 +1219,25 @@ public:
1147
1219
 
1148
1220
  template <class _Vp>
1149
1221
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(const key_type& __k, _Vp&& __v) {
1150
- iterator __p = lower_bound(__k);
1151
- if (__p != end() && !key_comp()(__k, __p->first)) {
1152
- __p->second = std::forward<_Vp>(__v);
1153
- return std::make_pair(__p, false);
1154
- }
1155
- return std::make_pair(emplace_hint(__p, __k, std::forward<_Vp>(__v)), true);
1222
+ auto __result = __tree_.__emplace_unique(__k, std::forward<_Vp>(__v));
1223
+ auto& [__iter, __inserted] = __result;
1224
+ if (!__inserted)
1225
+ __iter->second = std::forward<_Vp>(__v);
1226
+ return __result;
1156
1227
  }
1157
1228
 
1158
1229
  template <class _Vp>
1159
1230
  _LIBCPP_HIDE_FROM_ABI pair<iterator, bool> insert_or_assign(key_type&& __k, _Vp&& __v) {
1160
- iterator __p = lower_bound(__k);
1161
- if (__p != end() && !key_comp()(__k, __p->first)) {
1162
- __p->second = std::forward<_Vp>(__v);
1163
- return std::make_pair(__p, false);
1164
- }
1165
- return std::make_pair(emplace_hint(__p, std::move(__k), std::forward<_Vp>(__v)), true);
1231
+ auto __result = __tree_.__emplace_unique(std::move(__k), std::forward<_Vp>(__v));
1232
+ auto& [__iter, __inserted] = __result;
1233
+ if (!__inserted)
1234
+ __iter->second = std::forward<_Vp>(__v);
1235
+ return __result;
1166
1236
  }
1167
1237
 
1168
1238
  template <class _Vp>
1169
1239
  _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h, const key_type& __k, _Vp&& __v) {
1170
- auto [__r, __inserted] = __tree_.__emplace_hint_unique_key_args(__h.__i_, __k, __k, std::forward<_Vp>(__v));
1240
+ auto [__r, __inserted] = __tree_.__emplace_hint_unique(__h.__i_, __k, std::forward<_Vp>(__v));
1171
1241
 
1172
1242
  if (!__inserted)
1173
1243
  __r->second = std::forward<_Vp>(__v);
@@ -1177,8 +1247,7 @@ public:
1177
1247
 
1178
1248
  template <class _Vp>
1179
1249
  _LIBCPP_HIDE_FROM_ABI iterator insert_or_assign(const_iterator __h, key_type&& __k, _Vp&& __v) {
1180
- auto [__r, __inserted] =
1181
- __tree_.__emplace_hint_unique_key_args(__h.__i_, __k, std::move(__k), std::forward<_Vp>(__v));
1250
+ auto [__r, __inserted] = __tree_.__emplace_hint_unique(__h.__i_, std::move(__k), std::forward<_Vp>(__v));
1182
1251
 
1183
1252
  if (!__inserted)
1184
1253
  __r->second = std::forward<_Vp>(__v);
@@ -1207,10 +1276,10 @@ public:
1207
1276
  "node_type with incompatible allocator passed to map::insert()");
1208
1277
  return __tree_.template __node_handle_insert_unique<node_type>(__hint.__i_, std::move(__nh));
1209
1278
  }
1210
- _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
1279
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
1211
1280
  return __tree_.template __node_handle_extract<node_type>(__key);
1212
1281
  }
1213
- _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
1282
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
1214
1283
  return __tree_.template __node_handle_extract<node_type>(__it.__i_);
1215
1284
  }
1216
1285
  template <class _Compare2>
@@ -1241,75 +1310,105 @@ public:
1241
1310
 
1242
1311
  _LIBCPP_HIDE_FROM_ABI void swap(map& __m) _NOEXCEPT_(__is_nothrow_swappable_v<__base>) { __tree_.swap(__m.__tree_); }
1243
1312
 
1244
- _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
1245
- _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
1313
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
1314
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
1246
1315
  # if _LIBCPP_STD_VER >= 14
1247
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1248
- _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
1316
+ template <typename _K2,
1317
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1318
+ int> = 0>
1319
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
1249
1320
  return __tree_.find(__k);
1250
1321
  }
1251
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1252
- _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
1322
+ template <typename _K2,
1323
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1324
+ int> = 0>
1325
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
1253
1326
  return __tree_.find(__k);
1254
1327
  }
1255
1328
  # endif
1256
1329
 
1257
- _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __tree_.__count_unique(__k); }
1330
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const {
1331
+ return __tree_.__count_unique(__k);
1332
+ }
1258
1333
  # if _LIBCPP_STD_VER >= 14
1259
1334
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1260
- _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
1335
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
1261
1336
  return __tree_.__count_multi(__k);
1262
1337
  }
1263
1338
  # endif
1264
1339
 
1265
1340
  # if _LIBCPP_STD_VER >= 20
1266
- _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
1267
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1268
- _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
1341
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
1342
+ template <typename _K2,
1343
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1344
+ int> = 0>
1345
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
1269
1346
  return find(__k) != end();
1270
1347
  }
1271
1348
  # endif // _LIBCPP_STD_VER >= 20
1272
1349
 
1273
- _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.lower_bound(__k); }
1274
- _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); }
1350
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) {
1351
+ return __tree_.__lower_bound_unique(__k);
1352
+ }
1353
+
1354
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const {
1355
+ return __tree_.__lower_bound_unique(__k);
1356
+ }
1357
+
1358
+ // The transparent versions of the lookup functions use the _multi version, since a non-element key is allowed to
1359
+ // match multiple elements.
1275
1360
  # if _LIBCPP_STD_VER >= 14
1276
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1277
- _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
1278
- return __tree_.lower_bound(__k);
1361
+ template <typename _K2,
1362
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1363
+ int> = 0>
1364
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
1365
+ return __tree_.__lower_bound_multi(__k);
1279
1366
  }
1280
1367
 
1281
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1282
- _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
1283
- return __tree_.lower_bound(__k);
1368
+ template <typename _K2,
1369
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1370
+ int> = 0>
1371
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
1372
+ return __tree_.__lower_bound_multi(__k);
1284
1373
  }
1285
1374
  # endif
1286
1375
 
1287
- _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.upper_bound(__k); }
1288
- _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); }
1289
- # if _LIBCPP_STD_VER >= 14
1290
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1291
- _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
1292
- return __tree_.upper_bound(__k);
1376
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) {
1377
+ return __tree_.__upper_bound_unique(__k);
1293
1378
  }
1294
- template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1295
- _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
1296
- return __tree_.upper_bound(__k);
1379
+
1380
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const {
1381
+ return __tree_.__upper_bound_unique(__k);
1382
+ }
1383
+
1384
+ # if _LIBCPP_STD_VER >= 14
1385
+ template <typename _K2,
1386
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1387
+ int> = 0>
1388
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
1389
+ return __tree_.__upper_bound_multi(__k);
1390
+ }
1391
+ template <typename _K2,
1392
+ enable_if_t<__is_transparent_v<_Compare, _K2> || __is_transparently_comparable_v<_Compare, key_type, _K2>,
1393
+ int> = 0>
1394
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
1395
+ return __tree_.__upper_bound_multi(__k);
1297
1396
  }
1298
1397
  # endif
1299
1398
 
1300
- _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
1399
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
1301
1400
  return __tree_.__equal_range_unique(__k);
1302
1401
  }
1303
- _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
1402
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
1304
1403
  return __tree_.__equal_range_unique(__k);
1305
1404
  }
1306
1405
  # if _LIBCPP_STD_VER >= 14
1307
1406
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1308
- _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
1407
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
1309
1408
  return __tree_.__equal_range_multi(__k);
1310
1409
  }
1311
1410
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1312
- _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
1411
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
1313
1412
  return __tree_.__equal_range_multi(__k);
1314
1413
  }
1315
1414
  # endif
@@ -1319,7 +1418,6 @@ private:
1319
1418
  typedef typename __base::__node_allocator __node_allocator;
1320
1419
  typedef typename __base::__node_pointer __node_pointer;
1321
1420
  typedef typename __base::__node_base_pointer __node_base_pointer;
1322
- typedef typename __base::__parent_pointer __parent_pointer;
1323
1421
 
1324
1422
  typedef __map_node_destructor<__node_allocator> _Dp;
1325
1423
  typedef unique_ptr<__node, _Dp> __node_holder;
@@ -1327,6 +1425,8 @@ private:
1327
1425
  # ifdef _LIBCPP_CXX03_LANG
1328
1426
  _LIBCPP_HIDE_FROM_ABI __node_holder __construct_node_with_key(const key_type& __k);
1329
1427
  # endif
1428
+
1429
+ friend struct __specialized_algorithm<_Algorithm::__for_each, __single_range<map> >;
1330
1430
  };
1331
1431
 
1332
1432
  # if _LIBCPP_STD_VER >= 17
@@ -1334,8 +1434,8 @@ template <class _InputIterator,
1334
1434
  class _Compare = less<__iter_key_type<_InputIterator>>,
1335
1435
  class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
1336
1436
  class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
1337
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1338
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1437
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
1438
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1339
1439
  map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
1340
1440
  -> map<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
1341
1441
 
@@ -1343,8 +1443,8 @@ map(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocat
1343
1443
  template <ranges::input_range _Range,
1344
1444
  class _Compare = less<__range_key_type<_Range>>,
1345
1445
  class _Allocator = allocator<__range_to_alloc_type<_Range>>,
1346
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1347
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1446
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
1447
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1348
1448
  map(from_range_t, _Range&&, _Compare = _Compare(), _Allocator = _Allocator())
1349
1449
  -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
1350
1450
  # endif
@@ -1353,16 +1453,15 @@ template <class _Key,
1353
1453
  class _Tp,
1354
1454
  class _Compare = less<remove_const_t<_Key>>,
1355
1455
  class _Allocator = allocator<pair<const _Key, _Tp>>,
1356
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1357
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1358
- map(initializer_list<pair<_Key, _Tp>>,
1359
- _Compare = _Compare(),
1360
- _Allocator = _Allocator()) -> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
1456
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
1457
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1458
+ map(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
1459
+ -> map<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
1361
1460
 
1362
1461
  template <class _InputIterator,
1363
1462
  class _Allocator,
1364
1463
  class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
1365
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1464
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1366
1465
  map(_InputIterator, _InputIterator, _Allocator)
1367
1466
  -> map<__iter_key_type<_InputIterator>,
1368
1467
  __iter_mapped_type<_InputIterator>,
@@ -1370,44 +1469,44 @@ map(_InputIterator, _InputIterator, _Allocator)
1370
1469
  _Allocator>;
1371
1470
 
1372
1471
  # if _LIBCPP_STD_VER >= 23
1373
- template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1472
+ template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>>
1374
1473
  map(from_range_t, _Range&&, _Allocator)
1375
1474
  -> map<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
1376
1475
  # endif
1377
1476
 
1378
- template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1379
- map(initializer_list<pair<_Key, _Tp>>,
1380
- _Allocator) -> map<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
1477
+ template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>>
1478
+ map(initializer_list<pair<_Key, _Tp>>, _Allocator)
1479
+ -> map<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
1381
1480
  # endif
1382
1481
 
1383
- # ifndef _LIBCPP_CXX03_LANG
1482
+ # if _LIBCPP_STD_VER >= 14
1384
1483
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1385
- map<_Key, _Tp, _Compare, _Allocator>::map(map&& __m, const allocator_type& __a)
1386
- : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a)) {
1387
- if (__a != __m.get_allocator()) {
1388
- const_iterator __e = cend();
1389
- while (!__m.empty()) {
1390
- __tree_.__insert_unique_from_orphaned_node(__e.__i_, std::move(__m.__tree_.remove(__m.begin().__i_)->__value_));
1391
- }
1484
+ struct __specialized_algorithm<_Algorithm::__for_each, __single_range<map<_Key, _Tp, _Compare, _Allocator>>> {
1485
+ using __map _LIBCPP_NODEBUG = map<_Key, _Tp, _Compare, _Allocator>;
1486
+
1487
+ static const bool __has_algorithm = true;
1488
+
1489
+ template <class _Map, class _Func, class _Proj>
1490
+ _LIBCPP_HIDE_FROM_ABI static auto operator()(_Map&& __map, _Func __func, _Proj __proj) {
1491
+ auto [_, __func2] = __specialized_algorithm<_Algorithm::__for_each, __single_range<typename __map::__base>>()(
1492
+ __map.__tree_, std::move(__func), std::move(__proj));
1493
+ return std::make_pair(__map.end(), std::move(__func2));
1392
1494
  }
1393
- }
1495
+ };
1496
+ # endif
1394
1497
 
1498
+ # ifndef _LIBCPP_CXX03_LANG
1395
1499
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1396
1500
  _Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k) {
1397
- return __tree_
1398
- .__emplace_unique_key_args(__k, std::piecewise_construct, std::forward_as_tuple(__k), std::forward_as_tuple())
1501
+ return __tree_.__emplace_unique(std::piecewise_construct, std::forward_as_tuple(__k), std::forward_as_tuple())
1399
1502
  .first->second;
1400
1503
  }
1401
1504
 
1402
1505
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1403
1506
  _Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](key_type&& __k) {
1404
- // TODO investigate this clang-tidy warning.
1405
- // NOLINTBEGIN(bugprone-use-after-move)
1406
1507
  return __tree_
1407
- .__emplace_unique_key_args(
1408
- __k, std::piecewise_construct, std::forward_as_tuple(std::move(__k)), std::forward_as_tuple())
1508
+ .__emplace_unique(std::piecewise_construct, std::forward_as_tuple(std::move(__k)), std::forward_as_tuple())
1409
1509
  .first->second;
1410
- // NOLINTEND(bugprone-use-after-move)
1411
1510
  }
1412
1511
 
1413
1512
  # else // _LIBCPP_CXX03_LANG
@@ -1417,44 +1516,41 @@ typename map<_Key, _Tp, _Compare, _Allocator>::__node_holder
1417
1516
  map<_Key, _Tp, _Compare, _Allocator>::__construct_node_with_key(const key_type& __k) {
1418
1517
  __node_allocator& __na = __tree_.__node_alloc();
1419
1518
  __node_holder __h(__node_traits::allocate(__na, 1), _Dp(__na));
1420
- __node_traits::construct(__na, std::addressof(__h->__value_.first), __k);
1519
+ __node_traits::construct(__na, std::addressof(__h->__get_value().first), __k);
1421
1520
  __h.get_deleter().__first_constructed = true;
1422
- __node_traits::construct(__na, std::addressof(__h->__value_.second));
1521
+ __node_traits::construct(__na, std::addressof(__h->__get_value().second));
1423
1522
  __h.get_deleter().__second_constructed = true;
1424
1523
  return __h;
1425
1524
  }
1426
1525
 
1427
1526
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1428
1527
  _Tp& map<_Key, _Tp, _Compare, _Allocator>::operator[](const key_type& __k) {
1429
- __parent_pointer __parent;
1430
- __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
1431
- __node_pointer __r = static_cast<__node_pointer>(__child);
1528
+ auto [__parent, __child] = __tree_.__find_equal(__k);
1529
+ __node_pointer __r = static_cast<__node_pointer>(__child);
1432
1530
  if (__child == nullptr) {
1433
1531
  __node_holder __h = __construct_node_with_key(__k);
1434
1532
  __tree_.__insert_node_at(__parent, __child, static_cast<__node_base_pointer>(__h.get()));
1435
1533
  __r = __h.release();
1436
1534
  }
1437
- return __r->__value_.second;
1535
+ return __r->__get_value().second;
1438
1536
  }
1439
1537
 
1440
1538
  # endif // _LIBCPP_CXX03_LANG
1441
1539
 
1442
1540
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1443
1541
  _Tp& map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) {
1444
- __parent_pointer __parent;
1445
- __node_base_pointer& __child = __tree_.__find_equal(__parent, __k);
1542
+ auto [_, __child] = __tree_.__find_equal(__k);
1446
1543
  if (__child == nullptr)
1447
1544
  std::__throw_out_of_range("map::at: key not found");
1448
- return static_cast<__node_pointer>(__child)->__value_.second;
1545
+ return static_cast<__node_pointer>(__child)->__get_value().second;
1449
1546
  }
1450
1547
 
1451
1548
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1452
1549
  const _Tp& map<_Key, _Tp, _Compare, _Allocator>::at(const key_type& __k) const {
1453
- __parent_pointer __parent;
1454
- __node_base_pointer __child = __tree_.__find_equal(__parent, __k);
1550
+ auto [_, __child] = __tree_.__find_equal(__k);
1455
1551
  if (__child == nullptr)
1456
1552
  std::__throw_out_of_range("map::at: key not found");
1457
- return static_cast<__node_pointer>(__child)->__value_.second;
1553
+ return static_cast<__node_pointer>(__child)->__get_value().second;
1458
1554
  }
1459
1555
 
1460
1556
  template <class _Key, class _Tp, class _Compare, class _Allocator>
@@ -1637,22 +1733,17 @@ public:
1637
1733
  : multimap(from_range, std::forward<_Range>(__range), key_compare(), __a) {}
1638
1734
  # endif
1639
1735
 
1640
- _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m)
1641
- : __tree_(__m.__tree_.value_comp(),
1642
- __alloc_traits::select_on_container_copy_construction(__m.__tree_.__alloc())) {
1643
- insert(__m.begin(), __m.end());
1644
- }
1736
+ _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m) = default;
1645
1737
 
1646
1738
  _LIBCPP_HIDE_FROM_ABI multimap& operator=(const multimap& __m) = default;
1647
1739
 
1648
1740
  # ifndef _LIBCPP_CXX03_LANG
1649
1741
 
1650
- _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m) noexcept(is_nothrow_move_constructible<__base>::value) = default;
1742
+ _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m) = default;
1651
1743
 
1652
- _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m, const allocator_type& __a);
1744
+ _LIBCPP_HIDE_FROM_ABI multimap(multimap&& __m, const allocator_type& __a) : __tree_(std::move(__m.__tree_), __a) {}
1653
1745
 
1654
- _LIBCPP_HIDE_FROM_ABI multimap&
1655
- operator=(multimap&& __m) noexcept(is_nothrow_move_assignable<__base>::value) = default;
1746
+ _LIBCPP_HIDE_FROM_ABI multimap& operator=(multimap&& __m) = default;
1656
1747
 
1657
1748
  _LIBCPP_HIDE_FROM_ABI multimap(initializer_list<value_type> __il, const key_compare& __comp = key_compare())
1658
1749
  : __tree_(__vc(__comp)) {
@@ -1671,7 +1762,8 @@ public:
1671
1762
  # endif
1672
1763
 
1673
1764
  _LIBCPP_HIDE_FROM_ABI multimap& operator=(initializer_list<value_type> __il) {
1674
- __tree_.__assign_multi(__il.begin(), __il.end());
1765
+ clear();
1766
+ insert(__il.begin(), __il.end());
1675
1767
  return *this;
1676
1768
  }
1677
1769
 
@@ -1679,37 +1771,42 @@ public:
1679
1771
 
1680
1772
  _LIBCPP_HIDE_FROM_ABI explicit multimap(const allocator_type& __a) : __tree_(typename __base::allocator_type(__a)) {}
1681
1773
 
1682
- _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m, const allocator_type& __a)
1683
- : __tree_(__m.__tree_.value_comp(), typename __base::allocator_type(__a)) {
1684
- insert(__m.begin(), __m.end());
1685
- }
1774
+ _LIBCPP_HIDE_FROM_ABI multimap(const multimap& __m, const allocator_type& __a) : __tree_(__m.__tree_, __a) {}
1686
1775
 
1687
1776
  _LIBCPP_HIDE_FROM_ABI ~multimap() {
1688
1777
  static_assert(sizeof(std::__diagnose_non_const_comparator<_Key, _Compare>()), "");
1689
1778
  }
1690
1779
 
1691
- _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
1692
- _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
1693
- _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
1694
- _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
1780
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator begin() _NOEXCEPT { return __tree_.begin(); }
1781
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator begin() const _NOEXCEPT { return __tree_.begin(); }
1782
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator end() _NOEXCEPT { return __tree_.end(); }
1783
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator end() const _NOEXCEPT { return __tree_.end(); }
1695
1784
 
1696
- _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
1697
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT { return const_reverse_iterator(end()); }
1698
- _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
1699
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT { return const_reverse_iterator(begin()); }
1785
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI reverse_iterator rbegin() _NOEXCEPT { return reverse_iterator(end()); }
1786
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rbegin() const _NOEXCEPT {
1787
+ return const_reverse_iterator(end());
1788
+ }
1789
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI reverse_iterator rend() _NOEXCEPT { return reverse_iterator(begin()); }
1790
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator rend() const _NOEXCEPT {
1791
+ return const_reverse_iterator(begin());
1792
+ }
1700
1793
 
1701
- _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
1702
- _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
1703
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
1704
- _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
1794
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator cbegin() const _NOEXCEPT { return begin(); }
1795
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator cend() const _NOEXCEPT { return end(); }
1796
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crbegin() const _NOEXCEPT { return rbegin(); }
1797
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_reverse_iterator crend() const _NOEXCEPT { return rend(); }
1705
1798
 
1706
1799
  [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool empty() const _NOEXCEPT { return __tree_.size() == 0; }
1707
- _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
1708
- _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
1800
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type size() const _NOEXCEPT { return __tree_.size(); }
1801
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type max_size() const _NOEXCEPT { return __tree_.max_size(); }
1709
1802
 
1710
- _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT { return allocator_type(__tree_.__alloc()); }
1711
- _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
1712
- _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const { return value_compare(__tree_.value_comp().key_comp()); }
1803
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI allocator_type get_allocator() const _NOEXCEPT {
1804
+ return allocator_type(__tree_.__alloc());
1805
+ }
1806
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI key_compare key_comp() const { return __tree_.value_comp().key_comp(); }
1807
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI value_compare value_comp() const {
1808
+ return value_compare(__tree_.value_comp().key_comp());
1809
+ }
1713
1810
 
1714
1811
  # ifndef _LIBCPP_CXX03_LANG
1715
1812
 
@@ -1751,17 +1848,13 @@ public:
1751
1848
 
1752
1849
  template <class _InputIterator>
1753
1850
  _LIBCPP_HIDE_FROM_ABI void insert(_InputIterator __f, _InputIterator __l) {
1754
- for (const_iterator __e = cend(); __f != __l; ++__f)
1755
- __tree_.__emplace_hint_multi(__e.__i_, *__f);
1851
+ __tree_.__insert_range_multi(__f, __l);
1756
1852
  }
1757
1853
 
1758
1854
  # if _LIBCPP_STD_VER >= 23
1759
1855
  template <_ContainerCompatibleRange<value_type> _Range>
1760
1856
  _LIBCPP_HIDE_FROM_ABI void insert_range(_Range&& __range) {
1761
- const_iterator __end = cend();
1762
- for (auto&& __element : __range) {
1763
- __tree_.__emplace_hint_multi(__end.__i_, std::forward<decltype(__element)>(__element));
1764
- }
1857
+ __tree_.__insert_range_multi(ranges::begin(__range), ranges::end(__range));
1765
1858
  }
1766
1859
  # endif
1767
1860
 
@@ -1783,10 +1876,10 @@ public:
1783
1876
  "node_type with incompatible allocator passed to multimap::insert()");
1784
1877
  return __tree_.template __node_handle_insert_multi<node_type>(__hint.__i_, std::move(__nh));
1785
1878
  }
1786
- _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
1879
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI node_type extract(key_type const& __key) {
1787
1880
  return __tree_.template __node_handle_extract<node_type>(__key);
1788
1881
  }
1789
- _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
1882
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI node_type extract(const_iterator __it) {
1790
1883
  return __tree_.template __node_handle_extract<node_type>(__it.__i_);
1791
1884
  }
1792
1885
  template <class _Compare2>
@@ -1821,75 +1914,89 @@ public:
1821
1914
  __tree_.swap(__m.__tree_);
1822
1915
  }
1823
1916
 
1824
- _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
1825
- _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
1917
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator find(const key_type& __k) { return __tree_.find(__k); }
1918
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator find(const key_type& __k) const { return __tree_.find(__k); }
1826
1919
  # if _LIBCPP_STD_VER >= 14
1827
1920
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1828
- _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
1921
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator find(const _K2& __k) {
1829
1922
  return __tree_.find(__k);
1830
1923
  }
1831
1924
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1832
- _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
1925
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator find(const _K2& __k) const {
1833
1926
  return __tree_.find(__k);
1834
1927
  }
1835
1928
  # endif
1836
1929
 
1837
- _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const { return __tree_.__count_multi(__k); }
1930
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type count(const key_type& __k) const {
1931
+ return __tree_.__count_multi(__k);
1932
+ }
1838
1933
  # if _LIBCPP_STD_VER >= 14
1839
1934
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1840
- _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
1935
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI size_type count(const _K2& __k) const {
1841
1936
  return __tree_.__count_multi(__k);
1842
1937
  }
1843
1938
  # endif
1844
1939
 
1845
1940
  # if _LIBCPP_STD_VER >= 20
1846
- _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
1941
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool contains(const key_type& __k) const { return find(__k) != end(); }
1847
1942
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1848
- _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
1943
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI bool contains(const _K2& __k) const {
1849
1944
  return find(__k) != end();
1850
1945
  }
1851
1946
  # endif // _LIBCPP_STD_VER >= 20
1852
1947
 
1853
- _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) { return __tree_.lower_bound(__k); }
1854
- _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const { return __tree_.lower_bound(__k); }
1948
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const key_type& __k) {
1949
+ return __tree_.__lower_bound_multi(__k);
1950
+ }
1951
+
1952
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const key_type& __k) const {
1953
+ return __tree_.__lower_bound_multi(__k);
1954
+ }
1955
+
1855
1956
  # if _LIBCPP_STD_VER >= 14
1856
1957
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1857
- _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
1858
- return __tree_.lower_bound(__k);
1958
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator lower_bound(const _K2& __k) {
1959
+ return __tree_.__lower_bound_multi(__k);
1859
1960
  }
1860
1961
 
1861
1962
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1862
- _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
1863
- return __tree_.lower_bound(__k);
1963
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator lower_bound(const _K2& __k) const {
1964
+ return __tree_.__lower_bound_multi(__k);
1864
1965
  }
1865
1966
  # endif
1866
1967
 
1867
- _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) { return __tree_.upper_bound(__k); }
1868
- _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const { return __tree_.upper_bound(__k); }
1968
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const key_type& __k) {
1969
+ return __tree_.__upper_bound_multi(__k);
1970
+ }
1971
+
1972
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const key_type& __k) const {
1973
+ return __tree_.__upper_bound_multi(__k);
1974
+ }
1975
+
1869
1976
  # if _LIBCPP_STD_VER >= 14
1870
1977
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1871
- _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
1872
- return __tree_.upper_bound(__k);
1978
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI iterator upper_bound(const _K2& __k) {
1979
+ return __tree_.__upper_bound_multi(__k);
1873
1980
  }
1874
1981
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1875
- _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
1876
- return __tree_.upper_bound(__k);
1982
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI const_iterator upper_bound(const _K2& __k) const {
1983
+ return __tree_.__upper_bound_multi(__k);
1877
1984
  }
1878
1985
  # endif
1879
1986
 
1880
- _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
1987
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const key_type& __k) {
1881
1988
  return __tree_.__equal_range_multi(__k);
1882
1989
  }
1883
- _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
1990
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const key_type& __k) const {
1884
1991
  return __tree_.__equal_range_multi(__k);
1885
1992
  }
1886
1993
  # if _LIBCPP_STD_VER >= 14
1887
1994
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1888
- _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
1995
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<iterator, iterator> equal_range(const _K2& __k) {
1889
1996
  return __tree_.__equal_range_multi(__k);
1890
1997
  }
1891
1998
  template <typename _K2, enable_if_t<__is_transparent_v<_Compare, _K2>, int> = 0>
1892
- _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
1999
+ [[__nodiscard__]] _LIBCPP_HIDE_FROM_ABI pair<const_iterator, const_iterator> equal_range(const _K2& __k) const {
1893
2000
  return __tree_.__equal_range_multi(__k);
1894
2001
  }
1895
2002
  # endif
@@ -1901,6 +2008,8 @@ private:
1901
2008
 
1902
2009
  typedef __map_node_destructor<__node_allocator> _Dp;
1903
2010
  typedef unique_ptr<__node, _Dp> __node_holder;
2011
+
2012
+ friend struct __specialized_algorithm<_Algorithm::__for_each, __single_range<multimap> >;
1904
2013
  };
1905
2014
 
1906
2015
  # if _LIBCPP_STD_VER >= 17
@@ -1908,8 +2017,8 @@ template <class _InputIterator,
1908
2017
  class _Compare = less<__iter_key_type<_InputIterator>>,
1909
2018
  class _Allocator = allocator<__iter_to_alloc_type<_InputIterator>>,
1910
2019
  class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
1911
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1912
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
2020
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
2021
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1913
2022
  multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Allocator())
1914
2023
  -> multimap<__iter_key_type<_InputIterator>, __iter_mapped_type<_InputIterator>, _Compare, _Allocator>;
1915
2024
 
@@ -1917,8 +2026,8 @@ multimap(_InputIterator, _InputIterator, _Compare = _Compare(), _Allocator = _Al
1917
2026
  template <ranges::input_range _Range,
1918
2027
  class _Compare = less<__range_key_type<_Range>>,
1919
2028
  class _Allocator = allocator<__range_to_alloc_type<_Range>>,
1920
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1921
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
2029
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
2030
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1922
2031
  multimap(from_range_t, _Range&&, _Compare = _Compare(), _Allocator = _Allocator())
1923
2032
  -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, _Compare, _Allocator>;
1924
2033
  # endif
@@ -1927,16 +2036,15 @@ template <class _Key,
1927
2036
  class _Tp,
1928
2037
  class _Compare = less<remove_const_t<_Key>>,
1929
2038
  class _Allocator = allocator<pair<const _Key, _Tp>>,
1930
- class = enable_if_t<!__is_allocator<_Compare>::value, void>,
1931
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1932
- multimap(initializer_list<pair<_Key, _Tp>>,
1933
- _Compare = _Compare(),
1934
- _Allocator = _Allocator()) -> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
2039
+ class = enable_if_t<!__is_allocator_v<_Compare>>,
2040
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
2041
+ multimap(initializer_list<pair<_Key, _Tp>>, _Compare = _Compare(), _Allocator = _Allocator())
2042
+ -> multimap<remove_const_t<_Key>, _Tp, _Compare, _Allocator>;
1935
2043
 
1936
2044
  template <class _InputIterator,
1937
2045
  class _Allocator,
1938
2046
  class = enable_if_t<__has_input_iterator_category<_InputIterator>::value, void>,
1939
- class = enable_if_t<__is_allocator<_Allocator>::value, void>>
2047
+ class = enable_if_t<__is_allocator_v<_Allocator>>>
1940
2048
  multimap(_InputIterator, _InputIterator, _Allocator)
1941
2049
  -> multimap<__iter_key_type<_InputIterator>,
1942
2050
  __iter_mapped_type<_InputIterator>,
@@ -1944,26 +2052,30 @@ multimap(_InputIterator, _InputIterator, _Allocator)
1944
2052
  _Allocator>;
1945
2053
 
1946
2054
  # if _LIBCPP_STD_VER >= 23
1947
- template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
2055
+ template <ranges::input_range _Range, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>>
1948
2056
  multimap(from_range_t, _Range&&, _Allocator)
1949
2057
  -> multimap<__range_key_type<_Range>, __range_mapped_type<_Range>, less<__range_key_type<_Range>>, _Allocator>;
1950
2058
  # endif
1951
2059
 
1952
- template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator<_Allocator>::value, void>>
1953
- multimap(initializer_list<pair<_Key, _Tp>>,
1954
- _Allocator) -> multimap<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
2060
+ template <class _Key, class _Tp, class _Allocator, class = enable_if_t<__is_allocator_v<_Allocator>>>
2061
+ multimap(initializer_list<pair<_Key, _Tp>>, _Allocator)
2062
+ -> multimap<remove_const_t<_Key>, _Tp, less<remove_const_t<_Key>>, _Allocator>;
1955
2063
  # endif
1956
2064
 
1957
- # ifndef _LIBCPP_CXX03_LANG
2065
+ # if _LIBCPP_STD_VER >= 14
1958
2066
  template <class _Key, class _Tp, class _Compare, class _Allocator>
1959
- multimap<_Key, _Tp, _Compare, _Allocator>::multimap(multimap&& __m, const allocator_type& __a)
1960
- : __tree_(std::move(__m.__tree_), typename __base::allocator_type(__a)) {
1961
- if (__a != __m.get_allocator()) {
1962
- const_iterator __e = cend();
1963
- while (!__m.empty())
1964
- __tree_.__insert_multi_from_orphaned_node(__e.__i_, std::move(__m.__tree_.remove(__m.begin().__i_)->__value_));
2067
+ struct __specialized_algorithm<_Algorithm::__for_each, __single_range<multimap<_Key, _Tp, _Compare, _Allocator>>> {
2068
+ using __map _LIBCPP_NODEBUG = multimap<_Key, _Tp, _Compare, _Allocator>;
2069
+
2070
+ static const bool __has_algorithm = true;
2071
+
2072
+ template <class _Map, class _Func, class _Proj>
2073
+ _LIBCPP_HIDE_FROM_ABI static auto operator()(_Map&& __map, _Func __func, _Proj __proj) {
2074
+ auto [_, __func2] = __specialized_algorithm<_Algorithm::__for_each, __single_range<typename __map::__base>>()(
2075
+ __map.__tree_, std::move(__func), std::move(__proj));
2076
+ return std::make_pair(__map.end(), std::move(__func2));
1965
2077
  }
1966
- }
2078
+ };
1967
2079
  # endif
1968
2080
 
1969
2081
  template <class _Key, class _Tp, class _Compare, class _Allocator>