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
@@ -34,6 +34,57 @@ package(
34
34
 
35
35
  licenses(["notice"])
36
36
 
37
+ cc_library(
38
+ name = "constexpr_testing",
39
+ testonly = 1,
40
+ hdrs = ["internal/constexpr_testing.h"],
41
+ copts = ABSL_DEFAULT_COPTS,
42
+ linkopts = ABSL_DEFAULT_LINKOPTS,
43
+ visibility = [
44
+ "//absl:__subpackages__",
45
+ ],
46
+ deps = [
47
+ "//absl/base:config",
48
+ ],
49
+ )
50
+
51
+ cc_test(
52
+ name = "constexpr_testing_test",
53
+ srcs = ["internal/constexpr_testing_test.cc"],
54
+ copts = ABSL_TEST_COPTS,
55
+ linkopts = ABSL_DEFAULT_LINKOPTS,
56
+ deps = [
57
+ ":constexpr_testing",
58
+ "@googletest//:gtest",
59
+ "@googletest//:gtest_main",
60
+ ],
61
+ )
62
+
63
+ cc_library(
64
+ name = "requires",
65
+ hdrs = ["internal/requires.h"],
66
+ copts = ABSL_DEFAULT_COPTS,
67
+ linkopts = ABSL_DEFAULT_LINKOPTS,
68
+ visibility = [
69
+ "//absl:__subpackages__",
70
+ ],
71
+ deps = [
72
+ "//absl/base:config",
73
+ ],
74
+ )
75
+
76
+ cc_test(
77
+ name = "requires_test",
78
+ srcs = ["internal/requires_test.cc"],
79
+ copts = ABSL_TEST_COPTS,
80
+ linkopts = ABSL_DEFAULT_LINKOPTS,
81
+ deps = [
82
+ ":requires",
83
+ "@googletest//:gtest",
84
+ "@googletest//:gtest_main",
85
+ ],
86
+ )
87
+
37
88
  cc_library(
38
89
  name = "type_traits",
39
90
  hdrs = ["type_traits.h"],
@@ -14,6 +14,52 @@
14
14
  # limitations under the License.
15
15
  #
16
16
 
17
+ absl_cc_library(
18
+ NAME
19
+ constexpr_testing_internal
20
+ HDRS
21
+ "internal/constexpr_testing.h"
22
+ COPTS
23
+ ${ABSL_DEFAULT_COPTS}
24
+ DEPS
25
+ absl::config
26
+ )
27
+
28
+ absl_cc_test(
29
+ NAME
30
+ constexpr_testing_test
31
+ SRCS
32
+ "internal/constexpr_testing_test.cc"
33
+ COPTS
34
+ ${ABSL_TEST_COPTS}
35
+ DEPS
36
+ absl::constexpr_testing_internal
37
+ GTest::gmock_main
38
+ )
39
+
40
+ absl_cc_library(
41
+ NAME
42
+ requires_internal
43
+ HDRS
44
+ "internal/requires.h"
45
+ COPTS
46
+ ${ABSL_DEFAULT_COPTS}
47
+ DEPS
48
+ absl::config
49
+ )
50
+
51
+ absl_cc_test(
52
+ NAME
53
+ requires_test
54
+ SRCS
55
+ "internal/requires_test.cc"
56
+ COPTS
57
+ ${ABSL_TEST_COPTS}
58
+ DEPS
59
+ absl::requires_internal
60
+ GTest::gmock_main
61
+ )
62
+
17
63
  absl_cc_library(
18
64
  NAME
19
65
  type_traits
@@ -0,0 +1,73 @@
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_META_INTERNAL_CONSTEXPR_TESTING_H_
16
+ #define ABSL_META_INTERNAL_CONSTEXPR_TESTING_H_
17
+
18
+ #include <type_traits>
19
+
20
+ #include "absl/base/config.h"
21
+
22
+ namespace absl {
23
+ ABSL_NAMESPACE_BEGIN
24
+ namespace meta_internal {
25
+
26
+ // HasConstexprEvaluation([] { ... }) will evaluate to `true` if the
27
+ // lambda can be evaluated in a constant expression and `false`
28
+ // otherwise.
29
+ // The return type of the lambda is not relevant, as long as the whole
30
+ // evaluation works in a constant expression.
31
+ template <typename F>
32
+ constexpr bool HasConstexprEvaluation(F f);
33
+
34
+ /// Implementation details below ///
35
+
36
+ namespace internal_constexpr_evaluation {
37
+
38
+ #ifdef __clang__
39
+ #pragma clang diagnostic push
40
+ #pragma clang diagnostic ignored "-Wuninitialized"
41
+ #endif
42
+ // This will give a constexpr instance of `F`.
43
+ // This works for captureless lambdas because they have no state and the copy
44
+ // constructor does not look at the input reference.
45
+ template <typename F>
46
+ constexpr F default_instance = default_instance<F>;
47
+ #ifdef __clang__
48
+ #pragma clang diagnostic pop
49
+ #endif
50
+
51
+ template <typename F>
52
+ constexpr std::integral_constant<bool, (default_instance<F>(), true)> Tester(
53
+ int) {
54
+ return {};
55
+ }
56
+
57
+ template <typename S>
58
+ constexpr std::false_type Tester(char) {
59
+ return {};
60
+ }
61
+
62
+ } // namespace internal_constexpr_evaluation
63
+
64
+ template <typename F>
65
+ constexpr bool HasConstexprEvaluation(F) {
66
+ return internal_constexpr_evaluation::Tester<F>(0);
67
+ }
68
+
69
+ } // namespace meta_internal
70
+ ABSL_NAMESPACE_END
71
+ } // namespace absl
72
+
73
+ #endif // ABSL_META_INTERNAL_CONSTEXPR_TESTING_H_
@@ -0,0 +1,40 @@
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
+ #include "absl/meta/internal/constexpr_testing.h"
16
+
17
+ #include <map>
18
+ #include <string_view>
19
+
20
+ #include "gmock/gmock.h"
21
+ #include "gtest/gtest.h"
22
+
23
+ namespace {
24
+
25
+ TEST(ConstexprTesting, Basic) {
26
+ using absl::meta_internal::HasConstexprEvaluation;
27
+
28
+ EXPECT_TRUE(HasConstexprEvaluation([] {}));
29
+ static constexpr int const_global = 7;
30
+ EXPECT_TRUE(HasConstexprEvaluation([] { return const_global; }));
31
+ EXPECT_TRUE(HasConstexprEvaluation([] { return 0; }));
32
+ EXPECT_TRUE(HasConstexprEvaluation([] { return std::string_view{}; }));
33
+
34
+ static int nonconst_global;
35
+ EXPECT_FALSE(HasConstexprEvaluation([] { return nonconst_global; }));
36
+ EXPECT_FALSE(HasConstexprEvaluation([] { std::abort(); }));
37
+ EXPECT_FALSE(HasConstexprEvaluation([] { return std::map<int, int>(); }));
38
+ }
39
+
40
+ } // namespace
@@ -0,0 +1,67 @@
1
+ // Copyright 2017 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_META_INTERNAL_REQUIRES_H_
16
+ #define ABSL_META_INTERNAL_REQUIRES_H_
17
+
18
+ #include <type_traits>
19
+
20
+ #include "absl/base/config.h"
21
+
22
+ namespace absl {
23
+ ABSL_NAMESPACE_BEGIN
24
+ namespace meta_internal {
25
+
26
+ // C++17 port of the C++20 `requires` expressions.
27
+ // It allows easy inline test of properties of types in template code.
28
+ // https://en.cppreference.com/w/cpp/language/constraints#Requires_expressions
29
+ //
30
+ // Example usage:
31
+ //
32
+ // if constexpr (Requires<T>([](auto&& x) -> decltype(x.foo()) {})) {
33
+ // // T has foo()
34
+ // return t.foo();
35
+ // } else if constexpr (Requires<T>([](auto&& x) -> decltype(Bar(x)) {})) {
36
+ // // Can call Bar with T
37
+ // return Bar(t);
38
+ // } else if constexpr (Requires<T, U>(
39
+ // // Can test expression with multiple inputs
40
+ // [](auto&& x, auto&& y) -> decltype(x + y) {})) {
41
+ // return t + t2;
42
+ // }
43
+ //
44
+ // The `Requires` function takes a list of types and a generic lambda where all
45
+ // arguments are of type `auto&&`. The lambda is never actually invoked and the
46
+ // body must be empty.
47
+ // When used this way, `Requires` returns whether the expression inside
48
+ // `decltype` is well-formed, when the lambda parameters have the types that
49
+ // are specified by the corresponding template arguments.
50
+ //
51
+ // NOTE: C++17 does not allow lambdas in template parameters, which means that
52
+ // code like the following is _not_ valid in C++17:
53
+ //
54
+ // template <typename T,
55
+ // typename = std::enable_if_t<gtl::Requires<T>(
56
+ // [] (auto&& v) -> decltype(<expr>) {})>>
57
+ //
58
+ template <typename... T, typename F>
59
+ constexpr bool Requires(F) {
60
+ return std::is_invocable_v<F, T...>;
61
+ }
62
+
63
+ } // namespace meta_internal
64
+ ABSL_NAMESPACE_END
65
+ } // namespace absl
66
+
67
+ #endif // ABSL_META_INTERNAL_REQUIRES_H_
@@ -0,0 +1,66 @@
1
+ // Copyright 2017 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
+ #include "absl/meta/internal/requires.h"
16
+
17
+ #include <string>
18
+ #include <vector>
19
+
20
+ #include "gtest/gtest.h"
21
+
22
+ namespace {
23
+
24
+ TEST(RequiresTest, SimpleLambdasWork) {
25
+ static_assert(absl::meta_internal::Requires([] {}));
26
+ static_assert(absl::meta_internal::Requires<int>([](auto&&) {}));
27
+ static_assert(
28
+ absl::meta_internal::Requires<int, char>([](auto&&, auto&&) {}));
29
+ }
30
+
31
+ template <typename T>
32
+ inline constexpr bool has_cstr =
33
+ absl::meta_internal::Requires<T>([](auto&& x) -> decltype(x.c_str()) {});
34
+
35
+ template <typename T, typename U>
36
+ inline constexpr bool have_plus = absl::meta_internal::Requires<T, U>(
37
+ [](auto&& x, auto&& y) -> decltype(x + y) {});
38
+
39
+ TEST(RequiresTest, CanTestProperties) {
40
+ static_assert(has_cstr<std::string>);
41
+ static_assert(!has_cstr<std::vector<int>>);
42
+
43
+ static_assert(have_plus<int, double>);
44
+ static_assert(have_plus<std::string, std::string>);
45
+ static_assert(!have_plus<std::string, double>);
46
+ }
47
+
48
+ TEST(RequiresTest, WorksWithUnmovableTypes) {
49
+ struct S {
50
+ S(const S&) = delete;
51
+ int foo() { return 0; }
52
+ };
53
+ static_assert(
54
+ absl::meta_internal::Requires<S>([](auto&& x) -> decltype(x.foo()) {}));
55
+ static_assert(
56
+ !absl::meta_internal::Requires<S>([](auto&& x) -> decltype(x.bar()) {}));
57
+ }
58
+
59
+ TEST(RequiresTest, WorksWithArrays) {
60
+ static_assert(
61
+ absl::meta_internal::Requires<int[2]>([](auto&& x) -> decltype(x[1]) {}));
62
+ static_assert(
63
+ !absl::meta_internal::Requires<int[2]>([](auto&& x) -> decltype(-x) {}));
64
+ }
65
+
66
+ } // namespace
@@ -40,6 +40,7 @@
40
40
  #include <string>
41
41
  #include <string_view>
42
42
  #include <type_traits>
43
+ #include <utility>
43
44
  #include <vector>
44
45
 
45
46
  #include "absl/base/attributes.h"
@@ -168,6 +169,28 @@ template <typename T>
168
169
  using remove_cvref_t = typename remove_cvref<T>::type;
169
170
  #endif
170
171
 
172
+ #if defined(__cpp_lib_type_identity) && __cpp_lib_type_identity >= 201806L
173
+ template <typename T>
174
+ using type_identity = std::type_identity<T>;
175
+
176
+ template <typename T>
177
+ using type_identity_t = std::type_identity_t<T>;
178
+ #else
179
+ // type_identity
180
+ //
181
+ // Back-fill of C++20's `std::type_identity`.
182
+ template <typename T>
183
+ struct type_identity {
184
+ typedef T type;
185
+ };
186
+
187
+ // type_identity_t
188
+ //
189
+ // Back-fill of C++20's `std::type_identity_t`.
190
+ template <typename T>
191
+ using type_identity_t = typename type_identity<T>::type;
192
+ #endif
193
+
171
194
  namespace type_traits_internal {
172
195
 
173
196
  #if (defined(__cpp_lib_is_invocable) && __cpp_lib_is_invocable >= 201703L) || \
@@ -451,7 +474,7 @@ namespace type_traits_internal {
451
474
 
452
475
  // Detects if a class's definition has declared itself to be an owner by
453
476
  // declaring
454
- // using absl_internal_is_view = std::true_type;
477
+ // using absl_internal_is_view = std::false_type;
455
478
  // as a member.
456
479
  // Types that don't want either must either omit this declaration entirely, or
457
480
  // (if e.g. inheriting from a base class) define the member to something that
@@ -479,6 +502,17 @@ struct IsOwnerImpl<
479
502
  template <typename T>
480
503
  struct IsOwner : IsOwnerImpl<T> {};
481
504
 
505
+ // This allows incomplete types to be used for associative containers, and also
506
+ // expands the set of types we can handle to include std::pair.
507
+ template <typename T1, typename T2>
508
+ struct IsOwner<std::pair<T1, T2>>
509
+ : std::integral_constant<
510
+ bool, std::conditional_t<std::is_reference_v<T1>, std::false_type,
511
+ IsOwner<std::remove_cv_t<T1>>>::value &&
512
+ std::conditional_t<std::is_reference_v<T2>, std::false_type,
513
+ IsOwner<std::remove_cv_t<T2>>>::value> {
514
+ };
515
+
482
516
  template <typename T, typename Traits, typename Alloc>
483
517
  struct IsOwner<std::basic_string<T, Traits, Alloc>> : std::true_type {};
484
518
 
@@ -513,6 +547,13 @@ template <typename T>
513
547
  struct IsView : std::integral_constant<bool, std::is_pointer<T>::value ||
514
548
  IsViewImpl<T>::value> {};
515
549
 
550
+ // This allows incomplete types to be used for associative containers, and also
551
+ // expands the set of types we can handle to include std::pair.
552
+ template <typename T1, typename T2>
553
+ struct IsView<std::pair<T1, T2>>
554
+ : std::integral_constant<bool, IsView<std::remove_cv_t<T1>>::value &&
555
+ IsView<std::remove_cv_t<T2>>::value> {};
556
+
516
557
  template <typename Char, typename Traits>
517
558
  struct IsView<std::basic_string_view<Char, Traits>> : std::true_type {};
518
559
 
@@ -36,6 +36,9 @@ using IsOwnerAndNotView =
36
36
  absl::conjunction<absl::type_traits_internal::IsOwner<T>,
37
37
  absl::negation<absl::type_traits_internal::IsView<T>>>;
38
38
 
39
+ static_assert(
40
+ IsOwnerAndNotView<std::pair<std::vector<int>, std::string>>::value,
41
+ "pair of owners is an owner, not a view");
39
42
  static_assert(IsOwnerAndNotView<std::vector<int>>::value,
40
43
  "vector is an owner, not a view");
41
44
  static_assert(IsOwnerAndNotView<std::string>::value,
@@ -134,6 +137,17 @@ TEST(TypeTraitsTest, TestRemoveCVRef) {
134
137
  int[2]>::value));
135
138
  }
136
139
 
140
+ TEST(TypeTraitsTest, TestTypeIdentity) {
141
+ EXPECT_TRUE((std::is_same_v<typename absl::type_identity<int>::type, int>));
142
+ EXPECT_TRUE((std::is_same_v<absl::type_identity_t<int>, int>));
143
+ EXPECT_TRUE((std::is_same_v<typename absl::type_identity<int&>::type, int&>));
144
+ EXPECT_TRUE((std::is_same_v<absl::type_identity_t<int&>, int&>));
145
+
146
+ EXPECT_FALSE(
147
+ (std::is_same_v<typename absl::type_identity<int64_t>::type, int32_t>));
148
+ EXPECT_FALSE((std::is_same_v<absl::type_identity_t<int64_t>, int32_t>));
149
+ }
150
+
137
151
  struct TypeA {};
138
152
  struct TypeB {};
139
153
  struct TypeC {};
@@ -164,9 +164,9 @@ class
164
164
  constexpr explicit operator __int128() const;
165
165
  constexpr explicit operator unsigned __int128() const;
166
166
  #endif // ABSL_HAVE_INTRINSIC_INT128
167
- explicit operator float() const;
168
- explicit operator double() const;
169
- explicit operator long double() const;
167
+ constexpr explicit operator float() const;
168
+ constexpr explicit operator double() const;
169
+ constexpr explicit operator long double() const;
170
170
 
171
171
  // Trivial copy constructor, assignment operator and destructor.
172
172
 
@@ -357,14 +357,18 @@ class int128 {
357
357
  constexpr int128(unsigned long v); // NOLINT(runtime/int)
358
358
  constexpr int128(long long v); // NOLINT(runtime/int)
359
359
  constexpr int128(unsigned long long v); // NOLINT(runtime/int)
360
+ constexpr explicit int128(uint128 v);
360
361
  #ifdef ABSL_HAVE_INTRINSIC_INT128
361
362
  constexpr int128(__int128 v); // NOLINT(runtime/explicit)
362
363
  constexpr explicit int128(unsigned __int128 v);
363
- #endif // ABSL_HAVE_INTRINSIC_INT128
364
- constexpr explicit int128(uint128 v);
364
+ constexpr explicit int128(float v);
365
+ constexpr explicit int128(double v);
366
+ constexpr explicit int128(long double v);
367
+ #else
365
368
  explicit int128(float v);
366
369
  explicit int128(double v);
367
370
  explicit int128(long double v);
371
+ #endif // ABSL_HAVE_INTRINSIC_INT128
368
372
 
369
373
  // Assignment operators from arithmetic types
370
374
  int128& operator=(int v);
@@ -401,9 +405,9 @@ class int128 {
401
405
  constexpr explicit operator __int128() const;
402
406
  constexpr explicit operator unsigned __int128() const;
403
407
  #endif // ABSL_HAVE_INTRINSIC_INT128
404
- explicit operator float() const;
405
- explicit operator double() const;
406
- explicit operator long double() const;
408
+ constexpr explicit operator float() const;
409
+ constexpr explicit operator double() const;
410
+ constexpr explicit operator long double() const;
407
411
 
408
412
  // Trivial copy constructor, assignment operator and destructor.
409
413
 
@@ -609,9 +613,15 @@ constexpr uint128 operator<<(uint128 lhs, int amount);
609
613
  constexpr uint128 operator>>(uint128 lhs, int amount);
610
614
  constexpr uint128 operator+(uint128 lhs, uint128 rhs);
611
615
  constexpr uint128 operator-(uint128 lhs, uint128 rhs);
616
+ #if defined(ABSL_HAVE_INTRINSIC_INT128)
617
+ constexpr uint128 operator*(uint128 lhs, uint128 rhs);
618
+ constexpr uint128 operator/(uint128 lhs, uint128 rhs);
619
+ constexpr uint128 operator%(uint128 lhs, uint128 rhs);
620
+ #else // ABSL_HAVE_INTRINSIC_INT128
612
621
  uint128 operator*(uint128 lhs, uint128 rhs);
613
622
  uint128 operator/(uint128 lhs, uint128 rhs);
614
623
  uint128 operator%(uint128 lhs, uint128 rhs);
624
+ #endif // ABSL_HAVE_INTRINSIC_INT128
615
625
 
616
626
  inline uint128& uint128::operator<<=(int amount) {
617
627
  *this = *this << amount;
@@ -788,18 +798,18 @@ constexpr uint128::operator unsigned __int128() const {
788
798
 
789
799
  // Conversion operators to floating point types.
790
800
 
791
- inline uint128::operator float() const {
801
+ constexpr uint128::operator float() const {
792
802
  // Note: This method might return Inf.
793
803
  constexpr float pow_2_64 = 18446744073709551616.0f;
794
804
  return static_cast<float>(lo_) + static_cast<float>(hi_) * pow_2_64;
795
805
  }
796
806
 
797
- inline uint128::operator double() const {
807
+ constexpr uint128::operator double() const {
798
808
  constexpr double pow_2_64 = 18446744073709551616.0;
799
809
  return static_cast<double>(lo_) + static_cast<double>(hi_) * pow_2_64;
800
810
  }
801
811
 
802
- inline uint128::operator long double() const {
812
+ constexpr uint128::operator long double() const {
803
813
  constexpr long double pow_2_64 = 18446744073709551616.0L;
804
814
  return static_cast<long double>(lo_) +
805
815
  static_cast<long double>(hi_) * pow_2_64;
@@ -1021,19 +1031,15 @@ constexpr uint128 operator-(uint128 lhs, uint128 rhs) {
1021
1031
  #endif
1022
1032
  }
1023
1033
 
1034
+ #if !defined(ABSL_HAVE_INTRINSIC_INT128)
1024
1035
  inline uint128 operator*(uint128 lhs, uint128 rhs) {
1025
- #if defined(ABSL_HAVE_INTRINSIC_INT128)
1026
- // TODO(strel) Remove once alignment issues are resolved and unsigned __int128
1027
- // can be used for uint128 storage.
1028
- return static_cast<unsigned __int128>(lhs) *
1029
- static_cast<unsigned __int128>(rhs);
1030
- #elif defined(_MSC_VER) && defined(_M_X64) && !defined(_M_ARM64EC)
1036
+ #if defined(_MSC_VER) && defined(_M_X64) && !defined(_M_ARM64EC)
1031
1037
  uint64_t carry;
1032
1038
  uint64_t low = _umul128(Uint128Low64(lhs), Uint128Low64(rhs), &carry);
1033
1039
  return MakeUint128(Uint128Low64(lhs) * Uint128High64(rhs) +
1034
1040
  Uint128High64(lhs) * Uint128Low64(rhs) + carry,
1035
1041
  low);
1036
- #else // ABSL_HAVE_INTRINSIC128
1042
+ #else // _MSC_VER
1037
1043
  uint64_t a32 = Uint128Low64(lhs) >> 32;
1038
1044
  uint64_t a00 = Uint128Low64(lhs) & 0xffffffff;
1039
1045
  uint64_t b32 = Uint128Low64(rhs) >> 32;
@@ -1045,16 +1051,24 @@ inline uint128 operator*(uint128 lhs, uint128 rhs) {
1045
1051
  result += uint128(a32 * b00) << 32;
1046
1052
  result += uint128(a00 * b32) << 32;
1047
1053
  return result;
1048
- #endif // ABSL_HAVE_INTRINSIC128
1054
+ #endif // _MSC_VER
1049
1055
  }
1056
+ #endif // ABSL_HAVE_INTRINSIC_INT128
1050
1057
 
1051
1058
  #if defined(ABSL_HAVE_INTRINSIC_INT128)
1052
- inline uint128 operator/(uint128 lhs, uint128 rhs) {
1059
+ constexpr uint128 operator*(uint128 lhs, uint128 rhs) {
1060
+ // TODO(strel) Remove once alignment issues are resolved and unsigned __int128
1061
+ // can be used for uint128 storage.
1062
+ return static_cast<unsigned __int128>(lhs) *
1063
+ static_cast<unsigned __int128>(rhs);
1064
+ }
1065
+
1066
+ constexpr uint128 operator/(uint128 lhs, uint128 rhs) {
1053
1067
  return static_cast<unsigned __int128>(lhs) /
1054
1068
  static_cast<unsigned __int128>(rhs);
1055
1069
  }
1056
1070
 
1057
- inline uint128 operator%(uint128 lhs, uint128 rhs) {
1071
+ constexpr uint128 operator%(uint128 lhs, uint128 rhs) {
1058
1072
  return static_cast<unsigned __int128>(lhs) %
1059
1073
  static_cast<unsigned __int128>(rhs);
1060
1074
  }
@@ -1112,9 +1126,15 @@ inline int128& int128::operator=(unsigned long long v) {
1112
1126
  constexpr int128 operator-(int128 v);
1113
1127
  constexpr int128 operator+(int128 lhs, int128 rhs);
1114
1128
  constexpr int128 operator-(int128 lhs, int128 rhs);
1129
+ #if defined(ABSL_HAVE_INTRINSIC_INT128)
1130
+ constexpr int128 operator*(int128 lhs, int128 rhs);
1131
+ constexpr int128 operator/(int128 lhs, int128 rhs);
1132
+ constexpr int128 operator%(int128 lhs, int128 rhs);
1133
+ #else
1115
1134
  int128 operator*(int128 lhs, int128 rhs);
1116
1135
  int128 operator/(int128 lhs, int128 rhs);
1117
1136
  int128 operator%(int128 lhs, int128 rhs);
1137
+ #endif // ABSL_HAVE_INTRINSIC_INT128
1118
1138
  constexpr int128 operator|(int128 lhs, int128 rhs);
1119
1139
  constexpr int128 operator&(int128 lhs, int128 rhs);
1120
1140
  constexpr int128 operator^(int128 lhs, int128 rhs);