re2 1.23.0 → 1.23.2

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 (280) hide show
  1. package/README.md +2 -0
  2. package/binding.gyp +3 -2
  3. package/package.json +5 -5
  4. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +25 -4
  5. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +6 -1
  6. package/vendor/abseil-cpp/CMakeLists.txt +2 -2
  7. package/vendor/abseil-cpp/MODULE.bazel +2 -2
  8. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +0 -1
  9. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +0 -2
  10. package/vendor/abseil-cpp/absl/algorithm/container.h +191 -140
  11. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +818 -0
  12. package/vendor/abseil-cpp/absl/base/BUILD.bazel +44 -5
  13. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +42 -3
  14. package/vendor/abseil-cpp/absl/base/attributes.h +5 -1
  15. package/vendor/abseil-cpp/absl/base/call_once_test.cc +10 -10
  16. package/vendor/abseil-cpp/absl/base/casts.cc +61 -0
  17. package/vendor/abseil-cpp/absl/base/casts.h +128 -2
  18. package/vendor/abseil-cpp/absl/base/casts_test.cc +151 -0
  19. package/vendor/abseil-cpp/absl/base/config.h +13 -37
  20. package/vendor/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  21. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +4 -0
  22. package/vendor/abseil-cpp/absl/base/internal/nullability_traits.h +71 -0
  23. package/vendor/abseil-cpp/absl/base/internal/nullability_traits_test.cc +98 -0
  24. package/vendor/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  25. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +13 -7
  26. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +16 -11
  27. package/vendor/abseil-cpp/absl/base/internal/strerror_test.cc +2 -1
  28. package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +0 -9
  29. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +0 -6
  30. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +1 -1
  31. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  32. package/vendor/abseil-cpp/absl/base/macros.h +40 -17
  33. package/vendor/abseil-cpp/absl/base/nullability.h +1 -1
  34. package/vendor/abseil-cpp/absl/base/optimization.h +1 -3
  35. package/vendor/abseil-cpp/absl/base/options.h +1 -27
  36. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +5 -8
  37. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +4 -0
  38. package/vendor/abseil-cpp/absl/container/BUILD.bazel +195 -2
  39. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +136 -2
  40. package/vendor/abseil-cpp/absl/container/btree_map.h +56 -6
  41. package/vendor/abseil-cpp/absl/container/btree_set.h +52 -6
  42. package/vendor/abseil-cpp/absl/container/btree_test.cc +107 -1
  43. package/vendor/abseil-cpp/absl/container/chunked_queue.h +755 -0
  44. package/vendor/abseil-cpp/absl/container/chunked_queue_benchmark.cc +386 -0
  45. package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +768 -0
  46. package/vendor/abseil-cpp/absl/container/fixed_array.h +4 -6
  47. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +16 -6
  48. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +1 -2
  49. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +16 -6
  50. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +0 -2
  51. package/vendor/abseil-cpp/absl/container/inlined_vector.h +12 -4
  52. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +21 -0
  53. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +14 -5
  54. package/vendor/abseil-cpp/absl/container/internal/chunked_queue.h +173 -0
  55. package/vendor/abseil-cpp/absl/container/internal/common.h +51 -0
  56. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +7 -1
  57. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +11 -0
  58. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +0 -2
  59. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +1 -2
  60. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +0 -14
  61. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +11 -8
  62. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +3 -4
  63. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +23 -6
  64. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +31 -15
  65. package/vendor/abseil-cpp/absl/container/internal/heterogeneous_lookup_testing.h +80 -0
  66. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +4 -12
  67. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +35 -10
  68. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +149 -23
  69. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +120 -126
  70. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +4 -0
  71. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +8 -0
  72. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +14 -59
  73. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +111 -22
  74. package/vendor/abseil-cpp/absl/container/internal/unordered_map_constructor_test.h +53 -112
  75. package/vendor/abseil-cpp/absl/container/internal/unordered_map_lookup_test.h +10 -15
  76. package/vendor/abseil-cpp/absl/container/internal/unordered_map_members_test.h +3 -3
  77. package/vendor/abseil-cpp/absl/container/internal/unordered_map_modifiers_test.h +45 -61
  78. package/vendor/abseil-cpp/absl/container/internal/unordered_set_constructor_test.h +53 -112
  79. package/vendor/abseil-cpp/absl/container/internal/unordered_set_lookup_test.h +6 -9
  80. package/vendor/abseil-cpp/absl/container/internal/unordered_set_members_test.h +3 -3
  81. package/vendor/abseil-cpp/absl/container/internal/unordered_set_modifiers_test.h +25 -31
  82. package/vendor/abseil-cpp/absl/container/linked_hash_map.h +666 -0
  83. package/vendor/abseil-cpp/absl/container/linked_hash_map_benchmark.cc +140 -0
  84. package/vendor/abseil-cpp/absl/container/linked_hash_map_test.cc +987 -0
  85. package/vendor/abseil-cpp/absl/container/linked_hash_set.h +527 -0
  86. package/vendor/abseil-cpp/absl/container/linked_hash_set_benchmark.cc +84 -0
  87. package/vendor/abseil-cpp/absl/container/linked_hash_set_test.cc +947 -0
  88. package/vendor/abseil-cpp/absl/container/node_hash_map.h +17 -6
  89. package/vendor/abseil-cpp/absl/container/node_hash_set.h +16 -5
  90. package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +1 -2
  91. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +79 -0
  92. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +79 -0
  93. package/vendor/abseil-cpp/absl/copts/copts.py +17 -4
  94. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +67 -13
  95. package/vendor/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  96. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +31 -0
  97. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +34 -0
  98. package/vendor/abseil-cpp/absl/debugging/failure_signal_handler.cc +2 -2
  99. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +118 -0
  100. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +71 -0
  101. package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +97 -0
  102. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  103. package/vendor/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  104. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +4 -0
  105. package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -0
  106. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +1 -1
  107. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +0 -7
  108. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  109. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +2 -1
  110. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +8 -3
  111. package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +2 -2
  112. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +35 -67
  113. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +3 -0
  114. package/vendor/abseil-cpp/absl/debugging/stacktrace_benchmark.cc +24 -1
  115. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +39 -15
  116. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  117. package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +25 -40
  118. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  119. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +1 -0
  120. package/vendor/abseil-cpp/absl/flags/declare.h +9 -0
  121. package/vendor/abseil-cpp/absl/flags/flag.h +2 -1
  122. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  123. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +3 -2
  124. package/vendor/abseil-cpp/absl/flags/marshalling.cc +1 -16
  125. package/vendor/abseil-cpp/absl/flags/parse.cc +4 -2
  126. package/vendor/abseil-cpp/absl/flags/parse_test.cc +1 -1
  127. package/vendor/abseil-cpp/absl/flags/reflection.cc +4 -3
  128. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +4 -0
  129. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +4 -0
  130. package/vendor/abseil-cpp/absl/functional/any_invocable.h +3 -1
  131. package/vendor/abseil-cpp/absl/functional/function_ref.h +125 -20
  132. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +122 -9
  133. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +13 -2
  134. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +42 -4
  135. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +11 -0
  136. package/vendor/abseil-cpp/absl/hash/hash_test.cc +5 -2
  137. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +184 -53
  138. package/vendor/abseil-cpp/absl/hash/internal/hash.h +116 -10
  139. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +43 -4
  140. package/vendor/abseil-cpp/absl/log/BUILD.bazel +2 -0
  141. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +35 -1
  142. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +59 -4
  143. package/vendor/abseil-cpp/absl/log/die_if_null.cc +3 -1
  144. package/vendor/abseil-cpp/absl/log/die_if_null.h +24 -3
  145. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +31 -1
  146. package/vendor/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  147. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +3 -1
  148. package/vendor/abseil-cpp/absl/log/internal/check_op.h +44 -18
  149. package/vendor/abseil-cpp/absl/log/internal/conditions.h +38 -35
  150. package/vendor/abseil-cpp/absl/log/internal/container.h +312 -0
  151. package/vendor/abseil-cpp/absl/log/internal/container_test.cc +254 -0
  152. package/vendor/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  153. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -2
  154. package/vendor/abseil-cpp/absl/log/internal/log_message.h +5 -1
  155. package/vendor/abseil-cpp/absl/log/internal/strip.h +30 -31
  156. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +19 -19
  157. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  158. package/vendor/abseil-cpp/absl/log/log.h +2 -2
  159. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +51 -0
  160. package/vendor/abseil-cpp/absl/meta/CMakeLists.txt +46 -0
  161. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing.h +73 -0
  162. package/vendor/abseil-cpp/absl/meta/internal/constexpr_testing_test.cc +40 -0
  163. package/vendor/abseil-cpp/absl/meta/internal/requires.h +67 -0
  164. package/vendor/abseil-cpp/absl/meta/internal/requires_test.cc +66 -0
  165. package/vendor/abseil-cpp/absl/meta/type_traits.h +42 -1
  166. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +14 -0
  167. package/vendor/abseil-cpp/absl/numeric/int128.h +41 -21
  168. package/vendor/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  169. package/vendor/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  170. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +52 -5
  171. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +1 -0
  172. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +1 -0
  173. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +18 -7
  174. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +1 -0
  175. package/vendor/abseil-cpp/absl/random/internal/fastmath_test.cc +3 -5
  176. package/vendor/abseil-cpp/absl/random/internal/platform.h +0 -13
  177. package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +0 -1
  178. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +1 -27
  179. package/vendor/abseil-cpp/absl/status/BUILD.bazel +17 -0
  180. package/vendor/abseil-cpp/absl/status/CMakeLists.txt +16 -0
  181. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +4 -2
  182. package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +2 -2
  183. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +2 -1
  184. package/vendor/abseil-cpp/absl/status/status.cc +4 -0
  185. package/vendor/abseil-cpp/absl/status/status.h +5 -0
  186. package/vendor/abseil-cpp/absl/status/status_matchers.h +48 -0
  187. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +27 -0
  188. package/vendor/abseil-cpp/absl/status/status_test.cc +1 -0
  189. package/vendor/abseil-cpp/absl/status/statusor.h +1 -1
  190. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +101 -21
  191. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +99 -5
  192. package/vendor/abseil-cpp/absl/strings/ascii.h +9 -4
  193. package/vendor/abseil-cpp/absl/strings/cord.cc +15 -10
  194. package/vendor/abseil-cpp/absl/strings/cord.h +1 -1
  195. package/vendor/abseil-cpp/absl/strings/escaping.cc +126 -94
  196. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  197. package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite_test.cc +95 -0
  198. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +2 -0
  199. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree_test.cc +8 -8
  200. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +24 -18
  201. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +10 -16
  202. package/vendor/abseil-cpp/absl/strings/internal/escaping.h +9 -7
  203. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.cc +107 -0
  204. package/vendor/abseil-cpp/absl/strings/internal/generic_printer.h +115 -0
  205. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +423 -0
  206. package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +685 -0
  207. package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +0 -12
  208. package/vendor/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  209. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +21 -7
  210. package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +495 -8
  211. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -15
  212. package/vendor/abseil-cpp/absl/strings/numbers.cc +71 -8
  213. package/vendor/abseil-cpp/absl/strings/numbers.h +25 -12
  214. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +70 -0
  215. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +194 -0
  216. package/vendor/abseil-cpp/absl/strings/resize_and_overwrite_test.cc +154 -0
  217. package/vendor/abseil-cpp/absl/strings/str_cat.cc +96 -91
  218. package/vendor/abseil-cpp/absl/strings/str_cat.h +17 -12
  219. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +4 -4
  220. package/vendor/abseil-cpp/absl/strings/str_split.h +1 -1
  221. package/vendor/abseil-cpp/absl/strings/str_split_test.cc +1 -1
  222. package/vendor/abseil-cpp/absl/strings/string_view.h +8 -718
  223. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +1 -1265
  224. package/vendor/abseil-cpp/absl/strings/substitute.cc +24 -24
  225. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +2 -3
  226. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +1 -0
  227. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  228. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout_test.cc +15 -5
  229. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +2 -1
  230. package/vendor/abseil-cpp/absl/synchronization/mutex.h +47 -23
  231. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  232. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +2 -0
  233. package/vendor/abseil-cpp/absl/time/civil_time_benchmark.cc +1 -2
  234. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +58 -103
  235. package/vendor/abseil-cpp/absl/time/clock.cc +18 -16
  236. package/vendor/abseil-cpp/absl/time/clock_test.cc +2 -2
  237. package/vendor/abseil-cpp/absl/time/duration_benchmark.cc +144 -0
  238. package/vendor/abseil-cpp/absl/time/duration_test.cc +26 -29
  239. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +7 -1
  240. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +4 -2
  241. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  242. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +186 -0
  243. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  244. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  245. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Ensenada +0 -0
  246. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Santa_Isabel +0 -0
  247. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Tijuana +0 -0
  248. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Mexico/BajaNorte +0 -0
  249. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/iso3166.tab +9 -9
  250. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +12 -12
  251. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +47 -47
  252. package/vendor/abseil-cpp/absl/time/time.cc +4 -4
  253. package/vendor/abseil-cpp/absl/time/time.h +10 -10
  254. package/vendor/abseil-cpp/absl/time/time_test.cc +1 -0
  255. package/vendor/abseil-cpp/absl/types/compare.h +62 -61
  256. package/vendor/abseil-cpp/absl/types/compare_test.cc +3 -3
  257. package/vendor/abseil-cpp/absl/types/internal/span.h +1 -0
  258. package/vendor/abseil-cpp/absl/types/optional.h +2 -2
  259. package/vendor/abseil-cpp/absl/types/span.h +10 -2
  260. package/vendor/abseil-cpp/absl/utility/utility.h +13 -0
  261. package/vendor/abseil-cpp/ci/absl_alternate_options.h +0 -1
  262. package/vendor/abseil-cpp/ci/cmake_common.sh +1 -1
  263. package/vendor/abseil-cpp/ci/cmake_install_test.sh +6 -0
  264. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +1 -0
  265. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +2 -0
  266. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +1 -0
  267. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +1 -0
  268. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +1 -0
  269. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +1 -0
  270. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +1 -0
  271. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +6 -0
  272. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +6 -0
  273. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +3 -2
  274. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +5 -0
  275. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -0
  276. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -0
  277. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +6 -1
  278. package/vendor/abseil-cpp/absl/base/internal/identity.h +0 -39
  279. package/vendor/abseil-cpp/absl/strings/string_view.cc +0 -257
  280. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +0 -380
@@ -81,12 +81,12 @@ void HashtablezInfo::PrepareForSampling(int64_t stride,
81
81
  capacity.store(0, std::memory_order_relaxed);
82
82
  size.store(0, std::memory_order_relaxed);
83
83
  num_erases.store(0, std::memory_order_relaxed);
84
+ num_insert_hits.store(0, std::memory_order_relaxed);
84
85
  num_rehashes.store(0, std::memory_order_relaxed);
85
86
  max_probe_length.store(0, std::memory_order_relaxed);
86
87
  total_probe_length.store(0, std::memory_order_relaxed);
87
88
  hashes_bitwise_or.store(0, std::memory_order_relaxed);
88
89
  hashes_bitwise_and.store(~size_t{}, std::memory_order_relaxed);
89
- hashes_bitwise_xor.store(0, std::memory_order_relaxed);
90
90
  max_reserve.store(0, std::memory_order_relaxed);
91
91
 
92
92
  create_time = absl::Now();
@@ -230,8 +230,8 @@ void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
230
230
  }
231
231
  }
232
232
 
233
- void RecordInsertSlow(HashtablezInfo* info, size_t hash,
234
- size_t distance_from_desired) {
233
+ void RecordInsertMissSlow(HashtablezInfo* info, size_t hash,
234
+ size_t distance_from_desired) {
235
235
  // SwissTables probe in groups of 16, so scale this to count items probes and
236
236
  // not offset from desired.
237
237
  size_t probe_length = distance_from_desired;
@@ -243,7 +243,6 @@ void RecordInsertSlow(HashtablezInfo* info, size_t hash,
243
243
 
244
244
  info->hashes_bitwise_and.fetch_and(hash, std::memory_order_relaxed);
245
245
  info->hashes_bitwise_or.fetch_or(hash, std::memory_order_relaxed);
246
- info->hashes_bitwise_xor.fetch_xor(hash, std::memory_order_relaxed);
247
246
  info->max_probe_length.store(
248
247
  std::max(info->max_probe_length.load(std::memory_order_relaxed),
249
248
  probe_length),
@@ -82,12 +82,12 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
82
82
  std::atomic<size_t> capacity;
83
83
  std::atomic<size_t> size;
84
84
  std::atomic<size_t> num_erases;
85
+ std::atomic<size_t> num_insert_hits;
85
86
  std::atomic<size_t> num_rehashes;
86
87
  std::atomic<size_t> max_probe_length;
87
88
  std::atomic<size_t> total_probe_length;
88
89
  std::atomic<size_t> hashes_bitwise_or;
89
90
  std::atomic<size_t> hashes_bitwise_and;
90
- std::atomic<size_t> hashes_bitwise_xor;
91
91
  std::atomic<size_t> max_reserve;
92
92
 
93
93
  // All of the fields below are set by `PrepareForSampling`, they must not be
@@ -111,6 +111,16 @@ struct HashtablezInfo : public profiling_internal::Sample<HashtablezInfo> {
111
111
 
112
112
  void RecordRehashSlow(HashtablezInfo* info, size_t total_probe_length);
113
113
 
114
+ // This is inline to avoid calling convention overhead for an otherwise
115
+ // lightweight operation.
116
+ inline void RecordInsertHitSlow(HashtablezInfo* info) {
117
+ // We avoid fetch_add since no other thread should be mutating the table
118
+ // simultaneously without synchronization.
119
+ info->num_insert_hits.store(
120
+ info->num_insert_hits.load(std::memory_order_relaxed) + 1,
121
+ std::memory_order_relaxed);
122
+ }
123
+
114
124
  void RecordReservationSlow(HashtablezInfo* info, size_t target_capacity);
115
125
 
116
126
  void RecordClearedReservationSlow(HashtablezInfo* info);
@@ -118,8 +128,8 @@ void RecordClearedReservationSlow(HashtablezInfo* info);
118
128
  void RecordStorageChangedSlow(HashtablezInfo* info, size_t size,
119
129
  size_t capacity);
120
130
 
121
- void RecordInsertSlow(HashtablezInfo* info, size_t hash,
122
- size_t distance_from_desired);
131
+ void RecordInsertMissSlow(HashtablezInfo* info, size_t hash,
132
+ size_t distance_from_desired);
123
133
 
124
134
  void RecordEraseSlow(HashtablezInfo* info);
125
135
 
@@ -174,9 +184,9 @@ class HashtablezInfoHandle {
174
184
  RecordClearedReservationSlow(info_);
175
185
  }
176
186
 
177
- inline void RecordInsert(size_t hash, size_t distance_from_desired) {
187
+ inline void RecordInsertMiss(size_t hash, size_t distance_from_desired) {
178
188
  if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
179
- RecordInsertSlow(info_, hash, distance_from_desired);
189
+ RecordInsertMissSlow(info_, hash, distance_from_desired);
180
190
  }
181
191
 
182
192
  inline void RecordErase() {
@@ -184,6 +194,11 @@ class HashtablezInfoHandle {
184
194
  RecordEraseSlow(info_);
185
195
  }
186
196
 
197
+ inline void RecordInsertHit() {
198
+ if (ABSL_PREDICT_TRUE(info_ == nullptr)) return;
199
+ RecordInsertHitSlow(info_);
200
+ }
201
+
187
202
  friend inline void swap(HashtablezInfoHandle& lhs,
188
203
  HashtablezInfoHandle& rhs) {
189
204
  std::swap(lhs.info_, rhs.info_);
@@ -207,8 +222,10 @@ class HashtablezInfoHandle {
207
222
  inline void RecordRehash(size_t /*total_probe_length*/) {}
208
223
  inline void RecordReservation(size_t /*target_capacity*/) {}
209
224
  inline void RecordClearedReservation() {}
210
- inline void RecordInsert(size_t /*hash*/, size_t /*distance_from_desired*/) {}
225
+ inline void RecordInsertMiss(size_t /*hash*/,
226
+ size_t /*distance_from_desired*/) {}
211
227
  inline void RecordErase() {}
228
+ inline void RecordInsertHit() {}
212
229
 
213
230
  friend inline void swap(HashtablezInfoHandle& /*lhs*/,
214
231
  HashtablezInfoHandle& /*rhs*/) {}
@@ -99,12 +99,12 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
99
99
  EXPECT_EQ(info.capacity.load(), 0);
100
100
  EXPECT_EQ(info.size.load(), 0);
101
101
  EXPECT_EQ(info.num_erases.load(), 0);
102
+ EXPECT_EQ(info.num_insert_hits.load(), 0);
102
103
  EXPECT_EQ(info.num_rehashes.load(), 0);
103
104
  EXPECT_EQ(info.max_probe_length.load(), 0);
104
105
  EXPECT_EQ(info.total_probe_length.load(), 0);
105
106
  EXPECT_EQ(info.hashes_bitwise_or.load(), 0);
106
107
  EXPECT_EQ(info.hashes_bitwise_and.load(), ~size_t{});
107
- EXPECT_EQ(info.hashes_bitwise_xor.load(), 0);
108
108
  EXPECT_EQ(info.max_reserve.load(), 0);
109
109
  EXPECT_GE(info.create_time, test_start);
110
110
  EXPECT_EQ(info.weight, test_stride);
@@ -116,11 +116,11 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
116
116
  info.capacity.store(1, std::memory_order_relaxed);
117
117
  info.size.store(1, std::memory_order_relaxed);
118
118
  info.num_erases.store(1, std::memory_order_relaxed);
119
+ info.num_insert_hits.store(1, std::memory_order_relaxed);
119
120
  info.max_probe_length.store(1, std::memory_order_relaxed);
120
121
  info.total_probe_length.store(1, std::memory_order_relaxed);
121
122
  info.hashes_bitwise_or.store(1, std::memory_order_relaxed);
122
123
  info.hashes_bitwise_and.store(1, std::memory_order_relaxed);
123
- info.hashes_bitwise_xor.store(1, std::memory_order_relaxed);
124
124
  info.max_reserve.store(1, std::memory_order_relaxed);
125
125
  info.create_time = test_start - absl::Hours(20);
126
126
 
@@ -131,12 +131,12 @@ TEST(HashtablezInfoTest, PrepareForSampling) {
131
131
  EXPECT_EQ(info.capacity.load(), 0);
132
132
  EXPECT_EQ(info.size.load(), 0);
133
133
  EXPECT_EQ(info.num_erases.load(), 0);
134
+ EXPECT_EQ(info.num_insert_hits.load(), 0);
134
135
  EXPECT_EQ(info.num_rehashes.load(), 0);
135
136
  EXPECT_EQ(info.max_probe_length.load(), 0);
136
137
  EXPECT_EQ(info.total_probe_length.load(), 0);
137
138
  EXPECT_EQ(info.hashes_bitwise_or.load(), 0);
138
139
  EXPECT_EQ(info.hashes_bitwise_and.load(), ~size_t{});
139
- EXPECT_EQ(info.hashes_bitwise_xor.load(), 0);
140
140
  EXPECT_EQ(info.max_reserve.load(), 0);
141
141
  EXPECT_EQ(info.weight, 2 * test_stride);
142
142
  EXPECT_EQ(info.inline_element_size, test_element_size);
@@ -166,7 +166,7 @@ TEST(HashtablezInfoTest, RecordStorageChanged) {
166
166
  EXPECT_EQ(info.capacity.load(), 20);
167
167
  }
168
168
 
169
- TEST(HashtablezInfoTest, RecordInsert) {
169
+ TEST(HashtablezInfoTest, RecordInsertMiss) {
170
170
  HashtablezInfo info;
171
171
  absl::MutexLock l(info.init_mu);
172
172
  const int64_t test_stride = 25;
@@ -179,21 +179,18 @@ TEST(HashtablezInfoTest, RecordInsert) {
179
179
  /*value_size=*/test_value_size,
180
180
  /*soo_capacity_value=*/0);
181
181
  EXPECT_EQ(info.max_probe_length.load(), 0);
182
- RecordInsertSlow(&info, 0x0000FF00, 6 * kProbeLength);
182
+ RecordInsertMissSlow(&info, 0x0000FF00, 6 * kProbeLength);
183
183
  EXPECT_EQ(info.max_probe_length.load(), 6);
184
184
  EXPECT_EQ(info.hashes_bitwise_and.load(), 0x0000FF00);
185
185
  EXPECT_EQ(info.hashes_bitwise_or.load(), 0x0000FF00);
186
- EXPECT_EQ(info.hashes_bitwise_xor.load(), 0x0000FF00);
187
- RecordInsertSlow(&info, 0x000FF000, 4 * kProbeLength);
186
+ RecordInsertMissSlow(&info, 0x000FF000, 4 * kProbeLength);
188
187
  EXPECT_EQ(info.max_probe_length.load(), 6);
189
188
  EXPECT_EQ(info.hashes_bitwise_and.load(), 0x0000F000);
190
189
  EXPECT_EQ(info.hashes_bitwise_or.load(), 0x000FFF00);
191
- EXPECT_EQ(info.hashes_bitwise_xor.load(), 0x000F0F00);
192
- RecordInsertSlow(&info, 0x00FF0000, 12 * kProbeLength);
190
+ RecordInsertMissSlow(&info, 0x00FF0000, 12 * kProbeLength);
193
191
  EXPECT_EQ(info.max_probe_length.load(), 12);
194
192
  EXPECT_EQ(info.hashes_bitwise_and.load(), 0x00000000);
195
193
  EXPECT_EQ(info.hashes_bitwise_or.load(), 0x00FFFF00);
196
- EXPECT_EQ(info.hashes_bitwise_xor.load(), 0x00F00F00);
197
194
  }
198
195
 
199
196
  TEST(HashtablezInfoTest, RecordErase) {
@@ -210,7 +207,7 @@ TEST(HashtablezInfoTest, RecordErase) {
210
207
  /*soo_capacity_value=*/1);
211
208
  EXPECT_EQ(info.num_erases.load(), 0);
212
209
  EXPECT_EQ(info.size.load(), 0);
213
- RecordInsertSlow(&info, 0x0000FF00, 6 * kProbeLength);
210
+ RecordInsertMissSlow(&info, 0x0000FF00, 6 * kProbeLength);
214
211
  EXPECT_EQ(info.size.load(), 1);
215
212
  RecordEraseSlow(&info);
216
213
  EXPECT_EQ(info.size.load(), 0);
@@ -221,6 +218,25 @@ TEST(HashtablezInfoTest, RecordErase) {
221
218
  EXPECT_EQ(info.soo_capacity, 1);
222
219
  }
223
220
 
221
+ TEST(HashtablezInfoTest, RecordInsertHit) {
222
+ const int64_t test_stride = 31;
223
+ const size_t test_element_size = 29;
224
+ const size_t test_key_size = 27;
225
+ const size_t test_value_size = 25;
226
+
227
+ HashtablezInfo info;
228
+ absl::MutexLock l(info.init_mu);
229
+ info.PrepareForSampling(test_stride, test_element_size,
230
+ /*key_size=*/test_key_size,
231
+ /*value_size=*/test_value_size,
232
+ /*soo_capacity_value=*/1);
233
+ EXPECT_EQ(info.num_insert_hits.load(), 0);
234
+ RecordInsertHitSlow(&info);
235
+ EXPECT_EQ(info.num_insert_hits.load(), 1);
236
+ RecordInsertHitSlow(&info);
237
+ EXPECT_EQ(info.num_insert_hits.load(), 2);
238
+ }
239
+
224
240
  TEST(HashtablezInfoTest, RecordRehash) {
225
241
  const int64_t test_stride = 33;
226
242
  const size_t test_element_size = 31;
@@ -233,10 +249,10 @@ TEST(HashtablezInfoTest, RecordRehash) {
233
249
  /*value_size=*/test_value_size,
234
250
 
235
251
  /*soo_capacity_value=*/0);
236
- RecordInsertSlow(&info, 0x1, 0);
237
- RecordInsertSlow(&info, 0x2, kProbeLength);
238
- RecordInsertSlow(&info, 0x4, kProbeLength);
239
- RecordInsertSlow(&info, 0x8, 2 * kProbeLength);
252
+ RecordInsertMissSlow(&info, 0x1, 0);
253
+ RecordInsertMissSlow(&info, 0x2, kProbeLength);
254
+ RecordInsertMissSlow(&info, 0x4, kProbeLength);
255
+ RecordInsertMissSlow(&info, 0x8, 2 * kProbeLength);
240
256
  EXPECT_EQ(info.size.load(), 4);
241
257
  EXPECT_EQ(info.total_probe_length.load(), 4);
242
258
 
@@ -0,0 +1,80 @@
1
+ // Copyright 2025 The Abseil Authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // https://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
16
+ #define ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
17
+
18
+ #include <cstddef>
19
+ #include <ostream>
20
+
21
+ #include "gmock/gmock.h"
22
+ #include "absl/base/config.h"
23
+ #include "absl/container/internal/test_instance_tracker.h"
24
+
25
+ namespace absl {
26
+ ABSL_NAMESPACE_BEGIN
27
+ namespace container_internal {
28
+
29
+ // An expensive class that is convertible to CheapType to demonstrate
30
+ // heterogeneous lookups.
31
+ class ExpensiveType : public absl::test_internal::CopyableMovableInstance {
32
+ public:
33
+ explicit ExpensiveType(int value)
34
+ : absl::test_internal::CopyableMovableInstance(value) {}
35
+
36
+ friend std::ostream& operator<<(std::ostream& os, const ExpensiveType& a) {
37
+ return os << a.value();
38
+ }
39
+ };
40
+
41
+ class CheapType {
42
+ public:
43
+ explicit CheapType(const int value) : value_(value) {}
44
+
45
+ explicit operator ExpensiveType() const { return ExpensiveType(value_); }
46
+
47
+ int value() const { return value_; }
48
+
49
+ private:
50
+ int value_;
51
+ };
52
+
53
+ struct HeterogeneousHash {
54
+ using is_transparent = void;
55
+ size_t operator()(const ExpensiveType& a) const { return a.value(); }
56
+ size_t operator()(const CheapType& a) const { return a.value(); }
57
+ };
58
+
59
+ struct HeterogeneousEqual {
60
+ using is_transparent = void;
61
+ bool operator()(const ExpensiveType& a, const ExpensiveType& b) const {
62
+ return a.value() == b.value();
63
+ }
64
+ bool operator()(const ExpensiveType& a, const CheapType& b) const {
65
+ return a.value() == b.value();
66
+ }
67
+ bool operator()(const CheapType& a, const ExpensiveType& b) const {
68
+ return a.value() == b.value();
69
+ }
70
+ };
71
+
72
+ MATCHER_P(HasExpensiveValue, n, "") {
73
+ return ::testing::ExplainMatchResult(n, arg.value(), result_listener);
74
+ }
75
+
76
+ } // namespace container_internal
77
+ ABSL_NAMESPACE_END
78
+ } // namespace absl
79
+
80
+ #endif // ABSL_CONTAINER_INTERNAL_HETEROGENEOUS_LOOKUP_TESTING_H_
@@ -27,7 +27,6 @@
27
27
 
28
28
  #include "absl/base/attributes.h"
29
29
  #include "absl/base/config.h"
30
- #include "absl/base/internal/identity.h"
31
30
  #include "absl/base/macros.h"
32
31
  #include "absl/container/internal/compressed_tuple.h"
33
32
  #include "absl/memory/memory.h"
@@ -127,7 +126,7 @@ struct MallocAdapter {
127
126
  };
128
127
 
129
128
  template <typename A, typename ValueAdapter>
130
- void ConstructElements(absl::internal::type_identity_t<A>& allocator,
129
+ void ConstructElements(absl::type_identity_t<A>& allocator,
131
130
  Pointer<A> construct_first, ValueAdapter& values,
132
131
  SizeType<A> construct_size) {
133
132
  for (SizeType<A> i = 0; i < construct_size; ++i) {
@@ -796,16 +795,9 @@ auto Storage<T, N, A>::Insert(ConstIterator<A> pos, ValueAdapter values,
796
795
  move_construction_values,
797
796
  move_construction.size());
798
797
 
799
- for (Pointer<A>
800
- destination = move_assignment.data() + move_assignment.size(),
801
- last_destination = move_assignment.data(),
802
- source = move_assignment_values + move_assignment.size();
803
- ;) {
804
- --destination;
805
- --source;
806
- if (destination < last_destination) break;
807
- *destination = std::move(*source);
808
- }
798
+ std::move_backward(move_assignment_values,
799
+ move_assignment_values + move_assignment.size(),
800
+ move_assignment.data() + move_assignment.size());
809
801
 
810
802
  AssignElements<A>(insert_assignment.data(), values,
811
803
  insert_assignment.size());
@@ -31,8 +31,20 @@ namespace absl {
31
31
  ABSL_NAMESPACE_BEGIN
32
32
  namespace container_internal {
33
33
 
34
- template <class Policy, class Hash, class Eq, class Alloc>
35
- class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
34
+ template <class Policy, class... Params>
35
+ class raw_hash_map;
36
+
37
+ template <typename Policy, typename Hash, typename Eq, typename Alloc>
38
+ struct InstantiateRawHashMap {
39
+ using type = typename ApplyWithoutDefaultSuffix<
40
+ raw_hash_map,
41
+ TypeList<int, typename Policy::DefaultHash, typename Policy::DefaultEq,
42
+ typename Policy::DefaultAlloc>,
43
+ TypeList<Policy, Hash, Eq, Alloc>>::type;
44
+ };
45
+
46
+ template <class Policy, class... Params>
47
+ class raw_hash_map : public raw_hash_set<Policy, Params...> {
36
48
  // P is Policy. It's passed as a template argument to support maps that have
37
49
  // incomplete types as values, as in unordered_map<K, IncompleteType>.
38
50
  // MappedReference<> may be a non-reference type.
@@ -45,6 +57,10 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
45
57
  using MappedConstReference = decltype(P::value(
46
58
  std::addressof(std::declval<typename raw_hash_map::const_reference>())));
47
59
 
60
+ using Hash = typename raw_hash_map::raw_hash_set::hasher;
61
+ using Eq = typename raw_hash_map::raw_hash_set::key_equal;
62
+ using Alloc = typename raw_hash_map::raw_hash_set::allocator_type;
63
+
48
64
  template <class K>
49
65
  using key_arg =
50
66
  typename KeyArg<IsTransparent<Eq>::value && IsTransparent<Hash>::value>::
@@ -205,7 +221,8 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
205
221
  !std::is_convertible<K, const_iterator>::value, int>::type = 0>
206
222
  std::pair<iterator, bool> try_emplace(key_arg<K> &&k, Args &&...args)
207
223
  ABSL_ATTRIBUTE_LIFETIME_BOUND {
208
- return try_emplace_impl(std::forward<K>(k), std::forward<Args>(args)...);
224
+ return try_emplace_impl(std::forward<key_arg<K>>(k),
225
+ std::forward<Args>(args)...);
209
226
  }
210
227
 
211
228
  template <class K = key_type, class... Args,
@@ -215,7 +232,7 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
215
232
  std::pair<iterator, bool> try_emplace(
216
233
  key_arg<K> &&k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
217
234
  Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
218
- return this->template try_emplace<K, 0>(std::forward<K>(k),
235
+ return this->template try_emplace<K, 0>(std::forward<key_arg<K>>(k),
219
236
  std::forward<Args>(args)...);
220
237
  }
221
238
 
@@ -241,14 +258,15 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
241
258
  class... Args>
242
259
  iterator try_emplace(const_iterator, key_arg<K> &&k,
243
260
  Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
244
- return try_emplace(std::forward<K>(k), std::forward<Args>(args)...).first;
261
+ return try_emplace(std::forward<key_arg<K>>(k), std::forward<Args>(args)...)
262
+ .first;
245
263
  }
246
264
  template <class K = key_type, class... Args,
247
265
  EnableIf<LifetimeBoundK<K, true, K *>> = 0>
248
266
  iterator try_emplace(const_iterator hint,
249
267
  key_arg<K> &&k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
250
268
  Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
251
- return this->template try_emplace<K, 0>(hint, std::forward<K>(k),
269
+ return this->template try_emplace<K, 0>(hint, std::forward<key_arg<K>>(k),
252
270
  std::forward<Args>(args)...);
253
271
  }
254
272
 
@@ -264,7 +282,7 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
264
282
  const key_arg<K> &k
265
283
  ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this),
266
284
  Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
267
- return this->template try_emplace<K, 0>(hint, std::forward<K>(k),
285
+ return this->template try_emplace<K, 0>(hint, k,
268
286
  std::forward<Args>(args)...);
269
287
  }
270
288
 
@@ -296,15 +314,15 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
296
314
  // It is safe to use unchecked_deref here because try_emplace
297
315
  // will always return an iterator pointing to a valid item in the table,
298
316
  // since it inserts if nothing is found for the given key.
299
- return Policy::value(
300
- &this->unchecked_deref(try_emplace(std::forward<K>(key)).first));
317
+ return Policy::value(&this->unchecked_deref(
318
+ try_emplace(std::forward<key_arg<K>>(key)).first));
301
319
  }
302
320
  template <class K = key_type, class P = Policy, int &...,
303
321
  EnableIf<LifetimeBoundK<K, true, K *>> = 0>
304
322
  MappedReference<P> operator[](
305
323
  key_arg<K> &&key ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this))
306
324
  ABSL_ATTRIBUTE_LIFETIME_BOUND {
307
- return this->template operator[]<K, P, 0>(std::forward<K>(key));
325
+ return this->template operator[]<K, P, 0>(std::forward<key_arg<K>>(key));
308
326
  }
309
327
 
310
328
  template <class K = key_type, class P = Policy,
@@ -325,6 +343,13 @@ class raw_hash_map : public raw_hash_set<Policy, Hash, Eq, Alloc> {
325
343
  }
326
344
 
327
345
  private:
346
+ static_assert(
347
+ std::is_same_v<
348
+ typename InstantiateRawHashMap<Policy, Hash, Eq, Alloc>::type,
349
+ raw_hash_map>,
350
+ "Redundant template parameters were passed. Use InstantiateRawHashMap<> "
351
+ "instead");
352
+
328
353
  template <class K, class V>
329
354
  std::pair<iterator, bool> insert_or_assign_impl(K&& k, V&& v)
330
355
  ABSL_ATTRIBUTE_LIFETIME_BOUND {