re2 1.22.2 → 1.23.0

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 (495) hide show
  1. package/README.md +60 -4
  2. package/binding.gyp +5 -1
  3. package/lib/addon.cc +4 -0
  4. package/lib/new.cc +1 -246
  5. package/lib/pattern.cc +252 -0
  6. package/lib/pattern.h +10 -0
  7. package/lib/set.cc +777 -0
  8. package/lib/wrapped_re2_set.h +42 -0
  9. package/package.json +21 -9
  10. package/re2.d.ts +46 -9
  11. package/vendor/abseil-cpp/CMake/AbseilDll.cmake +14 -24
  12. package/vendor/abseil-cpp/CMake/AbseilHelpers.cmake +3 -3
  13. package/vendor/abseil-cpp/CMake/README.md +2 -2
  14. package/vendor/abseil-cpp/CMakeLists.txt +3 -3
  15. package/vendor/abseil-cpp/MODULE.bazel +6 -9
  16. package/vendor/abseil-cpp/README.md +6 -8
  17. package/vendor/abseil-cpp/absl/abseil.podspec.gen.py +6 -4
  18. package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +3 -0
  19. package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +1 -0
  20. package/vendor/abseil-cpp/absl/algorithm/container.h +2 -19
  21. package/vendor/abseil-cpp/absl/algorithm/container_test.cc +4 -11
  22. package/vendor/abseil-cpp/absl/base/BUILD.bazel +60 -45
  23. package/vendor/abseil-cpp/absl/base/CMakeLists.txt +57 -38
  24. package/vendor/abseil-cpp/absl/base/attributes.h +76 -7
  25. package/vendor/abseil-cpp/absl/base/attributes_test.cc +43 -0
  26. package/vendor/abseil-cpp/absl/base/call_once.h +11 -12
  27. package/vendor/abseil-cpp/absl/base/config.h +22 -129
  28. package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +0 -4
  29. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id.h → fast_type_id.h} +11 -16
  30. package/vendor/abseil-cpp/absl/base/{internal/fast_type_id_test.cc → fast_type_id_test.cc} +34 -30
  31. package/vendor/abseil-cpp/absl/base/internal/cycleclock.cc +0 -5
  32. package/vendor/abseil-cpp/absl/base/internal/cycleclock_config.h +7 -7
  33. package/vendor/abseil-cpp/absl/base/internal/endian.h +34 -38
  34. package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +71 -0
  35. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test.cc +85 -0
  36. package/vendor/abseil-cpp/absl/base/internal/iterator_traits_test_helper.h +97 -0
  37. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -9
  38. package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  39. package/vendor/abseil-cpp/absl/base/internal/poison.cc +7 -6
  40. package/vendor/abseil-cpp/absl/base/internal/spinlock.cc +15 -28
  41. package/vendor/abseil-cpp/absl/base/internal/spinlock.h +65 -35
  42. package/vendor/abseil-cpp/absl/base/internal/spinlock_benchmark.cc +2 -2
  43. package/vendor/abseil-cpp/absl/base/internal/sysinfo_test.cc +2 -2
  44. package/vendor/abseil-cpp/absl/base/internal/thread_identity_benchmark.cc +1 -1
  45. package/vendor/abseil-cpp/absl/base/internal/thread_identity_test.cc +4 -4
  46. package/vendor/abseil-cpp/absl/base/internal/unaligned_access.h +6 -6
  47. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +4 -0
  48. package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +8 -3
  49. package/vendor/abseil-cpp/absl/base/no_destructor.h +11 -32
  50. package/vendor/abseil-cpp/absl/base/no_destructor_test.cc +0 -4
  51. package/vendor/abseil-cpp/absl/base/nullability.h +83 -72
  52. package/vendor/abseil-cpp/absl/base/nullability_test.cc +25 -64
  53. package/vendor/abseil-cpp/absl/base/options.h +3 -80
  54. package/vendor/abseil-cpp/absl/base/policy_checks.h +7 -7
  55. package/vendor/abseil-cpp/absl/base/raw_logging_test.cc +15 -0
  56. package/vendor/abseil-cpp/absl/base/spinlock_test_common.cc +50 -30
  57. package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -1
  58. package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +0 -1
  59. package/vendor/abseil-cpp/absl/cleanup/cleanup.h +1 -3
  60. package/vendor/abseil-cpp/absl/cleanup/cleanup_test.cc +0 -2
  61. package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -4
  62. package/vendor/abseil-cpp/absl/container/BUILD.bazel +74 -1
  63. package/vendor/abseil-cpp/absl/container/CMakeLists.txt +73 -0
  64. package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +51 -9
  65. package/vendor/abseil-cpp/absl/container/btree_map.h +8 -6
  66. package/vendor/abseil-cpp/absl/container/btree_set.h +8 -6
  67. package/vendor/abseil-cpp/absl/container/btree_test.cc +89 -4
  68. package/vendor/abseil-cpp/absl/container/fixed_array.h +7 -15
  69. package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +17 -0
  70. package/vendor/abseil-cpp/absl/container/flat_hash_map.h +20 -15
  71. package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +8 -14
  72. package/vendor/abseil-cpp/absl/container/flat_hash_set.h +19 -14
  73. package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +46 -0
  74. package/vendor/abseil-cpp/absl/container/inlined_vector.h +7 -6
  75. package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +28 -0
  76. package/vendor/abseil-cpp/absl/container/internal/btree.h +132 -29
  77. package/vendor/abseil-cpp/absl/container/internal/btree_container.h +175 -71
  78. package/vendor/abseil-cpp/absl/container/internal/common.h +43 -0
  79. package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -2
  80. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +28 -24
  81. package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +4 -17
  82. package/vendor/abseil-cpp/absl/container/internal/container_memory.h +80 -17
  83. package/vendor/abseil-cpp/absl/container/internal/container_memory_test.cc +32 -2
  84. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +13 -8
  85. package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults_test.cc +1 -52
  86. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.cc +9 -31
  87. package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +23 -32
  88. package/vendor/abseil-cpp/absl/container/internal/hash_policy_testing.h +5 -1
  89. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +11 -23
  90. package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits_test.cc +14 -9
  91. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +516 -0
  92. package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes_test.cc +259 -0
  93. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +23 -6
  94. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +32 -13
  95. package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +8 -8
  96. package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +2 -7
  97. package/vendor/abseil-cpp/absl/container/internal/layout.h +26 -42
  98. package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +199 -68
  99. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +1506 -213
  100. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +1095 -1658
  101. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_allocator_test.cc +3 -2
  102. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +31 -29
  103. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +51 -20
  104. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +79 -0
  105. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl_test.cc +66 -0
  106. package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +707 -363
  107. package/vendor/abseil-cpp/absl/container/node_hash_map.h +20 -15
  108. package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +0 -3
  109. package/vendor/abseil-cpp/absl/container/node_hash_set.h +18 -13
  110. package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +3 -8
  111. package/vendor/abseil-cpp/absl/copts/AbseilConfigureCopts.cmake +1 -1
  112. package/vendor/abseil-cpp/absl/copts/GENERATED_AbseilCopts.cmake +9 -20
  113. package/vendor/abseil-cpp/absl/copts/GENERATED_copts.bzl +9 -20
  114. package/vendor/abseil-cpp/absl/copts/copts.py +24 -15
  115. package/vendor/abseil-cpp/absl/crc/BUILD.bazel +3 -0
  116. package/vendor/abseil-cpp/absl/crc/crc32c.cc +0 -4
  117. package/vendor/abseil-cpp/absl/crc/crc32c.h +7 -5
  118. package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +17 -4
  119. package/vendor/abseil-cpp/absl/crc/crc32c_test.cc +30 -0
  120. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +17 -0
  121. package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  122. package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +0 -22
  123. package/vendor/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  124. package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +136 -165
  125. package/vendor/abseil-cpp/absl/crc/internal/gen_crc32c_consts.py +90 -0
  126. package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +7 -0
  127. package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +4 -0
  128. package/vendor/abseil-cpp/absl/debugging/internal/addresses.h +57 -0
  129. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.cc +1 -1
  130. package/vendor/abseil-cpp/absl/debugging/internal/decode_rust_punycode.h +5 -5
  131. package/vendor/abseil-cpp/absl/debugging/internal/demangle.cc +8 -35
  132. package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.cc +16 -16
  133. package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +11 -10
  134. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +40 -37
  135. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +16 -7
  136. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  137. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +14 -5
  138. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +10 -4
  139. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +27 -16
  140. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +13 -4
  141. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_unimplemented-inl.inc +4 -3
  142. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +15 -28
  143. package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +25 -14
  144. package/vendor/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  145. package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +161 -27
  146. package/vendor/abseil-cpp/absl/debugging/stacktrace.h +73 -5
  147. package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +435 -1
  148. package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +55 -63
  149. package/vendor/abseil-cpp/absl/debugging/symbolize_emscripten.inc +3 -2
  150. package/vendor/abseil-cpp/absl/debugging/symbolize_win32.inc +25 -6
  151. package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -0
  152. package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +3 -0
  153. package/vendor/abseil-cpp/absl/flags/commandlineflag.h +2 -2
  154. package/vendor/abseil-cpp/absl/flags/flag.h +4 -3
  155. package/vendor/abseil-cpp/absl/flags/internal/commandlineflag.h +2 -2
  156. package/vendor/abseil-cpp/absl/flags/internal/flag.cc +14 -13
  157. package/vendor/abseil-cpp/absl/flags/internal/flag.h +34 -34
  158. package/vendor/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  159. package/vendor/abseil-cpp/absl/flags/internal/registry.h +4 -3
  160. package/vendor/abseil-cpp/absl/flags/internal/usage.cc +2 -2
  161. package/vendor/abseil-cpp/absl/flags/parse.cc +10 -6
  162. package/vendor/abseil-cpp/absl/flags/reflection.cc +9 -7
  163. package/vendor/abseil-cpp/absl/flags/usage.cc +2 -2
  164. package/vendor/abseil-cpp/absl/flags/usage_config.cc +2 -2
  165. package/vendor/abseil-cpp/absl/functional/BUILD.bazel +7 -6
  166. package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +2 -4
  167. package/vendor/abseil-cpp/absl/functional/any_invocable.h +15 -15
  168. package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +10 -42
  169. package/vendor/abseil-cpp/absl/functional/function_ref.h +2 -9
  170. package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +10 -0
  171. package/vendor/abseil-cpp/absl/functional/function_type_benchmark.cc +1 -1
  172. package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +112 -227
  173. package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +10 -12
  174. package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -5
  175. package/vendor/abseil-cpp/absl/functional/overload.h +0 -20
  176. package/vendor/abseil-cpp/absl/functional/overload_test.cc +1 -7
  177. package/vendor/abseil-cpp/absl/hash/BUILD.bazel +16 -9
  178. package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +6 -9
  179. package/vendor/abseil-cpp/absl/hash/hash.h +18 -0
  180. package/vendor/abseil-cpp/absl/hash/hash_benchmark.cc +3 -0
  181. package/vendor/abseil-cpp/absl/hash/hash_instantiated_test.cc +1 -1
  182. package/vendor/abseil-cpp/absl/hash/hash_test.cc +131 -30
  183. package/vendor/abseil-cpp/absl/hash/hash_testing.h +20 -20
  184. package/vendor/abseil-cpp/absl/hash/internal/hash.cc +129 -17
  185. package/vendor/abseil-cpp/absl/hash/internal/hash.h +326 -362
  186. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +54 -151
  187. package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +14 -2
  188. package/vendor/abseil-cpp/absl/{strings/cord_buffer.cc → hash/internal/weakly_mixed_integer.h} +14 -6
  189. package/vendor/abseil-cpp/absl/log/BUILD.bazel +4 -0
  190. package/vendor/abseil-cpp/absl/log/CMakeLists.txt +7 -0
  191. package/vendor/abseil-cpp/absl/log/check.h +2 -1
  192. package/vendor/abseil-cpp/absl/log/check_test_impl.inc +308 -14
  193. package/vendor/abseil-cpp/absl/log/die_if_null.h +2 -2
  194. package/vendor/abseil-cpp/absl/log/flags_test.cc +7 -0
  195. package/vendor/abseil-cpp/absl/log/globals.h +4 -5
  196. package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +13 -9
  197. package/vendor/abseil-cpp/absl/log/internal/append_truncated.h +28 -0
  198. package/vendor/abseil-cpp/absl/log/internal/check_op.cc +24 -22
  199. package/vendor/abseil-cpp/absl/log/internal/check_op.h +149 -94
  200. package/vendor/abseil-cpp/absl/log/internal/conditions.cc +5 -3
  201. package/vendor/abseil-cpp/absl/log/internal/conditions.h +7 -2
  202. package/vendor/abseil-cpp/absl/log/internal/fnmatch_test.cc +1 -0
  203. package/vendor/abseil-cpp/absl/log/internal/log_message.cc +85 -43
  204. package/vendor/abseil-cpp/absl/log/internal/log_message.h +84 -59
  205. package/vendor/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  206. package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -0
  207. package/vendor/abseil-cpp/absl/log/internal/proto.cc +3 -2
  208. package/vendor/abseil-cpp/absl/log/internal/proto.h +3 -3
  209. package/vendor/abseil-cpp/absl/log/internal/strip.h +4 -12
  210. package/vendor/abseil-cpp/absl/log/internal/structured.h +3 -7
  211. package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +9 -9
  212. package/vendor/abseil-cpp/absl/log/internal/vlog_config.h +8 -6
  213. package/vendor/abseil-cpp/absl/log/internal/voidify.h +10 -4
  214. package/vendor/abseil-cpp/absl/log/log.h +48 -35
  215. package/vendor/abseil-cpp/absl/log/log_basic_test_impl.inc +45 -0
  216. package/vendor/abseil-cpp/absl/log/log_entry.cc +241 -19
  217. package/vendor/abseil-cpp/absl/log/log_entry.h +2 -0
  218. package/vendor/abseil-cpp/absl/log/log_format_test.cc +412 -6
  219. package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +20 -0
  220. package/vendor/abseil-cpp/absl/log/log_sink_registry.h +2 -2
  221. package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +15 -2
  222. package/vendor/abseil-cpp/absl/log/scoped_mock_log.h +7 -1
  223. package/vendor/abseil-cpp/absl/log/structured_test.cc +1 -0
  224. package/vendor/abseil-cpp/absl/memory/BUILD.bazel +2 -0
  225. package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
  226. package/vendor/abseil-cpp/absl/meta/type_traits.h +46 -175
  227. package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +1 -478
  228. package/vendor/abseil-cpp/absl/numeric/BUILD.bazel +7 -3
  229. package/vendor/abseil-cpp/absl/numeric/CMakeLists.txt +2 -0
  230. package/vendor/abseil-cpp/absl/numeric/bits.h +68 -2
  231. package/vendor/abseil-cpp/absl/numeric/bits_benchmark.cc +1 -1
  232. package/vendor/abseil-cpp/absl/numeric/bits_test.cc +83 -0
  233. package/vendor/abseil-cpp/absl/numeric/int128.cc +0 -52
  234. package/vendor/abseil-cpp/absl/numeric/int128_benchmark.cc +14 -15
  235. package/vendor/abseil-cpp/absl/numeric/int128_test.cc +13 -8
  236. package/vendor/abseil-cpp/absl/numeric/internal/bits.h +39 -7
  237. package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +47 -0
  238. package/vendor/abseil-cpp/absl/profiling/CMakeLists.txt +38 -0
  239. package/vendor/abseil-cpp/absl/profiling/hashtable.cc +124 -0
  240. package/vendor/abseil-cpp/absl/profiling/hashtable.h +40 -0
  241. package/vendor/abseil-cpp/absl/profiling/internal/exponential_biased.cc +1 -1
  242. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +462 -0
  243. package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +138 -0
  244. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  245. package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +7 -3
  246. package/vendor/abseil-cpp/absl/random/BUILD.bazel +6 -4
  247. package/vendor/abseil-cpp/absl/random/CMakeLists.txt +20 -19
  248. package/vendor/abseil-cpp/absl/random/benchmarks.cc +16 -23
  249. package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +10 -11
  250. package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +7 -2
  251. package/vendor/abseil-cpp/absl/random/distributions.h +6 -8
  252. package/vendor/abseil-cpp/absl/random/gaussian_distribution.h +1 -1
  253. package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +19 -20
  254. package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +5 -6
  255. package/vendor/abseil-cpp/absl/random/internal/{pool_urbg.cc → entropy_pool.cc} +24 -92
  256. package/vendor/abseil-cpp/absl/{base/inline_variable_test_b.cc → random/internal/entropy_pool.h} +14 -6
  257. package/vendor/abseil-cpp/absl/random/internal/entropy_pool_test.cc +119 -0
  258. package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +6 -7
  259. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +5 -6
  260. package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +39 -0
  261. package/vendor/abseil-cpp/absl/random/internal/randen_benchmarks.cc +8 -6
  262. package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +1 -1
  263. package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +20 -12
  264. package/vendor/abseil-cpp/absl/random/internal/seed_material.h +5 -5
  265. package/vendor/abseil-cpp/absl/random/internal/seed_material_test.cc +3 -0
  266. package/vendor/abseil-cpp/absl/random/mock_distributions_test.cc +5 -4
  267. package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +8 -10
  268. package/vendor/abseil-cpp/absl/random/random.h +88 -53
  269. package/vendor/abseil-cpp/absl/random/seed_sequences.cc +6 -2
  270. package/vendor/abseil-cpp/absl/status/BUILD.bazel +26 -0
  271. package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +3 -4
  272. package/vendor/abseil-cpp/absl/status/internal/status_internal.h +3 -4
  273. package/vendor/abseil-cpp/absl/status/internal/status_matchers.cc +4 -3
  274. package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +194 -32
  275. package/vendor/abseil-cpp/absl/status/status.cc +4 -8
  276. package/vendor/abseil-cpp/absl/status/status.h +8 -8
  277. package/vendor/abseil-cpp/absl/{base/inline_variable_test_a.cc → status/status_benchmark.cc} +20 -10
  278. package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +65 -0
  279. package/vendor/abseil-cpp/absl/status/status_payload_printer.h +2 -2
  280. package/vendor/abseil-cpp/absl/status/statusor.cc +2 -2
  281. package/vendor/abseil-cpp/absl/status/statusor.h +49 -102
  282. package/vendor/abseil-cpp/absl/status/statusor_benchmark.cc +480 -0
  283. package/vendor/abseil-cpp/absl/status/statusor_test.cc +323 -1
  284. package/vendor/abseil-cpp/absl/strings/BUILD.bazel +70 -34
  285. package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +6 -3
  286. package/vendor/abseil-cpp/absl/strings/ascii.cc +9 -9
  287. package/vendor/abseil-cpp/absl/strings/ascii.h +18 -18
  288. package/vendor/abseil-cpp/absl/strings/ascii_benchmark.cc +5 -8
  289. package/vendor/abseil-cpp/absl/strings/charconv.cc +21 -22
  290. package/vendor/abseil-cpp/absl/strings/charconv.h +5 -5
  291. package/vendor/abseil-cpp/absl/strings/charconv_benchmark.cc +1 -2
  292. package/vendor/abseil-cpp/absl/strings/charset_benchmark.cc +1 -1
  293. package/vendor/abseil-cpp/absl/strings/cord.cc +54 -58
  294. package/vendor/abseil-cpp/absl/strings/cord.h +94 -84
  295. package/vendor/abseil-cpp/absl/strings/cord_analysis.cc +11 -11
  296. package/vendor/abseil-cpp/absl/strings/cord_analysis.h +3 -3
  297. package/vendor/abseil-cpp/absl/strings/cord_test.cc +23 -0
  298. package/vendor/abseil-cpp/absl/strings/cordz_test_helpers.h +4 -5
  299. package/vendor/abseil-cpp/absl/strings/escaping.cc +130 -149
  300. package/vendor/abseil-cpp/absl/strings/escaping.h +9 -10
  301. package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +2 -3
  302. package/vendor/abseil-cpp/absl/strings/escaping_test.cc +19 -9
  303. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
  304. package/vendor/abseil-cpp/absl/strings/internal/charconv_bigint_test.cc +1 -1
  305. package/vendor/abseil-cpp/absl/strings/internal/cord_internal.h +6 -10
  306. package/vendor/abseil-cpp/absl/strings/internal/cord_rep_btree.cc +0 -4
  307. package/vendor/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  308. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.cc +5 -9
  309. package/vendor/abseil-cpp/absl/strings/internal/cordz_info.h +2 -4
  310. package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance_benchmark.cc +56 -0
  311. package/vendor/abseil-cpp/absl/strings/internal/memutil_benchmark.cc +2 -3
  312. package/vendor/abseil-cpp/absl/strings/internal/ostringstream_benchmark.cc +1 -2
  313. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.cc +7 -63
  314. package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +1 -11
  315. package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +1 -6
  316. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension.cc +0 -22
  317. package/vendor/abseil-cpp/absl/strings/internal/str_format/extension_test.cc +3 -2
  318. package/vendor/abseil-cpp/absl/strings/internal/str_format/output.cc +5 -3
  319. package/vendor/abseil-cpp/absl/strings/internal/str_format/parser.h +4 -2
  320. package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +3 -3
  321. package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +7 -2
  322. package/vendor/abseil-cpp/absl/strings/internal/string_constant.h +0 -5
  323. package/vendor/abseil-cpp/absl/strings/internal/utf8.cc +96 -1
  324. package/vendor/abseil-cpp/absl/strings/internal/utf8.h +15 -1
  325. package/vendor/abseil-cpp/absl/strings/internal/utf8_test.cc +196 -3
  326. package/vendor/abseil-cpp/absl/strings/numbers.cc +53 -32
  327. package/vendor/abseil-cpp/absl/strings/numbers.h +87 -58
  328. package/vendor/abseil-cpp/absl/strings/numbers_benchmark.cc +1 -1
  329. package/vendor/abseil-cpp/absl/strings/numbers_test.cc +634 -120
  330. package/vendor/abseil-cpp/absl/strings/str_cat.cc +6 -7
  331. package/vendor/abseil-cpp/absl/strings/str_cat.h +32 -32
  332. package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +25 -1
  333. package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +2 -7
  334. package/vendor/abseil-cpp/absl/strings/str_format.h +18 -18
  335. package/vendor/abseil-cpp/absl/strings/str_format_test.cc +8 -14
  336. package/vendor/abseil-cpp/absl/strings/str_join_benchmark.cc +2 -3
  337. package/vendor/abseil-cpp/absl/strings/str_replace.cc +3 -3
  338. package/vendor/abseil-cpp/absl/strings/str_replace.h +6 -6
  339. package/vendor/abseil-cpp/absl/strings/str_replace_benchmark.cc +2 -3
  340. package/vendor/abseil-cpp/absl/strings/str_split.h +2 -2
  341. package/vendor/abseil-cpp/absl/strings/str_split_benchmark.cc +2 -3
  342. package/vendor/abseil-cpp/absl/strings/string_view.cc +4 -9
  343. package/vendor/abseil-cpp/absl/strings/string_view.h +38 -39
  344. package/vendor/abseil-cpp/absl/strings/string_view_benchmark.cc +4 -6
  345. package/vendor/abseil-cpp/absl/strings/string_view_test.cc +2 -50
  346. package/vendor/abseil-cpp/absl/strings/strip.h +4 -4
  347. package/vendor/abseil-cpp/absl/strings/substitute.cc +5 -4
  348. package/vendor/abseil-cpp/absl/strings/substitute.h +66 -64
  349. package/vendor/abseil-cpp/absl/strings/substitute_benchmark.cc +158 -0
  350. package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +6 -1
  351. package/vendor/abseil-cpp/absl/synchronization/CMakeLists.txt +2 -1
  352. package/vendor/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  353. package/vendor/abseil-cpp/absl/synchronization/barrier_test.cc +3 -3
  354. package/vendor/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  355. package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
  356. package/vendor/abseil-cpp/absl/synchronization/internal/futex_waiter.cc +0 -4
  357. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  358. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_benchmark.cc +2 -3
  359. package/vendor/abseil-cpp/absl/synchronization/internal/graphcycles_test.cc +6 -5
  360. package/vendor/abseil-cpp/absl/synchronization/internal/kernel_timeout.cc +0 -5
  361. package/vendor/abseil-cpp/absl/synchronization/internal/pthread_waiter.cc +0 -4
  362. package/vendor/abseil-cpp/absl/synchronization/internal/sem_waiter.cc +0 -4
  363. package/vendor/abseil-cpp/absl/synchronization/internal/stdcpp_waiter.cc +0 -4
  364. package/vendor/abseil-cpp/absl/synchronization/internal/thread_pool.h +3 -3
  365. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_base.cc +0 -4
  366. package/vendor/abseil-cpp/absl/synchronization/internal/waiter_test.cc +12 -3
  367. package/vendor/abseil-cpp/absl/synchronization/internal/win32_waiter.cc +0 -4
  368. package/vendor/abseil-cpp/absl/synchronization/lifetime_test.cc +4 -4
  369. package/vendor/abseil-cpp/absl/synchronization/mutex.cc +27 -29
  370. package/vendor/abseil-cpp/absl/synchronization/mutex.h +205 -126
  371. package/vendor/abseil-cpp/absl/synchronization/mutex_benchmark.cc +13 -31
  372. package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +183 -169
  373. package/vendor/abseil-cpp/absl/synchronization/notification.cc +5 -5
  374. package/vendor/abseil-cpp/absl/synchronization/notification.h +1 -1
  375. package/vendor/abseil-cpp/absl/synchronization/notification_test.cc +3 -3
  376. package/vendor/abseil-cpp/absl/time/BUILD.bazel +9 -1
  377. package/vendor/abseil-cpp/absl/time/CMakeLists.txt +3 -1
  378. package/vendor/abseil-cpp/absl/time/civil_time.cc +1 -0
  379. package/vendor/abseil-cpp/absl/time/civil_time_test.cc +134 -0
  380. package/vendor/abseil-cpp/absl/time/clock.cc +11 -14
  381. package/vendor/abseil-cpp/absl/time/duration.cc +14 -9
  382. package/vendor/abseil-cpp/absl/time/duration_test.cc +6 -7
  383. package/vendor/abseil-cpp/absl/time/internal/cctz/BUILD.bazel +14 -3
  384. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  385. package/vendor/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +1 -1
  386. package/vendor/abseil-cpp/absl/time/internal/cctz/src/cctz_benchmark.cc +4 -490
  387. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.cc +515 -0
  388. package/vendor/abseil-cpp/absl/time/internal/cctz/src/test_time_zone_names.h +33 -0
  389. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +41 -4
  390. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +22 -23
  391. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +90 -111
  392. package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup_test.cc +1 -488
  393. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
  394. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Coyhaique +0 -0
  395. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tehran +0 -0
  396. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Iran +0 -0
  397. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +2 -1
  398. package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +1 -1
  399. package/vendor/abseil-cpp/absl/time/time.h +24 -18
  400. package/vendor/abseil-cpp/absl/time/time_test.cc +26 -0
  401. package/vendor/abseil-cpp/absl/types/BUILD.bazel +11 -164
  402. package/vendor/abseil-cpp/absl/types/CMakeLists.txt +23 -167
  403. package/vendor/abseil-cpp/absl/types/any.h +9 -484
  404. package/vendor/abseil-cpp/absl/types/optional.h +7 -747
  405. package/vendor/abseil-cpp/absl/types/span.h +46 -19
  406. package/vendor/abseil-cpp/absl/types/span_test.cc +27 -0
  407. package/vendor/abseil-cpp/absl/types/variant.h +5 -784
  408. package/vendor/abseil-cpp/absl/types/variant_test.cc +43 -2597
  409. package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -41
  410. package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +0 -40
  411. package/vendor/abseil-cpp/absl/utility/utility.h +10 -185
  412. package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -3
  413. package/vendor/abseil-cpp/ci/cmake_common.sh +2 -2
  414. package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +12 -13
  415. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +24 -21
  416. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +12 -12
  417. package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +23 -22
  418. package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +20 -19
  419. package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
  420. package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +17 -17
  421. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +10 -10
  422. package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_cmake.sh +1 -1
  423. package/vendor/abseil-cpp/ci/linux_gcc_alpine_cmake.sh +1 -1
  424. package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +9 -10
  425. package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +9 -1
  426. package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +14 -6
  427. package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +14 -6
  428. package/vendor/abseil-cpp/ci/windows_msvc_cmake.bat +1 -1
  429. package/vendor/re2/.bazelrc +4 -4
  430. package/vendor/re2/.bcr/metadata.template.json +16 -0
  431. package/vendor/re2/.bcr/presubmit.yml +57 -0
  432. package/vendor/re2/.bcr/source.template.json +5 -0
  433. package/vendor/re2/.github/bazel.sh +1 -7
  434. package/vendor/re2/.github/workflows/ci-bazel.yml +5 -5
  435. package/vendor/re2/.github/workflows/ci-cmake.yml +4 -4
  436. package/vendor/re2/.github/workflows/ci.yml +5 -6
  437. package/vendor/re2/.github/workflows/pages.yml +3 -3
  438. package/vendor/re2/.github/workflows/python.yml +29 -24
  439. package/vendor/re2/.github/workflows/release-bazel.yml +42 -0
  440. package/vendor/re2/.github/workflows/release.yml +15 -4
  441. package/vendor/re2/BUILD.bazel +25 -0
  442. package/vendor/re2/CMakeLists.txt +100 -85
  443. package/vendor/re2/CONTRIBUTING.md +0 -1
  444. package/vendor/re2/MODULE.bazel +10 -10
  445. package/vendor/re2/Makefile +1 -1
  446. package/vendor/re2/README.md +259 -0
  447. package/vendor/re2/python/BUILD.bazel +8 -0
  448. package/vendor/re2/python/re2.py +1 -1
  449. package/vendor/re2/python/re2_test.py +6 -0
  450. package/vendor/re2/python/setup.py +3 -3
  451. package/vendor/re2/re2/bitmap256.cc +3 -4
  452. package/vendor/re2/re2/bitstate.cc +15 -10
  453. package/vendor/re2/re2/dfa.cc +1 -2
  454. package/vendor/re2/re2/parse.cc +3 -4
  455. package/vendor/re2/re2/prog.cc +1 -2
  456. package/vendor/re2/re2/prog.h +1 -0
  457. package/vendor/re2/re2/re2.cc +5 -0
  458. package/vendor/re2/re2/re2.h +9 -9
  459. package/vendor/re2/re2/set.cc +6 -0
  460. package/vendor/re2/re2/set.h +5 -0
  461. package/vendor/re2/re2/testing/re2_arg_test.cc +3 -3
  462. package/vendor/re2/re2/testing/re2_test.cc +8 -0
  463. package/vendor/re2/re2/testing/set_test.cc +5 -0
  464. package/vendor/re2/re2/walker-inl.h +1 -1
  465. package/vendor/abseil-cpp/WORKSPACE +0 -76
  466. package/vendor/abseil-cpp/WORKSPACE.bzlmod +0 -19
  467. package/vendor/abseil-cpp/absl/base/inline_variable_test.cc +0 -64
  468. package/vendor/abseil-cpp/absl/base/internal/inline_variable.h +0 -108
  469. package/vendor/abseil-cpp/absl/base/internal/inline_variable_testing.h +0 -46
  470. package/vendor/abseil-cpp/absl/base/internal/invoke.h +0 -241
  471. package/vendor/abseil-cpp/absl/base/internal/nullability_impl.h +0 -69
  472. package/vendor/abseil-cpp/absl/base/invoke_test.cc +0 -331
  473. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -148
  474. package/vendor/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -54
  475. package/vendor/abseil-cpp/absl/random/internal/pool_urbg.h +0 -131
  476. package/vendor/abseil-cpp/absl/random/internal/pool_urbg_test.cc +0 -182
  477. package/vendor/abseil-cpp/absl/types/any_exception_safety_test.cc +0 -173
  478. package/vendor/abseil-cpp/absl/types/any_test.cc +0 -778
  479. package/vendor/abseil-cpp/absl/types/bad_any_cast.cc +0 -64
  480. package/vendor/abseil-cpp/absl/types/bad_any_cast.h +0 -75
  481. package/vendor/abseil-cpp/absl/types/bad_optional_access.cc +0 -66
  482. package/vendor/abseil-cpp/absl/types/bad_optional_access.h +0 -78
  483. package/vendor/abseil-cpp/absl/types/bad_variant_access.cc +0 -82
  484. package/vendor/abseil-cpp/absl/types/bad_variant_access.h +0 -82
  485. package/vendor/abseil-cpp/absl/types/internal/optional.h +0 -352
  486. package/vendor/abseil-cpp/absl/types/internal/variant.h +0 -1622
  487. package/vendor/abseil-cpp/absl/types/optional_exception_safety_test.cc +0 -292
  488. package/vendor/abseil-cpp/absl/types/optional_test.cc +0 -1615
  489. package/vendor/abseil-cpp/absl/types/variant_benchmark.cc +0 -222
  490. package/vendor/abseil-cpp/absl/types/variant_exception_safety_test.cc +0 -532
  491. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr.h +0 -70
  492. package/vendor/abseil-cpp/absl/utility/internal/if_constexpr_test.cc +0 -79
  493. package/vendor/abseil-cpp/absl/utility/utility_test.cc +0 -239
  494. package/vendor/re2/.github/workflows/pr.yml +0 -34
  495. package/vendor/re2/README +0 -47
@@ -39,12 +39,23 @@ template <typename T, typename U, typename = void>
39
39
  struct HasConversionOperatorToStatusOr : std::false_type {};
40
40
 
41
41
  template <typename T, typename U>
42
- void test(char (*)[sizeof(std::declval<U>().operator absl::StatusOr<T>())]);
42
+ void test(char (*absl_nullable)[sizeof(
43
+ std::declval<U>().operator absl::StatusOr<T>())]);
43
44
 
44
45
  template <typename T, typename U>
45
46
  struct HasConversionOperatorToStatusOr<T, U, decltype(test<T, U>(0))>
46
47
  : std::true_type {};
47
48
 
49
+ // Detects whether `T` is equality-comparable.
50
+ template <typename T, typename = void>
51
+ struct IsEqualityComparable : std::false_type {};
52
+
53
+ template <typename T>
54
+ struct IsEqualityComparable<
55
+ T, std::enable_if_t<std::is_convertible<
56
+ decltype(std::declval<T>() == std::declval<T>()),
57
+ bool>::value>> : std::true_type {};
58
+
48
59
  // Detects whether `T` is constructible or convertible from `StatusOr<U>`.
49
60
  template <typename T, typename U>
50
61
  using IsConstructibleOrConvertibleFromStatusOr =
@@ -79,17 +90,34 @@ template <typename T, typename V>
79
90
  struct IsDirectInitializationAmbiguous<T, absl::StatusOr<V>>
80
91
  : public IsConstructibleOrConvertibleFromStatusOr<T, V> {};
81
92
 
93
+ // Checks whether the conversion from U to T can be done without dangling
94
+ // temporaries.
95
+ // REQUIRES: T and U are references.
96
+ template <typename T, typename U>
97
+ using IsReferenceConversionValid = absl::conjunction< //
98
+ std::is_reference<T>, std::is_reference<U>,
99
+ // The references are convertible. This checks for
100
+ // lvalue/rvalue compatibility.
101
+ std::is_convertible<U, T>,
102
+ // The pointers are convertible. This checks we don't have
103
+ // a temporary.
104
+ std::is_convertible<std::remove_reference_t<U>*,
105
+ std::remove_reference_t<T>*>>;
106
+
82
107
  // Checks against the constraints of the direction initialization, i.e. when
83
108
  // `StatusOr<T>::StatusOr(U&&)` should participate in overload resolution.
84
109
  template <typename T, typename U>
85
110
  using IsDirectInitializationValid = absl::disjunction<
86
111
  // Short circuits if T is basically U.
87
- std::is_same<T, absl::remove_cvref_t<U>>,
88
- absl::negation<absl::disjunction<
89
- std::is_same<absl::StatusOr<T>, absl::remove_cvref_t<U>>,
90
- std::is_same<absl::Status, absl::remove_cvref_t<U>>,
91
- std::is_same<absl::in_place_t, absl::remove_cvref_t<U>>,
92
- IsDirectInitializationAmbiguous<T, U>>>>;
112
+ std::is_same<T, absl::remove_cvref_t<U>>, //
113
+ std::conditional_t<
114
+ std::is_reference_v<T>, //
115
+ IsReferenceConversionValid<T, U>,
116
+ absl::negation<absl::disjunction<
117
+ std::is_same<absl::StatusOr<T>, absl::remove_cvref_t<U>>,
118
+ std::is_same<absl::Status, absl::remove_cvref_t<U>>,
119
+ std::is_same<absl::in_place_t, absl::remove_cvref_t<U>>,
120
+ IsDirectInitializationAmbiguous<T, U>>>>>;
93
121
 
94
122
  // This trait detects whether `StatusOr<T>::operator=(U&&)` is ambiguous, which
95
123
  // is equivalent to whether all the following conditions are met:
@@ -129,7 +157,9 @@ using Equality = std::conditional_t<Value, T, absl::negation<T>>;
129
157
  template <bool Explicit, typename T, typename U, bool Lifetimebound>
130
158
  using IsConstructionValid = absl::conjunction<
131
159
  Equality<Lifetimebound,
132
- type_traits_internal::IsLifetimeBoundAssignment<T, U>>,
160
+ absl::disjunction<
161
+ std::is_reference<T>,
162
+ type_traits_internal::IsLifetimeBoundAssignment<T, U>>>,
133
163
  IsDirectInitializationValid<T, U&&>, std::is_constructible<T, U&&>,
134
164
  Equality<!Explicit, std::is_convertible<U&&, T>>,
135
165
  absl::disjunction<
@@ -145,8 +175,13 @@ using IsConstructionValid = absl::conjunction<
145
175
  template <typename T, typename U, bool Lifetimebound>
146
176
  using IsAssignmentValid = absl::conjunction<
147
177
  Equality<Lifetimebound,
148
- type_traits_internal::IsLifetimeBoundAssignment<T, U>>,
149
- std::is_constructible<T, U&&>, std::is_assignable<T&, U&&>,
178
+ absl::disjunction<
179
+ std::is_reference<T>,
180
+ type_traits_internal::IsLifetimeBoundAssignment<T, U>>>,
181
+ std::conditional_t<std::is_reference_v<T>,
182
+ IsReferenceConversionValid<T, U&&>,
183
+ absl::conjunction<std::is_constructible<T, U&&>,
184
+ std::is_assignable<T&, U&&>>>,
150
185
  absl::disjunction<
151
186
  std::is_same<T, absl::remove_cvref_t<U>>,
152
187
  absl::conjunction<
@@ -167,6 +202,9 @@ template <bool Explicit, typename T, typename U, bool Lifetimebound,
167
202
  typename UQ>
168
203
  using IsConstructionFromStatusOrValid = absl::conjunction<
169
204
  absl::negation<std::is_same<T, U>>,
205
+ // If `T` is a reference, then U must be a compatible one.
206
+ absl::disjunction<absl::negation<std::is_reference<T>>,
207
+ IsReferenceConversionValid<T, U>>,
170
208
  Equality<Lifetimebound,
171
209
  type_traits_internal::IsLifetimeBoundAssignment<T, U>>,
172
210
  std::is_constructible<T, UQ>,
@@ -182,10 +220,20 @@ using IsStatusOrAssignmentValid = absl::conjunction<
182
220
  absl::negation<IsConstructibleOrConvertibleOrAssignableFromStatusOr<
183
221
  T, absl::remove_cvref_t<U>>>>;
184
222
 
223
+ template <typename T, typename U, bool Lifetimebound>
224
+ using IsValueOrValid = absl::conjunction<
225
+ // If `T` is a reference, then U must be a compatible one.
226
+ absl::disjunction<absl::negation<std::is_reference<T>>,
227
+ IsReferenceConversionValid<T, U>>,
228
+ Equality<Lifetimebound,
229
+ absl::disjunction<
230
+ std::is_reference<T>,
231
+ type_traits_internal::IsLifetimeBoundAssignment<T, U>>>>;
232
+
185
233
  class Helper {
186
234
  public:
187
235
  // Move type-agnostic error handling to the .cc.
188
- static void HandleInvalidStatusCtorArg(absl::Nonnull<Status*>);
236
+ static void HandleInvalidStatusCtorArg(Status* absl_nonnull);
189
237
  [[noreturn]] static void Crash(const absl::Status& status);
190
238
  };
191
239
 
@@ -194,10 +242,30 @@ class Helper {
194
242
  // This abstraction is here mostly for the gcc performance fix.
195
243
  template <typename T, typename... Args>
196
244
  ABSL_ATTRIBUTE_NONNULL(1)
197
- void PlacementNew(absl::Nonnull<void*> p, Args&&... args) {
245
+ void PlacementNew(void* absl_nonnull p, Args&&... args) {
198
246
  new (p) T(std::forward<Args>(args)...);
199
247
  }
200
248
 
249
+ template <typename T>
250
+ class Reference {
251
+ public:
252
+ constexpr explicit Reference(T ref ABSL_ATTRIBUTE_LIFETIME_BOUND)
253
+ : payload_(std::addressof(ref)) {}
254
+
255
+ Reference(const Reference&) = default;
256
+ Reference& operator=(const Reference&) = default;
257
+ Reference& operator=(T value) {
258
+ payload_ = std::addressof(value);
259
+ return *this;
260
+ }
261
+
262
+ operator T() const { return static_cast<T>(*payload_); } // NOLINT
263
+ T get() const { return *this; }
264
+
265
+ private:
266
+ std::remove_reference_t<T>* absl_nonnull payload_;
267
+ };
268
+
201
269
  // Helper base class to hold the data and all operations.
202
270
  // We move all this to a base class to allow mixing with the appropriate
203
271
  // TraitsBase specialization.
@@ -206,6 +274,14 @@ class StatusOrData {
206
274
  template <typename U>
207
275
  friend class StatusOrData;
208
276
 
277
+ decltype(auto) MaybeMoveData() {
278
+ if constexpr (std::is_reference_v<T>) {
279
+ return data_.get();
280
+ } else {
281
+ return std::move(data_);
282
+ }
283
+ }
284
+
209
285
  public:
210
286
  StatusOrData() = delete;
211
287
 
@@ -220,7 +296,7 @@ class StatusOrData {
220
296
 
221
297
  StatusOrData(StatusOrData&& other) noexcept {
222
298
  if (other.ok()) {
223
- MakeValue(std::move(other.data_));
299
+ MakeValue(other.MaybeMoveData());
224
300
  MakeStatus();
225
301
  } else {
226
302
  MakeStatus(std::move(other.status_));
@@ -240,7 +316,7 @@ class StatusOrData {
240
316
  template <typename U>
241
317
  explicit StatusOrData(StatusOrData<U>&& other) {
242
318
  if (other.ok()) {
243
- MakeValue(std::move(other.data_));
319
+ MakeValue(other.MaybeMoveData());
244
320
  MakeStatus();
245
321
  } else {
246
322
  MakeStatus(std::move(other.status_));
@@ -253,13 +329,6 @@ class StatusOrData {
253
329
  MakeStatus();
254
330
  }
255
331
 
256
- explicit StatusOrData(const T& value) : data_(value) {
257
- MakeStatus();
258
- }
259
- explicit StatusOrData(T&& value) : data_(std::move(value)) {
260
- MakeStatus();
261
- }
262
-
263
332
  template <typename U,
264
333
  absl::enable_if_t<std::is_constructible<absl::Status, U&&>::value,
265
334
  int> = 0>
@@ -279,7 +348,7 @@ class StatusOrData {
279
348
  StatusOrData& operator=(StatusOrData&& other) {
280
349
  if (this == &other) return *this;
281
350
  if (other.ok())
282
- Assign(std::move(other.data_));
351
+ Assign(other.MaybeMoveData());
283
352
  else
284
353
  AssignStatus(std::move(other.status_));
285
354
  return *this;
@@ -288,7 +357,9 @@ class StatusOrData {
288
357
  ~StatusOrData() {
289
358
  if (ok()) {
290
359
  status_.~Status();
291
- data_.~T();
360
+ if constexpr (!std::is_trivially_destructible_v<T>) {
361
+ data_.~T();
362
+ }
292
363
  } else {
293
364
  status_.~Status();
294
365
  }
@@ -329,11 +400,13 @@ class StatusOrData {
329
400
  // When T is const, we need some non-const object we can cast to void* for
330
401
  // the placement new. dummy_ is that object.
331
402
  Dummy dummy_;
332
- T data_;
403
+ std::conditional_t<std::is_reference_v<T>, Reference<T>, T> data_;
333
404
  };
334
405
 
335
406
  void Clear() {
336
- if (ok()) data_.~T();
407
+ if constexpr (!std::is_trivially_destructible_v<T>) {
408
+ if (ok()) data_.~T();
409
+ }
337
410
  }
338
411
 
339
412
  void EnsureOk() const {
@@ -348,7 +421,8 @@ class StatusOrData {
348
421
  // argument.
349
422
  template <typename... Arg>
350
423
  void MakeValue(Arg&&... arg) {
351
- internal_statusor::PlacementNew<T>(&dummy_, std::forward<Arg>(arg)...);
424
+ internal_statusor::PlacementNew<decltype(data_)>(&dummy_,
425
+ std::forward<Arg>(arg)...);
352
426
  }
353
427
 
354
428
  // Construct the status (ie. status_) through placement new with the passed
@@ -358,6 +432,94 @@ class StatusOrData {
358
432
  internal_statusor::PlacementNew<Status>(&status_,
359
433
  std::forward<Args>(args)...);
360
434
  }
435
+
436
+ template <typename U>
437
+ T ValueOrImpl(U&& default_value) const& {
438
+ if (ok()) {
439
+ return data_;
440
+ }
441
+ return std::forward<U>(default_value);
442
+ }
443
+
444
+ template <typename U>
445
+ T ValueOrImpl(U&& default_value) && {
446
+ if (ok()) {
447
+ return std::move(data_);
448
+ }
449
+ return std::forward<U>(default_value);
450
+ }
451
+ };
452
+
453
+ [[noreturn]] void ThrowBadStatusOrAccess(absl::Status status);
454
+
455
+ template <typename T>
456
+ struct OperatorBase {
457
+ auto& self() const { return static_cast<const StatusOr<T>&>(*this); }
458
+ auto& self() { return static_cast<StatusOr<T>&>(*this); }
459
+
460
+ const T& operator*() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
461
+ self().EnsureOk();
462
+ return self().data_;
463
+ }
464
+ T& operator*() & ABSL_ATTRIBUTE_LIFETIME_BOUND {
465
+ self().EnsureOk();
466
+ return self().data_;
467
+ }
468
+ const T&& operator*() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND {
469
+ self().EnsureOk();
470
+ return std::move(self().data_);
471
+ }
472
+ T&& operator*() && ABSL_ATTRIBUTE_LIFETIME_BOUND {
473
+ self().EnsureOk();
474
+ return std::move(self().data_);
475
+ }
476
+
477
+ const T& value() const& ABSL_ATTRIBUTE_LIFETIME_BOUND {
478
+ if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
479
+ return self().data_;
480
+ }
481
+ T& value() & ABSL_ATTRIBUTE_LIFETIME_BOUND {
482
+ if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
483
+ return self().data_;
484
+ }
485
+ const T&& value() const&& ABSL_ATTRIBUTE_LIFETIME_BOUND {
486
+ if (!self().ok()) {
487
+ internal_statusor::ThrowBadStatusOrAccess(std::move(self().status_));
488
+ }
489
+ return std::move(self().data_);
490
+ }
491
+ T&& value() && ABSL_ATTRIBUTE_LIFETIME_BOUND {
492
+ if (!self().ok()) {
493
+ internal_statusor::ThrowBadStatusOrAccess(std::move(self().status_));
494
+ }
495
+ return std::move(self().data_);
496
+ }
497
+
498
+ const T* absl_nonnull operator->() const ABSL_ATTRIBUTE_LIFETIME_BOUND {
499
+ return std::addressof(**this);
500
+ }
501
+ T* absl_nonnull operator->() ABSL_ATTRIBUTE_LIFETIME_BOUND {
502
+ return std::addressof(**this);
503
+ }
504
+ };
505
+
506
+ template <typename T>
507
+ struct OperatorBase<T&> {
508
+ auto& self() const { return static_cast<const StatusOr<T&>&>(*this); }
509
+
510
+ T& operator*() const {
511
+ self().EnsureOk();
512
+ return self().data_;
513
+ }
514
+
515
+ T& value() const {
516
+ if (!self().ok()) internal_statusor::ThrowBadStatusOrAccess(self().status_);
517
+ return self().data_;
518
+ }
519
+
520
+ T* absl_nonnull operator->() const {
521
+ return std::addressof(**this);
522
+ }
361
523
  };
362
524
 
363
525
  // Helper base classes to allow implicitly deleted constructors and assignment
@@ -400,8 +562,9 @@ struct MoveCtorBase<T, false> {
400
562
  MoveCtorBase& operator=(MoveCtorBase&&) = default;
401
563
  };
402
564
 
403
- template <typename T, bool = std::is_copy_constructible<T>::value&&
404
- std::is_copy_assignable<T>::value>
565
+ template <typename T, bool = (std::is_copy_constructible<T>::value &&
566
+ std::is_copy_assignable<T>::value) ||
567
+ std::is_reference_v<T>>
405
568
  struct CopyAssignBase {
406
569
  CopyAssignBase() = default;
407
570
  CopyAssignBase(const CopyAssignBase&) = default;
@@ -419,8 +582,9 @@ struct CopyAssignBase<T, false> {
419
582
  CopyAssignBase& operator=(CopyAssignBase&&) = default;
420
583
  };
421
584
 
422
- template <typename T, bool = std::is_move_constructible<T>::value&&
423
- std::is_move_assignable<T>::value>
585
+ template <typename T, bool = (std::is_move_constructible<T>::value &&
586
+ std::is_move_assignable<T>::value) ||
587
+ std::is_reference_v<T>>
424
588
  struct MoveAssignBase {
425
589
  MoveAssignBase() = default;
426
590
  MoveAssignBase(const MoveAssignBase&) = default;
@@ -438,8 +602,6 @@ struct MoveAssignBase<T, false> {
438
602
  MoveAssignBase& operator=(MoveAssignBase&&) = delete;
439
603
  };
440
604
 
441
- [[noreturn]] void ThrowBadStatusOrAccess(absl::Status status);
442
-
443
605
  // Used to introduce jitter into the output of printing functions for
444
606
  // `StatusOr` (i.e. `AbslStringify` and `operator<<`).
445
607
  class StringifyRandom {
@@ -91,16 +91,12 @@ std::ostream& operator<<(std::ostream& os, StatusCode code) {
91
91
  return os << StatusCodeToString(code);
92
92
  }
93
93
 
94
- absl::Nonnull<const std::string*> Status::EmptyString() {
94
+ const std::string* absl_nonnull Status::EmptyString() {
95
95
  static const absl::NoDestructor<std::string> kEmpty;
96
96
  return kEmpty.get();
97
97
  }
98
98
 
99
- #ifdef ABSL_INTERNAL_NEED_REDUNDANT_CONSTEXPR_DECL
100
- constexpr const char Status::kMovedFromString[];
101
- #endif
102
-
103
- absl::Nonnull<const std::string*> Status::MovedFromString() {
99
+ const std::string* absl_nonnull Status::MovedFromString() {
104
100
  static const absl::NoDestructor<std::string> kMovedFrom(kMovedFromString);
105
101
  return kMovedFrom.get();
106
102
  }
@@ -112,7 +108,7 @@ Status::Status(absl::StatusCode code, absl::string_view msg)
112
108
  }
113
109
  }
114
110
 
115
- absl::Nonnull<status_internal::StatusRep*> Status::PrepareToModify(
111
+ status_internal::StatusRep* absl_nonnull Status::PrepareToModify(
116
112
  uintptr_t rep) {
117
113
  if (IsInlined(rep)) {
118
114
  return new status_internal::StatusRep(InlinedRepToCode(rep),
@@ -410,7 +406,7 @@ Status ErrnoToStatus(int error_number, absl::string_view message) {
410
406
  MessageForErrnoToStatus(error_number, message));
411
407
  }
412
408
 
413
- absl::Nonnull<const char*> StatusMessageAsCStr(const Status& status) {
409
+ const char* absl_nonnull StatusMessageAsCStr(const Status& status) {
414
410
  // As an internal implementation detail, we guarantee that if status.message()
415
411
  // is non-empty, then the resulting string_view is null terminated.
416
412
  auto sv_message = status.message();
@@ -623,15 +623,15 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
623
623
 
624
624
  // REQUIRES: !ok()
625
625
  // Ensures rep is not inlined or shared with any other Status.
626
- static absl::Nonnull<status_internal::StatusRep*> PrepareToModify(
626
+ static status_internal::StatusRep* absl_nonnull PrepareToModify(
627
627
  uintptr_t rep);
628
628
 
629
629
  // MSVC 14.0 limitation requires the const.
630
630
  static constexpr const char kMovedFromString[] =
631
631
  "Status accessed after move.";
632
632
 
633
- static absl::Nonnull<const std::string*> EmptyString();
634
- static absl::Nonnull<const std::string*> MovedFromString();
633
+ static const std::string* absl_nonnull EmptyString();
634
+ static const std::string* absl_nonnull MovedFromString();
635
635
 
636
636
  // Returns whether rep contains an inlined representation.
637
637
  // See rep_ for details.
@@ -649,8 +649,8 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI Status final {
649
649
 
650
650
  // Converts between StatusRep* and the external uintptr_t representation used
651
651
  // by rep_. See rep_ for details.
652
- static uintptr_t PointerToRep(absl::Nonnull<status_internal::StatusRep*> r);
653
- static absl::Nonnull<const status_internal::StatusRep*> RepToPointer(
652
+ static uintptr_t PointerToRep(status_internal::StatusRep* absl_nonnull r);
653
+ static const status_internal::StatusRep* absl_nonnull RepToPointer(
654
654
  uintptr_t r);
655
655
 
656
656
  static std::string ToStringSlow(uintptr_t rep, StatusToStringMode mode);
@@ -902,14 +902,14 @@ constexpr uintptr_t Status::MovedFromRep() {
902
902
  return CodeToInlinedRep(absl::StatusCode::kInternal) | 2;
903
903
  }
904
904
 
905
- inline absl::Nonnull<const status_internal::StatusRep*> Status::RepToPointer(
905
+ inline const status_internal::StatusRep* absl_nonnull Status::RepToPointer(
906
906
  uintptr_t rep) {
907
907
  assert(!IsInlined(rep));
908
908
  return reinterpret_cast<const status_internal::StatusRep*>(rep);
909
909
  }
910
910
 
911
911
  inline uintptr_t Status::PointerToRep(
912
- absl::Nonnull<status_internal::StatusRep*> rep) {
912
+ status_internal::StatusRep* absl_nonnull rep) {
913
913
  return reinterpret_cast<uintptr_t>(rep);
914
914
  }
915
915
 
@@ -934,7 +934,7 @@ inline Status CancelledError() { return Status(absl::StatusCode::kCancelled); }
934
934
  // If the status's message is empty, the empty string is returned.
935
935
  //
936
936
  // StatusMessageAsCStr exists for C support. Use `status.message()` in C++.
937
- absl::Nonnull<const char*> StatusMessageAsCStr(
937
+ const char* absl_nonnull StatusMessageAsCStr(
938
938
  const Status& status ABSL_ATTRIBUTE_LIFETIME_BOUND);
939
939
 
940
940
  ABSL_NAMESPACE_END
@@ -1,4 +1,4 @@
1
- // Copyright 2017 The Abseil Authors.
1
+ // Copyright 2025 The Abseil Authors.
2
2
  //
3
3
  // Licensed under the Apache License, Version 2.0 (the "License");
4
4
  // you may not use this file except in compliance with the License.
@@ -12,16 +12,26 @@
12
12
  // See the License for the specific language governing permissions and
13
13
  // limitations under the License.
14
14
 
15
- #include "absl/base/internal/inline_variable_testing.h"
15
+ #include <utility>
16
+ #include "absl/status/status.h"
17
+ #include "benchmark/benchmark.h"
16
18
 
17
- namespace absl {
18
- ABSL_NAMESPACE_BEGIN
19
- namespace inline_variable_testing_internal {
19
+ namespace {
20
20
 
21
- const Foo& get_foo_a() { return inline_variable_foo; }
21
+ void BM_CreateOk(benchmark::State& state) {
22
+ for (auto _ : state) {
23
+ absl::Status s; // ok.
24
+ benchmark::DoNotOptimize(s);
25
+ }
26
+ }
27
+ BENCHMARK(BM_CreateOk);
22
28
 
23
- const int& get_int_a() { return inline_variable_int; }
29
+ void BM_CreateBad(benchmark::State& state) {
30
+ for (auto _ : state) {
31
+ absl::Status s(absl::StatusCode::kInvalidArgument, "message");
32
+ benchmark::DoNotOptimize(s);
33
+ }
34
+ }
35
+ BENCHMARK(BM_CreateBad);
24
36
 
25
- } // namespace inline_variable_testing_internal
26
- ABSL_NAMESPACE_END
27
- } // namespace absl
37
+ } // namespace
@@ -17,6 +17,9 @@
17
17
  // -----------------------------------------------------------------------------
18
18
  #include "absl/status/status_matchers.h"
19
19
 
20
+ #include <string>
21
+ #include <vector>
22
+
20
23
  #include "gmock/gmock.h"
21
24
  #include "gtest/gtest-spi.h"
22
25
  #include "gtest/gtest.h"
@@ -29,7 +32,12 @@ namespace {
29
32
  using ::absl_testing::IsOk;
30
33
  using ::absl_testing::IsOkAndHolds;
31
34
  using ::absl_testing::StatusIs;
35
+ using ::testing::ElementsAre;
36
+ using ::testing::Eq;
32
37
  using ::testing::Gt;
38
+ using ::testing::MatchesRegex;
39
+ using ::testing::Not;
40
+ using ::testing::Ref;
33
41
 
34
42
  TEST(StatusMatcherTest, StatusIsOk) { EXPECT_THAT(absl::OkStatus(), IsOk()); }
35
43
 
@@ -66,6 +74,13 @@ TEST(StatusMatcherTest, IsOkAndHoldsFailure) {
66
74
  "actual");
67
75
  }
68
76
 
77
+ template <typename MatcherType, typename Value>
78
+ std::string Explain(const MatcherType& m, const Value& x) {
79
+ ::testing::StringMatchResultListener listener;
80
+ ExplainMatchResult(m, x, &listener);
81
+ return listener.str();
82
+ }
83
+
69
84
  TEST(StatusMatcherTest, StatusIs) {
70
85
  absl::Status unknown = absl::UnknownError("unbekannt");
71
86
  absl::Status invalid = absl::InvalidArgumentError("ungueltig");
@@ -78,6 +93,20 @@ TEST(StatusMatcherTest, StatusIs) {
78
93
  EXPECT_THAT(invalid, StatusIs(3));
79
94
  EXPECT_THAT(invalid,
80
95
  StatusIs(absl::StatusCode::kInvalidArgument, "ungueltig"));
96
+
97
+ auto m = StatusIs(absl::StatusCode::kInternal, "internal error");
98
+ EXPECT_THAT(
99
+ ::testing::DescribeMatcher<absl::Status>(m),
100
+ MatchesRegex(
101
+ "has a status code that .*, and has an error message that .*"));
102
+ EXPECT_THAT(
103
+ ::testing::DescribeMatcher<absl::Status>(m, /*negation=*/true),
104
+ MatchesRegex(
105
+ "either has a status code that .*, or has an error message that .*"));
106
+ EXPECT_THAT(Explain(m, absl::InvalidArgumentError("internal error")),
107
+ Eq("whose status code is wrong"));
108
+ EXPECT_THAT(Explain(m, absl::InternalError("unexpected error")),
109
+ Eq("whose error message is wrong"));
81
110
  }
82
111
 
83
112
  TEST(StatusMatcherTest, StatusOrIs) {
@@ -94,6 +123,23 @@ TEST(StatusMatcherTest, StatusOrIs) {
94
123
  EXPECT_THAT(invalid, StatusIs(3));
95
124
  EXPECT_THAT(invalid,
96
125
  StatusIs(absl::StatusCode::kInvalidArgument, "ungueltig"));
126
+
127
+ auto m = StatusIs(absl::StatusCode::kInternal, "internal error");
128
+ EXPECT_THAT(
129
+ ::testing::DescribeMatcher<absl::StatusOr<int>>(m),
130
+ MatchesRegex(
131
+ "has a status code that .*, and has an error message that .*"));
132
+ EXPECT_THAT(
133
+ ::testing::DescribeMatcher<absl::StatusOr<int>>(m, /*negation=*/true),
134
+ MatchesRegex(
135
+ "either has a status code that .*, or has an error message that .*"));
136
+ EXPECT_THAT(Explain(m, absl::StatusOr<int>(57)), Eq("which is OK"));
137
+ EXPECT_THAT(Explain(m, absl::StatusOr<int>(
138
+ absl::InvalidArgumentError("internal error"))),
139
+ Eq("whose status code is wrong"));
140
+ EXPECT_THAT(
141
+ Explain(m, absl::StatusOr<int>(absl::InternalError("unexpected error"))),
142
+ Eq("whose error message is wrong"));
97
143
  }
98
144
 
99
145
  TEST(StatusMatcherTest, StatusIsFailure) {
@@ -116,4 +162,23 @@ TEST(StatusMatcherTest, StatusIsFailure) {
116
162
  "ungueltig");
117
163
  }
118
164
 
165
+ TEST(StatusMatcherTest, ReferencesWork) {
166
+ int i = 17;
167
+ int j = 19;
168
+ EXPECT_THAT(absl::StatusOr<int&>(i), IsOkAndHolds(17));
169
+ EXPECT_THAT(absl::StatusOr<int&>(i), Not(IsOkAndHolds(19)));
170
+ EXPECT_THAT(absl::StatusOr<const int&>(i), IsOkAndHolds(17));
171
+
172
+ // Reference testing works as expected.
173
+ EXPECT_THAT(absl::StatusOr<int&>(i), IsOkAndHolds(Ref(i)));
174
+ EXPECT_THAT(absl::StatusOr<int&>(i), Not(IsOkAndHolds(Ref(j))));
175
+
176
+ // Try a more complex one.
177
+ std::vector<std::string> vec = {"A", "B", "C"};
178
+ EXPECT_THAT(absl::StatusOr<std::vector<std::string>&>(vec),
179
+ IsOkAndHolds(ElementsAre("A", "B", "C")));
180
+ EXPECT_THAT(absl::StatusOr<std::vector<std::string>&>(vec),
181
+ Not(IsOkAndHolds(ElementsAre("A", "X", "C"))));
182
+ }
183
+
119
184
  } // namespace
@@ -35,8 +35,8 @@ namespace status_internal {
35
35
  // NOTE: This is an internal API and the design is subject to change in the
36
36
  // future in a non-backward-compatible way. Since it's only meant for debugging
37
37
  // purpose, you should not rely on it in any critical logic.
38
- using StatusPayloadPrinter = absl::Nullable<absl::optional<std::string> (*)(
39
- absl::string_view, const absl::Cord&)>;
38
+ using StatusPayloadPrinter = absl::optional<std::string> (*absl_nullable)(
39
+ absl::string_view, const absl::Cord&);
40
40
 
41
41
  // Sets the global payload printer. Only one printer should be set per process.
42
42
  // If multiple printers are set, it's undefined which one will be used.
@@ -55,7 +55,7 @@ BadStatusOrAccess& BadStatusOrAccess::operator=(BadStatusOrAccess&& other) {
55
55
  BadStatusOrAccess::BadStatusOrAccess(BadStatusOrAccess&& other)
56
56
  : status_(std::move(other.status_)) {}
57
57
 
58
- absl::Nonnull<const char*> BadStatusOrAccess::what() const noexcept {
58
+ const char* absl_nonnull BadStatusOrAccess::what() const noexcept {
59
59
  InitWhat();
60
60
  return what_.c_str();
61
61
  }
@@ -70,7 +70,7 @@ void BadStatusOrAccess::InitWhat() const {
70
70
 
71
71
  namespace internal_statusor {
72
72
 
73
- void Helper::HandleInvalidStatusCtorArg(absl::Nonnull<absl::Status*> status) {
73
+ void Helper::HandleInvalidStatusCtorArg(absl::Status* absl_nonnull status) {
74
74
  const char* kMessage =
75
75
  "An OK status is not a valid constructor argument to StatusOr<T>";
76
76
  #ifdef NDEBUG