grpc 1.84.0 → 1.85.0.pre1

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 (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -52,8 +52,9 @@
52
52
 
53
53
  #include "absl/algorithm/algorithm.h"
54
54
  #include "absl/base/config.h"
55
+ #include "absl/base/internal/hardening.h"
56
+ #include "absl/base/internal/iterator_traits.h"
55
57
  #include "absl/base/macros.h"
56
- #include "absl/base/nullability.h"
57
58
  #include "absl/meta/type_traits.h"
58
59
 
59
60
  namespace absl {
@@ -107,6 +108,42 @@ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 ContainerIter<C> c_end(C& c) {
107
108
  return end(c);
108
109
  }
109
110
 
111
+ // Helper to check that the `OutputRange` has enough space.
112
+ // Only performs the check if the iterators are ForwardIterators or better.
113
+ template <typename InputSequence, typename Size, typename OutputRange>
114
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 void AssertCopyNSize(InputSequence& input,
115
+ Size n,
116
+ OutputRange& output) {
117
+ using InputIter = ContainerIter<InputSequence>;
118
+ using OutputIter = ContainerIter<OutputRange>;
119
+
120
+ if constexpr (base_internal::IsAtLeastForwardIterator<InputIter>::value) {
121
+ base_internal::HardeningAssert(
122
+ n <= std::distance(container_algorithm_internal::c_begin(input),
123
+ container_algorithm_internal::c_end(input)));
124
+ }
125
+ if constexpr (base_internal::IsAtLeastForwardIterator<OutputIter>::value) {
126
+ base_internal::HardeningAssert(
127
+ n <= std::distance(container_algorithm_internal::c_begin(output),
128
+ container_algorithm_internal::c_end(output)));
129
+ }
130
+ }
131
+
132
+ template <typename InputSequence, typename OutputRange>
133
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 void AssertCopySize(InputSequence& input,
134
+ OutputRange& output) {
135
+ using InputIter = ContainerIter<InputSequence>;
136
+ using OutputIter = ContainerIter<OutputRange>;
137
+ if constexpr (base_internal::IsAtLeastForwardIterator<InputIter>::value &&
138
+ base_internal::IsAtLeastForwardIterator<OutputIter>::value) {
139
+ base_internal::HardeningAssert(
140
+ std::distance(container_algorithm_internal::c_begin(input),
141
+ container_algorithm_internal::c_end(input)) <=
142
+ std::distance(container_algorithm_internal::c_begin(output),
143
+ container_algorithm_internal::c_end(output)));
144
+ }
145
+ }
146
+
110
147
  template <typename T>
111
148
  struct IsUnorderedContainer : std::false_type {};
112
149
 
@@ -118,6 +155,27 @@ template <class Key, class Hash, class KeyEqual, class Allocator>
118
155
  struct IsUnorderedContainer<std::unordered_set<Key, Hash, KeyEqual, Allocator>>
119
156
  : std::true_type {};
120
157
 
158
+ template <typename T, typename = void>
159
+ struct HasBeginEnd : std::false_type {};
160
+
161
+ template <typename T>
162
+ struct HasBeginEnd<T, std::void_t<decltype(container_algorithm_internal::begin(
163
+ std::declval<T (*)()>()())),
164
+ decltype(container_algorithm_internal::end(
165
+ std::declval<T (*)()>()()))>>
166
+ : std::true_type {};
167
+
168
+ // We don't support multidimensional arrays yet
169
+ template <class T>
170
+ using IsMultidimensionalArray = std::is_array<std::remove_extent_t<T>>;
171
+
172
+ template <typename Iter, typename = void>
173
+ struct IsIterator : std::false_type {};
174
+
175
+ template <typename Iter>
176
+ struct IsIterator<
177
+ Iter, std::void_t<typename std::iterator_traits<Iter>::iterator_category>>
178
+ : std::true_type {};
121
179
  } // namespace container_algorithm_internal
122
180
 
123
181
  // PUBLIC API
@@ -198,8 +256,8 @@ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_none_of(const C& c, Pred&& pred) {
198
256
  // Container-based version of the <algorithm> `std::for_each()` function to
199
257
  // apply a function to a container's elements.
200
258
  template <typename C, typename Function>
201
- ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 decay_t<Function> c_for_each(C&& c,
202
- Function&& f) {
259
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<Function> c_for_each(
260
+ C&& c, Function&& f) {
203
261
  return std::for_each(container_algorithm_internal::c_begin(c),
204
262
  container_algorithm_internal::c_end(c),
205
263
  std::forward<Function>(f));
@@ -522,9 +580,41 @@ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
522
580
  // Container-based version of the <algorithm> `std::copy()` function to copy a
523
581
  // container's elements into an iterator.
524
582
  template <typename InputSequence, typename OutputIterator>
525
- OutputIterator c_copy(const InputSequence& input, OutputIterator output) {
583
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
584
+ std::enable_if_t<container_algorithm_internal::IsIterator<
585
+ absl::remove_cvref_t<OutputIterator>>::value &&
586
+ !container_algorithm_internal::IsMultidimensionalArray<
587
+ InputSequence>::value,
588
+ std::decay_t<OutputIterator>>
589
+ c_copy(const InputSequence& input, OutputIterator&& output) {
526
590
  return std::copy(container_algorithm_internal::c_begin(input),
527
- container_algorithm_internal::c_end(input), output);
591
+ container_algorithm_internal::c_end(input),
592
+ std::forward<OutputIterator>(output));
593
+ }
594
+
595
+ // Copies elements from `input` to `output`. `absl::c_copy(input, output)` is
596
+ // equivalent to `std::copy(std::begin(input), std::end(input),
597
+ // std::begin(output))`.
598
+ //
599
+ // The `output` container must be large enough to hold all elements of `input`;
600
+ // this function does not resize `output`.
601
+
602
+ // If `std::size(input) > std::size(output)`, behavior is undefined.
603
+ // If `std::size(output) > std::size(input)`, only `std::size(input)` elements
604
+ // are copied, and `output` is not truncated.
605
+ template <typename InputSequence, typename OutputRange>
606
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
607
+ std::enable_if_t<container_algorithm_internal::HasBeginEnd<
608
+ std::add_lvalue_reference_t<OutputRange>>::value &&
609
+ !container_algorithm_internal::IsMultidimensionalArray<
610
+ std::remove_reference_t<OutputRange>>::value &&
611
+ !container_algorithm_internal::IsMultidimensionalArray<
612
+ InputSequence>::value,
613
+ void>
614
+ c_copy(const InputSequence& input, OutputRange&& output) {
615
+ container_algorithm_internal::AssertCopySize(input, output);
616
+ absl::c_copy(input, container_algorithm_internal::c_begin(
617
+ std::forward<OutputRange>(output)));
528
618
  }
529
619
 
530
620
  // c_copy_n()
@@ -532,8 +622,40 @@ OutputIterator c_copy(const InputSequence& input, OutputIterator output) {
532
622
  // Container-based version of the <algorithm> `std::copy_n()` function to copy a
533
623
  // container's first N elements into an iterator.
534
624
  template <typename C, typename Size, typename OutputIterator>
535
- OutputIterator c_copy_n(const C& input, Size n, OutputIterator output) {
536
- return std::copy_n(container_algorithm_internal::c_begin(input), n, output);
625
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::enable_if_t<
626
+ container_algorithm_internal::IsIterator<
627
+ absl::remove_cvref_t<OutputIterator>>::value &&
628
+ !container_algorithm_internal::IsMultidimensionalArray<C>::value,
629
+ std::decay_t<OutputIterator>>
630
+ c_copy_n(const C& input, Size n, OutputIterator&& output) {
631
+ return std::copy_n(container_algorithm_internal::c_begin(input), n,
632
+ std::forward<OutputIterator>(output));
633
+ }
634
+
635
+ // Copies the first `n` elements from `input` to `output`.
636
+ // `absl::c_copy_n(input, n, output)` is equivalent to
637
+ // `std::copy_n(std::begin(input), n, std::begin(output))`.
638
+ //
639
+ // The `output` container must be large enough to hold N elements; this function
640
+ // does not resize `output`.
641
+ //
642
+ // If `n > std::size(output)` or `n > std::size(input)`, behavior is
643
+ // undefined.
644
+ // If `std::size(output) > n`, only `n` elements are copied, and `output` is not
645
+ // truncated.
646
+ template <typename C, typename Size, typename OutputRange>
647
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::enable_if_t<
648
+ container_algorithm_internal::HasBeginEnd<
649
+ std::add_lvalue_reference_t<OutputRange>>::value &&
650
+ !container_algorithm_internal::IsMultidimensionalArray<
651
+ std::remove_reference_t<OutputRange>>::value &&
652
+ !container_algorithm_internal::IsMultidimensionalArray<C>::value,
653
+ void>
654
+ c_copy_n(const C& input, Size n, OutputRange&& output) {
655
+ container_algorithm_internal::AssertCopyNSize(input, n, output);
656
+ absl::c_copy_n(
657
+ input, n,
658
+ container_algorithm_internal::c_begin(std::forward<OutputRange>(output)));
537
659
  }
538
660
 
539
661
  // c_copy_if()
@@ -541,8 +663,8 @@ OutputIterator c_copy_n(const C& input, Size n, OutputIterator output) {
541
663
  // Container-based version of the <algorithm> `std::copy_if()` function to copy
542
664
  // a container's elements satisfying some condition into an iterator.
543
665
  template <typename InputSequence, typename OutputIterator, typename Pred>
544
- OutputIterator c_copy_if(const InputSequence& input, OutputIterator output,
545
- Pred&& pred) {
666
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
667
+ c_copy_if(const InputSequence& input, OutputIterator output, Pred&& pred) {
546
668
  return std::copy_if(container_algorithm_internal::c_begin(input),
547
669
  container_algorithm_internal::c_end(input), output,
548
670
  std::forward<Pred>(pred));
@@ -553,8 +675,8 @@ OutputIterator c_copy_if(const InputSequence& input, OutputIterator output,
553
675
  // Container-based version of the <algorithm> `std::copy_backward()` function to
554
676
  // copy a container's elements in reverse order into an iterator.
555
677
  template <typename C, typename BidirectionalIterator>
556
- BidirectionalIterator c_copy_backward(const C& src,
557
- BidirectionalIterator dest) {
678
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 BidirectionalIterator
679
+ c_copy_backward(const C& src, BidirectionalIterator dest) {
558
680
  return std::copy_backward(container_algorithm_internal::c_begin(src),
559
681
  container_algorithm_internal::c_end(src), dest);
560
682
  }
@@ -564,9 +686,36 @@ BidirectionalIterator c_copy_backward(const C& src,
564
686
  // Container-based version of the <algorithm> `std::move()` function to move
565
687
  // a container's elements into an iterator.
566
688
  template <typename C, typename OutputIterator>
567
- OutputIterator c_move(C&& src, OutputIterator dest) {
689
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
690
+ std::enable_if_t<container_algorithm_internal::IsIterator<
691
+ absl::remove_cvref_t<OutputIterator>>::value &&
692
+ !container_algorithm_internal::IsMultidimensionalArray<
693
+ std::remove_reference_t<C>>::value,
694
+ std::decay_t<OutputIterator>>
695
+ c_move(C&& src, OutputIterator&& dest) {
568
696
  return std::move(container_algorithm_internal::c_begin(src),
569
- container_algorithm_internal::c_end(src), dest);
697
+ container_algorithm_internal::c_end(src),
698
+ std::forward<OutputIterator>(dest));
699
+ }
700
+
701
+ // Moves elements from `src` to `dest`. `absl::c_move(src, dest)` is
702
+ // equivalent to `std::move(std::begin(src), std::end(src), std::begin(dest))`.
703
+ //
704
+ // The `dest` container must be large enough to hold all elements of `src`;
705
+ // this function does not resize `dest`.
706
+ template <typename C, typename OutputRange>
707
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
708
+ std::enable_if_t<container_algorithm_internal::HasBeginEnd<
709
+ std::add_lvalue_reference_t<OutputRange>>::value &&
710
+ !container_algorithm_internal::IsMultidimensionalArray<
711
+ std::remove_reference_t<OutputRange>>::value &&
712
+ !container_algorithm_internal::IsMultidimensionalArray<
713
+ std::remove_reference_t<C>>::value,
714
+ void>
715
+ c_move(C&& src, OutputRange&& dest) {
716
+ container_algorithm_internal::AssertCopySize(src, dest);
717
+ absl::c_move(std::forward<C>(src), container_algorithm_internal::c_begin(
718
+ std::forward<OutputRange>(dest)));
570
719
  }
571
720
 
572
721
  // c_move_backward()
@@ -574,7 +723,8 @@ OutputIterator c_move(C&& src, OutputIterator dest) {
574
723
  // Container-based version of the <algorithm> `std::move_backward()` function to
575
724
  // move a container's elements into an iterator in reverse order.
576
725
  template <typename C, typename BidirectionalIterator>
577
- BidirectionalIterator c_move_backward(C&& src, BidirectionalIterator dest) {
726
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 BidirectionalIterator
727
+ c_move_backward(C&& src, BidirectionalIterator dest) {
578
728
  return std::move_backward(container_algorithm_internal::c_begin(src),
579
729
  container_algorithm_internal::c_end(src), dest);
580
730
  }
@@ -585,7 +735,9 @@ BidirectionalIterator c_move_backward(C&& src, BidirectionalIterator dest) {
585
735
  // swap a container's elements with another container's elements. Swaps the
586
736
  // first N elements of `c1` and `c2`, where N = min(size(c1), size(c2)).
587
737
  template <typename C1, typename C2>
588
- container_algorithm_internal::ContainerIter<C2> c_swap_ranges(C1& c1, C2& c2) {
738
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
739
+ container_algorithm_internal::ContainerIter<C2>
740
+ c_swap_ranges(C1& c1, C2& c2) {
589
741
  auto first1 = container_algorithm_internal::c_begin(c1);
590
742
  auto last1 = container_algorithm_internal::c_end(c1);
591
743
  auto first2 = container_algorithm_internal::c_begin(c2);
@@ -605,8 +757,8 @@ container_algorithm_internal::ContainerIter<C2> c_swap_ranges(C1& c1, C2& c2) {
605
757
  // result in an iterator pointing to the last transformed element in the output
606
758
  // range.
607
759
  template <typename InputSequence, typename OutputIterator, typename UnaryOp>
608
- OutputIterator c_transform(const InputSequence& input, OutputIterator output,
609
- UnaryOp&& unary_op) {
760
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_transform(
761
+ const InputSequence& input, OutputIterator output, UnaryOp&& unary_op) {
610
762
  return std::transform(container_algorithm_internal::c_begin(input),
611
763
  container_algorithm_internal::c_end(input), output,
612
764
  std::forward<UnaryOp>(unary_op));
@@ -617,9 +769,9 @@ OutputIterator c_transform(const InputSequence& input, OutputIterator output,
617
769
  // where N = min(size(c1), size(c2)).
618
770
  template <typename InputSequence1, typename InputSequence2,
619
771
  typename OutputIterator, typename BinaryOp>
620
- OutputIterator c_transform(const InputSequence1& input1,
621
- const InputSequence2& input2, OutputIterator output,
622
- BinaryOp&& binary_op) {
772
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
773
+ c_transform(const InputSequence1& input1, const InputSequence2& input2,
774
+ OutputIterator output, BinaryOp&& binary_op) {
623
775
  auto first1 = container_algorithm_internal::c_begin(input1);
624
776
  auto last1 = container_algorithm_internal::c_end(input1);
625
777
  auto first2 = container_algorithm_internal::c_begin(input2);
@@ -638,7 +790,9 @@ OutputIterator c_transform(const InputSequence1& input1,
638
790
  // replace a container's elements of some value with a new value. The container
639
791
  // is modified in place.
640
792
  template <typename Sequence, typename T>
641
- void c_replace(Sequence& sequence, const T& old_value, const T& new_value) {
793
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_replace(Sequence& sequence,
794
+ const T& old_value,
795
+ const T& new_value) {
642
796
  std::replace(container_algorithm_internal::c_begin(sequence),
643
797
  container_algorithm_internal::c_end(sequence), old_value,
644
798
  new_value);
@@ -650,7 +804,8 @@ void c_replace(Sequence& sequence, const T& old_value, const T& new_value) {
650
804
  // replace a container's elements of some value with a new value based on some
651
805
  // condition. The container is modified in place.
652
806
  template <typename C, typename Pred, typename T>
653
- void c_replace_if(C& c, Pred&& pred, T&& new_value) {
807
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_replace_if(C& c, Pred&& pred,
808
+ T&& new_value) {
654
809
  std::replace_if(container_algorithm_internal::c_begin(c),
655
810
  container_algorithm_internal::c_end(c),
656
811
  std::forward<Pred>(pred), std::forward<T>(new_value));
@@ -662,8 +817,8 @@ void c_replace_if(C& c, Pred&& pred, T&& new_value) {
662
817
  // replace a container's elements of some value with a new value and return the
663
818
  // results within an iterator.
664
819
  template <typename C, typename OutputIterator, typename T>
665
- OutputIterator c_replace_copy(const C& c, OutputIterator result, T&& old_value,
666
- T&& new_value) {
820
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_replace_copy(
821
+ const C& c, OutputIterator result, T&& old_value, T&& new_value) {
667
822
  return std::replace_copy(container_algorithm_internal::c_begin(c),
668
823
  container_algorithm_internal::c_end(c), result,
669
824
  std::forward<T>(old_value),
@@ -676,8 +831,8 @@ OutputIterator c_replace_copy(const C& c, OutputIterator result, T&& old_value,
676
831
  // to replace a container's elements of some value with a new value based on
677
832
  // some condition, and return the results within an iterator.
678
833
  template <typename C, typename OutputIterator, typename Pred, typename T>
679
- OutputIterator c_replace_copy_if(const C& c, OutputIterator result, Pred&& pred,
680
- const T& new_value) {
834
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_replace_copy_if(
835
+ const C& c, OutputIterator result, Pred&& pred, const T& new_value) {
681
836
  return std::replace_copy_if(container_algorithm_internal::c_begin(c),
682
837
  container_algorithm_internal::c_end(c), result,
683
838
  std::forward<Pred>(pred), new_value);
@@ -688,7 +843,7 @@ OutputIterator c_replace_copy_if(const C& c, OutputIterator result, Pred&& pred,
688
843
  // Container-based version of the <algorithm> `std::fill()` function to fill a
689
844
  // container with some value.
690
845
  template <typename C, typename T>
691
- void c_fill(C& c, const T& value) {
846
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_fill(C& c, const T& value) {
692
847
  std::fill(container_algorithm_internal::c_begin(c),
693
848
  container_algorithm_internal::c_end(c), value);
694
849
  }
@@ -698,7 +853,8 @@ void c_fill(C& c, const T& value) {
698
853
  // Container-based version of the <algorithm> `std::fill_n()` function to fill
699
854
  // the first N elements in a container with some value.
700
855
  template <typename C, typename Size, typename T>
701
- void c_fill_n(C& c, Size n, const T& value) {
856
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_fill_n(C& c, Size n,
857
+ const T& value) {
702
858
  std::fill_n(container_algorithm_internal::c_begin(c), n, value);
703
859
  }
704
860
 
@@ -707,7 +863,7 @@ void c_fill_n(C& c, Size n, const T& value) {
707
863
  // Container-based version of the <algorithm> `std::generate()` function to
708
864
  // assign a container's elements to the values provided by the given generator.
709
865
  template <typename C, typename Generator>
710
- void c_generate(C& c, Generator&& gen) {
866
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_generate(C& c, Generator&& gen) {
711
867
  std::generate(container_algorithm_internal::c_begin(c),
712
868
  container_algorithm_internal::c_end(c),
713
869
  std::forward<Generator>(gen));
@@ -719,8 +875,9 @@ void c_generate(C& c, Generator&& gen) {
719
875
  // assign a container's first N elements to the values provided by the given
720
876
  // generator.
721
877
  template <typename C, typename Size, typename Generator>
722
- container_algorithm_internal::ContainerIter<C> c_generate_n(C& c, Size n,
723
- Generator&& gen) {
878
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
879
+ container_algorithm_internal::ContainerIter<C>
880
+ c_generate_n(C& c, Size n, Generator&& gen) {
724
881
  return std::generate_n(container_algorithm_internal::c_begin(c), n,
725
882
  std::forward<Generator>(gen));
726
883
  }
@@ -736,8 +893,8 @@ container_algorithm_internal::ContainerIter<C> c_generate_n(C& c, Size n,
736
893
  // copy a container's elements while removing any elements matching the given
737
894
  // `value`.
738
895
  template <typename C, typename OutputIterator, typename T>
739
- OutputIterator c_remove_copy(const C& c, OutputIterator result,
740
- const T& value) {
896
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
897
+ c_remove_copy(const C& c, OutputIterator result, const T& value) {
741
898
  return std::remove_copy(container_algorithm_internal::c_begin(c),
742
899
  container_algorithm_internal::c_end(c), result,
743
900
  value);
@@ -749,8 +906,8 @@ OutputIterator c_remove_copy(const C& c, OutputIterator result,
749
906
  // to copy a container's elements while removing any elements matching the given
750
907
  // condition.
751
908
  template <typename C, typename OutputIterator, typename Pred>
752
- OutputIterator c_remove_copy_if(const C& c, OutputIterator result,
753
- Pred&& pred) {
909
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
910
+ c_remove_copy_if(const C& c, OutputIterator result, Pred&& pred) {
754
911
  return std::remove_copy_if(container_algorithm_internal::c_begin(c),
755
912
  container_algorithm_internal::c_end(c), result,
756
913
  std::forward<Pred>(pred));
@@ -762,7 +919,8 @@ OutputIterator c_remove_copy_if(const C& c, OutputIterator result,
762
919
  // copy a container's elements while removing any elements containing duplicate
763
920
  // values.
764
921
  template <typename C, typename OutputIterator>
765
- OutputIterator c_unique_copy(const C& c, OutputIterator result) {
922
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
923
+ c_unique_copy(const C& c, OutputIterator result) {
766
924
  return std::unique_copy(container_algorithm_internal::c_begin(c),
767
925
  container_algorithm_internal::c_end(c), result);
768
926
  }
@@ -770,8 +928,8 @@ OutputIterator c_unique_copy(const C& c, OutputIterator result) {
770
928
  // Overload of c_unique_copy() for using a predicate evaluation other than
771
929
  // `==` for comparing uniqueness of the element values.
772
930
  template <typename C, typename OutputIterator, typename BinaryPredicate>
773
- OutputIterator c_unique_copy(const C& c, OutputIterator result,
774
- BinaryPredicate&& pred) {
931
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
932
+ c_unique_copy(const C& c, OutputIterator result, BinaryPredicate&& pred) {
775
933
  return std::unique_copy(container_algorithm_internal::c_begin(c),
776
934
  container_algorithm_internal::c_end(c), result,
777
935
  std::forward<BinaryPredicate>(pred));
@@ -782,7 +940,7 @@ OutputIterator c_unique_copy(const C& c, OutputIterator result,
782
940
  // Container-based version of the <algorithm> `std::reverse()` function to
783
941
  // reverse a container's elements.
784
942
  template <typename Sequence>
785
- void c_reverse(Sequence& sequence) {
943
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_reverse(Sequence& sequence) {
786
944
  std::reverse(container_algorithm_internal::c_begin(sequence),
787
945
  container_algorithm_internal::c_end(sequence));
788
946
  }
@@ -792,7 +950,8 @@ void c_reverse(Sequence& sequence) {
792
950
  // Container-based version of the <algorithm> `std::reverse()` function to
793
951
  // reverse a container's elements and write them to an iterator range.
794
952
  template <typename C, typename OutputIterator>
795
- OutputIterator c_reverse_copy(const C& sequence, OutputIterator result) {
953
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
954
+ c_reverse_copy(const C& sequence, OutputIterator result) {
796
955
  return std::reverse_copy(container_algorithm_internal::c_begin(sequence),
797
956
  container_algorithm_internal::c_end(sequence),
798
957
  result);
@@ -805,7 +964,8 @@ OutputIterator c_reverse_copy(const C& sequence, OutputIterator result) {
805
964
  // the first element in the container.
806
965
  template <typename C,
807
966
  typename Iterator = container_algorithm_internal::ContainerIter<C>>
808
- Iterator c_rotate(C& sequence, Iterator middle) {
967
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 Iterator c_rotate(C& sequence,
968
+ Iterator middle) {
809
969
  return absl::rotate(container_algorithm_internal::c_begin(sequence), middle,
810
970
  container_algorithm_internal::c_end(sequence));
811
971
  }
@@ -816,10 +976,10 @@ Iterator c_rotate(C& sequence, Iterator middle) {
816
976
  // shift a container's elements leftward such that the `middle` element becomes
817
977
  // the first element in a new iterator range.
818
978
  template <typename C, typename OutputIterator>
819
- OutputIterator c_rotate_copy(
820
- const C& sequence,
821
- container_algorithm_internal::ContainerIter<const C> middle,
822
- OutputIterator result) {
979
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
980
+ c_rotate_copy(const C& sequence,
981
+ container_algorithm_internal::ContainerIter<const C> middle,
982
+ OutputIterator result) {
823
983
  return std::rotate_copy(container_algorithm_internal::c_begin(sequence),
824
984
  middle, container_algorithm_internal::c_end(sequence),
825
985
  result);
@@ -861,7 +1021,8 @@ OutputIterator c_sample(const C& c, OutputIterator result, Distance n,
861
1021
  // to test whether all elements in the container for which `pred` returns `true`
862
1022
  // precede those for which `pred` is `false`.
863
1023
  template <typename C, typename Pred>
864
- bool c_is_partitioned(const C& c, Pred&& pred) {
1024
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_partitioned(const C& c,
1025
+ Pred&& pred) {
865
1026
  return std::is_partitioned(container_algorithm_internal::c_begin(c),
866
1027
  container_algorithm_internal::c_end(c),
867
1028
  std::forward<Pred>(pred));
@@ -874,7 +1035,9 @@ bool c_is_partitioned(const C& c, Pred&& pred) {
874
1035
  // which `pred` returns `true` precede all those for which it returns `false`,
875
1036
  // returning an iterator to the first element of the second group.
876
1037
  template <typename C, typename Pred>
877
- container_algorithm_internal::ContainerIter<C> c_partition(C& c, Pred&& pred) {
1038
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1039
+ container_algorithm_internal::ContainerIter<C>
1040
+ c_partition(C& c, Pred&& pred) {
878
1041
  return std::partition(container_algorithm_internal::c_begin(c),
879
1042
  container_algorithm_internal::c_end(c),
880
1043
  std::forward<Pred>(pred));
@@ -903,9 +1066,9 @@ container_algorithm_internal::ContainerIter<C> c_stable_partition(C& c,
903
1066
 
904
1067
  template <typename C, typename OutputIterator1, typename OutputIterator2,
905
1068
  typename Pred>
906
- std::pair<OutputIterator1, OutputIterator2> c_partition_copy(
907
- const C& c, OutputIterator1 out_true, OutputIterator2 out_false,
908
- Pred&& pred) {
1069
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::pair<OutputIterator1, OutputIterator2>
1070
+ c_partition_copy(const C& c, OutputIterator1 out_true,
1071
+ OutputIterator2 out_false, Pred&& pred) {
909
1072
  return std::partition_copy(container_algorithm_internal::c_begin(c),
910
1073
  container_algorithm_internal::c_end(c), out_true,
911
1074
  out_false, std::forward<Pred>(pred));
@@ -917,8 +1080,9 @@ std::pair<OutputIterator1, OutputIterator2> c_partition_copy(
917
1080
  // to return the first element of an already partitioned container for which
918
1081
  // the given `pred` is not `true`.
919
1082
  template <typename C, typename Pred>
920
- container_algorithm_internal::ContainerIter<C> c_partition_point(C& c,
921
- Pred&& pred) {
1083
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1084
+ container_algorithm_internal::ContainerIter<C>
1085
+ c_partition_point(C& c, Pred&& pred) {
922
1086
  return std::partition_point(container_algorithm_internal::c_begin(c),
923
1087
  container_algorithm_internal::c_end(c),
924
1088
  std::forward<Pred>(pred));
@@ -933,7 +1097,7 @@ container_algorithm_internal::ContainerIter<C> c_partition_point(C& c,
933
1097
  // Container-based version of the <algorithm> `std::sort()` function
934
1098
  // to sort elements in ascending order of their values.
935
1099
  template <typename C>
936
- void c_sort(C& c) {
1100
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort(C& c) {
937
1101
  std::sort(container_algorithm_internal::c_begin(c),
938
1102
  container_algorithm_internal::c_end(c));
939
1103
  }
@@ -941,7 +1105,7 @@ void c_sort(C& c) {
941
1105
  // Overload of c_sort() for performing a `comp` comparison other than the
942
1106
  // default `operator<`.
943
1107
  template <typename C, typename LessThan>
944
- void c_sort(C& c, LessThan&& comp) {
1108
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort(C& c, LessThan&& comp) {
945
1109
  std::sort(container_algorithm_internal::c_begin(c),
946
1110
  container_algorithm_internal::c_end(c),
947
1111
  std::forward<LessThan>(comp));
@@ -972,7 +1136,7 @@ void c_stable_sort(C& c, LessThan&& comp) {
972
1136
  // Container-based version of the <algorithm> `std::is_sorted()` function
973
1137
  // to evaluate whether the given container is sorted in ascending order.
974
1138
  template <typename C>
975
- bool c_is_sorted(const C& c) {
1139
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_sorted(const C& c) {
976
1140
  return std::is_sorted(container_algorithm_internal::c_begin(c),
977
1141
  container_algorithm_internal::c_end(c));
978
1142
  }
@@ -980,7 +1144,8 @@ bool c_is_sorted(const C& c) {
980
1144
  // c_is_sorted() overload for performing a `comp` comparison other than the
981
1145
  // default `operator<`.
982
1146
  template <typename C, typename LessThan>
983
- bool c_is_sorted(const C& c, LessThan&& comp) {
1147
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_sorted(const C& c,
1148
+ LessThan&& comp) {
984
1149
  return std::is_sorted(container_algorithm_internal::c_begin(c),
985
1150
  container_algorithm_internal::c_end(c),
986
1151
  std::forward<LessThan>(comp));
@@ -992,7 +1157,7 @@ bool c_is_sorted(const C& c, LessThan&& comp) {
992
1157
  // to rearrange elements within a container such that elements before `middle`
993
1158
  // are sorted in ascending order.
994
1159
  template <typename RandomAccessContainer>
995
- void c_partial_sort(
1160
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_partial_sort(
996
1161
  RandomAccessContainer& sequence,
997
1162
  container_algorithm_internal::ContainerIter<RandomAccessContainer> middle) {
998
1163
  std::partial_sort(container_algorithm_internal::c_begin(sequence), middle,
@@ -1002,7 +1167,7 @@ void c_partial_sort(
1002
1167
  // Overload of c_partial_sort() for performing a `comp` comparison other than
1003
1168
  // the default `operator<`.
1004
1169
  template <typename RandomAccessContainer, typename LessThan>
1005
- void c_partial_sort(
1170
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_partial_sort(
1006
1171
  RandomAccessContainer& sequence,
1007
1172
  container_algorithm_internal::ContainerIter<RandomAccessContainer> middle,
1008
1173
  LessThan&& comp) {
@@ -1019,8 +1184,9 @@ void c_partial_sort(
1019
1184
  // At most min(result.last - result.first, sequence.last - sequence.first)
1020
1185
  // elements from the sequence will be stored in the result.
1021
1186
  template <typename C, typename RandomAccessContainer>
1022
- container_algorithm_internal::ContainerIter<RandomAccessContainer>
1023
- c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) {
1187
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1188
+ container_algorithm_internal::ContainerIter<RandomAccessContainer>
1189
+ c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) {
1024
1190
  return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence),
1025
1191
  container_algorithm_internal::c_end(sequence),
1026
1192
  container_algorithm_internal::c_begin(result),
@@ -1030,9 +1196,10 @@ c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) {
1030
1196
  // Overload of c_partial_sort_copy() for performing a `comp` comparison other
1031
1197
  // than the default `operator<`.
1032
1198
  template <typename C, typename RandomAccessContainer, typename LessThan>
1033
- container_algorithm_internal::ContainerIter<RandomAccessContainer>
1034
- c_partial_sort_copy(const C& sequence, RandomAccessContainer& result,
1035
- LessThan&& comp) {
1199
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1200
+ container_algorithm_internal::ContainerIter<RandomAccessContainer>
1201
+ c_partial_sort_copy(const C& sequence, RandomAccessContainer& result,
1202
+ LessThan&& comp) {
1036
1203
  return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence),
1037
1204
  container_algorithm_internal::c_end(sequence),
1038
1205
  container_algorithm_internal::c_begin(result),
@@ -1046,7 +1213,9 @@ c_partial_sort_copy(const C& sequence, RandomAccessContainer& result,
1046
1213
  // to return the first element within a container that is not sorted in
1047
1214
  // ascending order as an iterator.
1048
1215
  template <typename C>
1049
- container_algorithm_internal::ContainerIter<C> c_is_sorted_until(C& c) {
1216
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1217
+ container_algorithm_internal::ContainerIter<C>
1218
+ c_is_sorted_until(C& c) {
1050
1219
  return std::is_sorted_until(container_algorithm_internal::c_begin(c),
1051
1220
  container_algorithm_internal::c_end(c));
1052
1221
  }
@@ -1054,8 +1223,9 @@ container_algorithm_internal::ContainerIter<C> c_is_sorted_until(C& c) {
1054
1223
  // Overload of c_is_sorted_until() for performing a `comp` comparison other than
1055
1224
  // the default `operator<`.
1056
1225
  template <typename C, typename LessThan>
1057
- container_algorithm_internal::ContainerIter<C> c_is_sorted_until(
1058
- C& c, LessThan&& comp) {
1226
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1227
+ container_algorithm_internal::ContainerIter<C>
1228
+ c_is_sorted_until(C& c, LessThan&& comp) {
1059
1229
  return std::is_sorted_until(container_algorithm_internal::c_begin(c),
1060
1230
  container_algorithm_internal::c_end(c),
1061
1231
  std::forward<LessThan>(comp));
@@ -1069,7 +1239,7 @@ container_algorithm_internal::ContainerIter<C> c_is_sorted_until(
1069
1239
  // any order, except that all preceding `nth` will be less than that element,
1070
1240
  // and all following `nth` will be greater than that element.
1071
1241
  template <typename RandomAccessContainer>
1072
- void c_nth_element(
1242
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_nth_element(
1073
1243
  RandomAccessContainer& sequence,
1074
1244
  container_algorithm_internal::ContainerIter<RandomAccessContainer> nth) {
1075
1245
  std::nth_element(container_algorithm_internal::c_begin(sequence), nth,
@@ -1079,7 +1249,7 @@ void c_nth_element(
1079
1249
  // Overload of c_nth_element() for performing a `comp` comparison other than
1080
1250
  // the default `operator<`.
1081
1251
  template <typename RandomAccessContainer, typename LessThan>
1082
- void c_nth_element(
1252
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_nth_element(
1083
1253
  RandomAccessContainer& sequence,
1084
1254
  container_algorithm_internal::ContainerIter<RandomAccessContainer> nth,
1085
1255
  LessThan&& comp) {
@@ -1098,8 +1268,9 @@ void c_nth_element(
1098
1268
  // to return an iterator pointing to the first element in a sorted container
1099
1269
  // which does not compare less than `value`.
1100
1270
  template <typename Sequence, typename T>
1101
- container_algorithm_internal::ContainerIter<Sequence> c_lower_bound(
1102
- Sequence& sequence, const T& value) {
1271
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1272
+ container_algorithm_internal::ContainerIter<Sequence>
1273
+ c_lower_bound(Sequence& sequence, const T& value) {
1103
1274
  return std::lower_bound(container_algorithm_internal::c_begin(sequence),
1104
1275
  container_algorithm_internal::c_end(sequence), value);
1105
1276
  }
@@ -1107,8 +1278,9 @@ container_algorithm_internal::ContainerIter<Sequence> c_lower_bound(
1107
1278
  // Overload of c_lower_bound() for performing a `comp` comparison other than
1108
1279
  // the default `operator<`.
1109
1280
  template <typename Sequence, typename T, typename LessThan>
1110
- container_algorithm_internal::ContainerIter<Sequence> c_lower_bound(
1111
- Sequence& sequence, const T& value, LessThan&& comp) {
1281
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1282
+ container_algorithm_internal::ContainerIter<Sequence>
1283
+ c_lower_bound(Sequence& sequence, const T& value, LessThan&& comp) {
1112
1284
  return std::lower_bound(container_algorithm_internal::c_begin(sequence),
1113
1285
  container_algorithm_internal::c_end(sequence), value,
1114
1286
  std::forward<LessThan>(comp));
@@ -1120,8 +1292,9 @@ container_algorithm_internal::ContainerIter<Sequence> c_lower_bound(
1120
1292
  // to return an iterator pointing to the first element in a sorted container
1121
1293
  // which is greater than `value`.
1122
1294
  template <typename Sequence, typename T>
1123
- container_algorithm_internal::ContainerIter<Sequence> c_upper_bound(
1124
- Sequence& sequence, const T& value) {
1295
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1296
+ container_algorithm_internal::ContainerIter<Sequence>
1297
+ c_upper_bound(Sequence& sequence, const T& value) {
1125
1298
  return std::upper_bound(container_algorithm_internal::c_begin(sequence),
1126
1299
  container_algorithm_internal::c_end(sequence), value);
1127
1300
  }
@@ -1129,8 +1302,9 @@ container_algorithm_internal::ContainerIter<Sequence> c_upper_bound(
1129
1302
  // Overload of c_upper_bound() for performing a `comp` comparison other than
1130
1303
  // the default `operator<`.
1131
1304
  template <typename Sequence, typename T, typename LessThan>
1132
- container_algorithm_internal::ContainerIter<Sequence> c_upper_bound(
1133
- Sequence& sequence, const T& value, LessThan&& comp) {
1305
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1306
+ container_algorithm_internal::ContainerIter<Sequence>
1307
+ c_upper_bound(Sequence& sequence, const T& value, LessThan&& comp) {
1134
1308
  return std::upper_bound(container_algorithm_internal::c_begin(sequence),
1135
1309
  container_algorithm_internal::c_end(sequence), value,
1136
1310
  std::forward<LessThan>(comp));
@@ -1142,8 +1316,9 @@ container_algorithm_internal::ContainerIter<Sequence> c_upper_bound(
1142
1316
  // to return an iterator pair pointing to the first and last elements in a
1143
1317
  // sorted container which compare equal to `value`.
1144
1318
  template <typename Sequence, typename T>
1145
- container_algorithm_internal::ContainerIterPairType<Sequence, Sequence>
1146
- c_equal_range(Sequence& sequence, const T& value) {
1319
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1320
+ container_algorithm_internal::ContainerIterPairType<Sequence, Sequence>
1321
+ c_equal_range(Sequence& sequence, const T& value) {
1147
1322
  return std::equal_range(container_algorithm_internal::c_begin(sequence),
1148
1323
  container_algorithm_internal::c_end(sequence), value);
1149
1324
  }
@@ -1151,8 +1326,9 @@ c_equal_range(Sequence& sequence, const T& value) {
1151
1326
  // Overload of c_equal_range() for performing a `comp` comparison other than
1152
1327
  // the default `operator<`.
1153
1328
  template <typename Sequence, typename T, typename LessThan>
1154
- container_algorithm_internal::ContainerIterPairType<Sequence, Sequence>
1155
- c_equal_range(Sequence& sequence, const T& value, LessThan&& comp) {
1329
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1330
+ container_algorithm_internal::ContainerIterPairType<Sequence, Sequence>
1331
+ c_equal_range(Sequence& sequence, const T& value, LessThan&& comp) {
1156
1332
  return std::equal_range(container_algorithm_internal::c_begin(sequence),
1157
1333
  container_algorithm_internal::c_end(sequence), value,
1158
1334
  std::forward<LessThan>(comp));
@@ -1164,7 +1340,8 @@ c_equal_range(Sequence& sequence, const T& value, LessThan&& comp) {
1164
1340
  // to test if any element in the sorted container contains a value equivalent to
1165
1341
  // 'value'.
1166
1342
  template <typename Sequence, typename T>
1167
- bool c_binary_search(const Sequence& sequence, const T& value) {
1343
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_binary_search(
1344
+ const Sequence& sequence, const T& value) {
1168
1345
  return std::binary_search(container_algorithm_internal::c_begin(sequence),
1169
1346
  container_algorithm_internal::c_end(sequence),
1170
1347
  value);
@@ -1173,8 +1350,8 @@ bool c_binary_search(const Sequence& sequence, const T& value) {
1173
1350
  // Overload of c_binary_search() for performing a `comp` comparison other than
1174
1351
  // the default `operator<`.
1175
1352
  template <typename Sequence, typename T, typename LessThan>
1176
- bool c_binary_search(const Sequence& sequence, const T& value,
1177
- LessThan&& comp) {
1353
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_binary_search(
1354
+ const Sequence& sequence, const T& value, LessThan&& comp) {
1178
1355
  return std::binary_search(container_algorithm_internal::c_begin(sequence),
1179
1356
  container_algorithm_internal::c_end(sequence),
1180
1357
  value, std::forward<LessThan>(comp));
@@ -1189,7 +1366,8 @@ bool c_binary_search(const Sequence& sequence, const T& value,
1189
1366
  // Container-based version of the <algorithm> `std::merge()` function
1190
1367
  // to merge two sorted containers into a single sorted iterator.
1191
1368
  template <typename C1, typename C2, typename OutputIterator>
1192
- OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result) {
1369
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1370
+ c_merge(const C1& c1, const C2& c2, OutputIterator result) {
1193
1371
  return std::merge(container_algorithm_internal::c_begin(c1),
1194
1372
  container_algorithm_internal::c_end(c1),
1195
1373
  container_algorithm_internal::c_begin(c2),
@@ -1199,8 +1377,8 @@ OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result) {
1199
1377
  // Overload of c_merge() for performing a `comp` comparison other than
1200
1378
  // the default `operator<`.
1201
1379
  template <typename C1, typename C2, typename OutputIterator, typename LessThan>
1202
- OutputIterator c_merge(const C1& c1, const C2& c2, OutputIterator result,
1203
- LessThan&& comp) {
1380
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1381
+ c_merge(const C1& c1, const C2& c2, OutputIterator result, LessThan&& comp) {
1204
1382
  return std::merge(container_algorithm_internal::c_begin(c1),
1205
1383
  container_algorithm_internal::c_end(c1),
1206
1384
  container_algorithm_internal::c_begin(c2),
@@ -1236,7 +1414,8 @@ void c_inplace_merge(C& c,
1236
1414
  // to test whether a sorted container `c1` entirely contains another sorted
1237
1415
  // container `c2`.
1238
1416
  template <typename C1, typename C2>
1239
- bool c_includes(const C1& c1, const C2& c2) {
1417
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_includes(const C1& c1,
1418
+ const C2& c2) {
1240
1419
  return std::includes(container_algorithm_internal::c_begin(c1),
1241
1420
  container_algorithm_internal::c_end(c1),
1242
1421
  container_algorithm_internal::c_begin(c2),
@@ -1246,7 +1425,8 @@ bool c_includes(const C1& c1, const C2& c2) {
1246
1425
  // Overload of c_includes() for performing a merge using a `comp` other than
1247
1426
  // `operator<`.
1248
1427
  template <typename C1, typename C2, typename LessThan>
1249
- bool c_includes(const C1& c1, const C2& c2, LessThan&& comp) {
1428
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_includes(const C1& c1, const C2& c2,
1429
+ LessThan&& comp) {
1250
1430
  return std::includes(container_algorithm_internal::c_begin(c1),
1251
1431
  container_algorithm_internal::c_end(c1),
1252
1432
  container_algorithm_internal::c_begin(c2),
@@ -1266,7 +1446,8 @@ template <typename C1, typename C2, typename OutputIterator,
1266
1446
  typename = typename std::enable_if<
1267
1447
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1268
1448
  void>::type>
1269
- OutputIterator c_set_union(const C1& c1, const C2& c2, OutputIterator output) {
1449
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1450
+ c_set_union(const C1& c1, const C2& c2, OutputIterator output) {
1270
1451
  return std::set_union(container_algorithm_internal::c_begin(c1),
1271
1452
  container_algorithm_internal::c_end(c1),
1272
1453
  container_algorithm_internal::c_begin(c2),
@@ -1282,8 +1463,8 @@ template <typename C1, typename C2, typename OutputIterator, typename LessThan,
1282
1463
  typename = typename std::enable_if<
1283
1464
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1284
1465
  void>::type>
1285
- OutputIterator c_set_union(const C1& c1, const C2& c2, OutputIterator output,
1286
- LessThan&& comp) {
1466
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_union(
1467
+ const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) {
1287
1468
  return std::set_union(container_algorithm_internal::c_begin(c1),
1288
1469
  container_algorithm_internal::c_end(c1),
1289
1470
  container_algorithm_internal::c_begin(c2),
@@ -1302,13 +1483,13 @@ template <typename C1, typename C2, typename OutputIterator,
1302
1483
  typename = typename std::enable_if<
1303
1484
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1304
1485
  void>::type>
1305
- OutputIterator c_set_intersection(const C1& c1, const C2& c2,
1306
- OutputIterator output) {
1486
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1487
+ c_set_intersection(const C1& c1, const C2& c2, OutputIterator output) {
1307
1488
  // In debug builds, ensure that both containers are sorted with respect to the
1308
1489
  // default comparator. std::set_intersection requires the containers be sorted
1309
1490
  // using operator<.
1310
- assert(absl::c_is_sorted(c1));
1311
- assert(absl::c_is_sorted(c2));
1491
+ ABSL_ASSERT(absl::c_is_sorted(c1));
1492
+ ABSL_ASSERT(absl::c_is_sorted(c2));
1312
1493
  return std::set_intersection(container_algorithm_internal::c_begin(c1),
1313
1494
  container_algorithm_internal::c_end(c1),
1314
1495
  container_algorithm_internal::c_begin(c2),
@@ -1324,13 +1505,13 @@ template <typename C1, typename C2, typename OutputIterator, typename LessThan,
1324
1505
  typename = typename std::enable_if<
1325
1506
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1326
1507
  void>::type>
1327
- OutputIterator c_set_intersection(const C1& c1, const C2& c2,
1328
- OutputIterator output, LessThan&& comp) {
1508
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_intersection(
1509
+ const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) {
1329
1510
  // In debug builds, ensure that both containers are sorted with respect to the
1330
1511
  // default comparator. std::set_intersection requires the containers be sorted
1331
1512
  // using the same comparator.
1332
- assert(absl::c_is_sorted(c1, comp));
1333
- assert(absl::c_is_sorted(c2, comp));
1513
+ ABSL_ASSERT(absl::c_is_sorted(c1, comp));
1514
+ ABSL_ASSERT(absl::c_is_sorted(c2, comp));
1334
1515
  return std::set_intersection(container_algorithm_internal::c_begin(c1),
1335
1516
  container_algorithm_internal::c_end(c1),
1336
1517
  container_algorithm_internal::c_begin(c2),
@@ -1350,8 +1531,8 @@ template <typename C1, typename C2, typename OutputIterator,
1350
1531
  typename = typename std::enable_if<
1351
1532
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1352
1533
  void>::type>
1353
- OutputIterator c_set_difference(const C1& c1, const C2& c2,
1354
- OutputIterator output) {
1534
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1535
+ c_set_difference(const C1& c1, const C2& c2, OutputIterator output) {
1355
1536
  return std::set_difference(container_algorithm_internal::c_begin(c1),
1356
1537
  container_algorithm_internal::c_end(c1),
1357
1538
  container_algorithm_internal::c_begin(c2),
@@ -1367,8 +1548,8 @@ template <typename C1, typename C2, typename OutputIterator, typename LessThan,
1367
1548
  typename = typename std::enable_if<
1368
1549
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1369
1550
  void>::type>
1370
- OutputIterator c_set_difference(const C1& c1, const C2& c2,
1371
- OutputIterator output, LessThan&& comp) {
1551
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_difference(
1552
+ const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) {
1372
1553
  return std::set_difference(container_algorithm_internal::c_begin(c1),
1373
1554
  container_algorithm_internal::c_end(c1),
1374
1555
  container_algorithm_internal::c_begin(c2),
@@ -1388,8 +1569,8 @@ template <typename C1, typename C2, typename OutputIterator,
1388
1569
  typename = typename std::enable_if<
1389
1570
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1390
1571
  void>::type>
1391
- OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2,
1392
- OutputIterator output) {
1572
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator
1573
+ c_set_symmetric_difference(const C1& c1, const C2& c2, OutputIterator output) {
1393
1574
  return std::set_symmetric_difference(
1394
1575
  container_algorithm_internal::c_begin(c1),
1395
1576
  container_algorithm_internal::c_end(c1),
@@ -1406,9 +1587,8 @@ template <typename C1, typename C2, typename OutputIterator, typename LessThan,
1406
1587
  typename = typename std::enable_if<
1407
1588
  !container_algorithm_internal::IsUnorderedContainer<C2>::value,
1408
1589
  void>::type>
1409
- OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2,
1410
- OutputIterator output,
1411
- LessThan&& comp) {
1590
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_symmetric_difference(
1591
+ const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) {
1412
1592
  return std::set_symmetric_difference(
1413
1593
  container_algorithm_internal::c_begin(c1),
1414
1594
  container_algorithm_internal::c_end(c1),
@@ -1426,7 +1606,8 @@ OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2,
1426
1606
  // Container-based version of the <algorithm> `std::push_heap()` function
1427
1607
  // to push a value onto a container heap.
1428
1608
  template <typename RandomAccessContainer>
1429
- void c_push_heap(RandomAccessContainer& sequence) {
1609
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_push_heap(
1610
+ RandomAccessContainer& sequence) {
1430
1611
  std::push_heap(container_algorithm_internal::c_begin(sequence),
1431
1612
  container_algorithm_internal::c_end(sequence));
1432
1613
  }
@@ -1434,7 +1615,8 @@ void c_push_heap(RandomAccessContainer& sequence) {
1434
1615
  // Overload of c_push_heap() for performing a push operation on a heap using a
1435
1616
  // `comp` other than `operator<`.
1436
1617
  template <typename RandomAccessContainer, typename LessThan>
1437
- void c_push_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1618
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_push_heap(
1619
+ RandomAccessContainer& sequence, LessThan&& comp) {
1438
1620
  std::push_heap(container_algorithm_internal::c_begin(sequence),
1439
1621
  container_algorithm_internal::c_end(sequence),
1440
1622
  std::forward<LessThan>(comp));
@@ -1445,7 +1627,8 @@ void c_push_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1445
1627
  // Container-based version of the <algorithm> `std::pop_heap()` function
1446
1628
  // to pop a value from a heap container.
1447
1629
  template <typename RandomAccessContainer>
1448
- void c_pop_heap(RandomAccessContainer& sequence) {
1630
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_pop_heap(
1631
+ RandomAccessContainer& sequence) {
1449
1632
  std::pop_heap(container_algorithm_internal::c_begin(sequence),
1450
1633
  container_algorithm_internal::c_end(sequence));
1451
1634
  }
@@ -1453,7 +1636,8 @@ void c_pop_heap(RandomAccessContainer& sequence) {
1453
1636
  // Overload of c_pop_heap() for performing a pop operation on a heap using a
1454
1637
  // `comp` other than `operator<`.
1455
1638
  template <typename RandomAccessContainer, typename LessThan>
1456
- void c_pop_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1639
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_pop_heap(
1640
+ RandomAccessContainer& sequence, LessThan&& comp) {
1457
1641
  std::pop_heap(container_algorithm_internal::c_begin(sequence),
1458
1642
  container_algorithm_internal::c_end(sequence),
1459
1643
  std::forward<LessThan>(comp));
@@ -1464,7 +1648,8 @@ void c_pop_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1464
1648
  // Container-based version of the <algorithm> `std::make_heap()` function
1465
1649
  // to make a container a heap.
1466
1650
  template <typename RandomAccessContainer>
1467
- void c_make_heap(RandomAccessContainer& sequence) {
1651
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_make_heap(
1652
+ RandomAccessContainer& sequence) {
1468
1653
  std::make_heap(container_algorithm_internal::c_begin(sequence),
1469
1654
  container_algorithm_internal::c_end(sequence));
1470
1655
  }
@@ -1472,7 +1657,8 @@ void c_make_heap(RandomAccessContainer& sequence) {
1472
1657
  // Overload of c_make_heap() for performing heap comparisons using a
1473
1658
  // `comp` other than `operator<`
1474
1659
  template <typename RandomAccessContainer, typename LessThan>
1475
- void c_make_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1660
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_make_heap(
1661
+ RandomAccessContainer& sequence, LessThan&& comp) {
1476
1662
  std::make_heap(container_algorithm_internal::c_begin(sequence),
1477
1663
  container_algorithm_internal::c_end(sequence),
1478
1664
  std::forward<LessThan>(comp));
@@ -1483,7 +1669,8 @@ void c_make_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1483
1669
  // Container-based version of the <algorithm> `std::sort_heap()` function
1484
1670
  // to sort a heap into ascending order (after which it is no longer a heap).
1485
1671
  template <typename RandomAccessContainer>
1486
- void c_sort_heap(RandomAccessContainer& sequence) {
1672
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort_heap(
1673
+ RandomAccessContainer& sequence) {
1487
1674
  std::sort_heap(container_algorithm_internal::c_begin(sequence),
1488
1675
  container_algorithm_internal::c_end(sequence));
1489
1676
  }
@@ -1491,7 +1678,8 @@ void c_sort_heap(RandomAccessContainer& sequence) {
1491
1678
  // Overload of c_sort_heap() for performing heap comparisons using a
1492
1679
  // `comp` other than `operator<`
1493
1680
  template <typename RandomAccessContainer, typename LessThan>
1494
- void c_sort_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1681
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort_heap(
1682
+ RandomAccessContainer& sequence, LessThan&& comp) {
1495
1683
  std::sort_heap(container_algorithm_internal::c_begin(sequence),
1496
1684
  container_algorithm_internal::c_end(sequence),
1497
1685
  std::forward<LessThan>(comp));
@@ -1502,7 +1690,8 @@ void c_sort_heap(RandomAccessContainer& sequence, LessThan&& comp) {
1502
1690
  // Container-based version of the <algorithm> `std::is_heap()` function
1503
1691
  // to check whether the given container is a heap.
1504
1692
  template <typename RandomAccessContainer>
1505
- bool c_is_heap(const RandomAccessContainer& sequence) {
1693
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_heap(
1694
+ const RandomAccessContainer& sequence) {
1506
1695
  return std::is_heap(container_algorithm_internal::c_begin(sequence),
1507
1696
  container_algorithm_internal::c_end(sequence));
1508
1697
  }
@@ -1510,7 +1699,8 @@ bool c_is_heap(const RandomAccessContainer& sequence) {
1510
1699
  // Overload of c_is_heap() for performing heap comparisons using a
1511
1700
  // `comp` other than `operator<`
1512
1701
  template <typename RandomAccessContainer, typename LessThan>
1513
- bool c_is_heap(const RandomAccessContainer& sequence, LessThan&& comp) {
1702
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_heap(
1703
+ const RandomAccessContainer& sequence, LessThan&& comp) {
1514
1704
  return std::is_heap(container_algorithm_internal::c_begin(sequence),
1515
1705
  container_algorithm_internal::c_end(sequence),
1516
1706
  std::forward<LessThan>(comp));
@@ -1521,8 +1711,9 @@ bool c_is_heap(const RandomAccessContainer& sequence, LessThan&& comp) {
1521
1711
  // Container-based version of the <algorithm> `std::is_heap_until()` function
1522
1712
  // to find the first element in a given container which is not in heap order.
1523
1713
  template <typename RandomAccessContainer>
1524
- container_algorithm_internal::ContainerIter<RandomAccessContainer>
1525
- c_is_heap_until(RandomAccessContainer& sequence) {
1714
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1715
+ container_algorithm_internal::ContainerIter<RandomAccessContainer>
1716
+ c_is_heap_until(RandomAccessContainer& sequence) {
1526
1717
  return std::is_heap_until(container_algorithm_internal::c_begin(sequence),
1527
1718
  container_algorithm_internal::c_end(sequence));
1528
1719
  }
@@ -1530,8 +1721,9 @@ c_is_heap_until(RandomAccessContainer& sequence) {
1530
1721
  // Overload of c_is_heap_until() for performing heap comparisons using a
1531
1722
  // `comp` other than `operator<`
1532
1723
  template <typename RandomAccessContainer, typename LessThan>
1533
- container_algorithm_internal::ContainerIter<RandomAccessContainer>
1534
- c_is_heap_until(RandomAccessContainer& sequence, LessThan&& comp) {
1724
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20
1725
+ container_algorithm_internal::ContainerIter<RandomAccessContainer>
1726
+ c_is_heap_until(RandomAccessContainer& sequence, LessThan&& comp) {
1535
1727
  return std::is_heap_until(container_algorithm_internal::c_begin(sequence),
1536
1728
  container_algorithm_internal::c_end(sequence),
1537
1729
  std::forward<LessThan>(comp));
@@ -1626,8 +1818,8 @@ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17
1626
1818
  // that capital letters ("A-Z") have ASCII values less than lowercase letters
1627
1819
  // ("a-z").
1628
1820
  template <typename Sequence1, typename Sequence2>
1629
- bool c_lexicographical_compare(const Sequence1& sequence1,
1630
- const Sequence2& sequence2) {
1821
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_lexicographical_compare(
1822
+ const Sequence1& sequence1, const Sequence2& sequence2) {
1631
1823
  return std::lexicographical_compare(
1632
1824
  container_algorithm_internal::c_begin(sequence1),
1633
1825
  container_algorithm_internal::c_end(sequence1),
@@ -1638,8 +1830,8 @@ bool c_lexicographical_compare(const Sequence1& sequence1,
1638
1830
  // Overload of c_lexicographical_compare() for performing a lexicographical
1639
1831
  // comparison using a `comp` operator instead of `operator<`.
1640
1832
  template <typename Sequence1, typename Sequence2, typename LessThan>
1641
- bool c_lexicographical_compare(const Sequence1& sequence1,
1642
- const Sequence2& sequence2, LessThan&& comp) {
1833
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_lexicographical_compare(
1834
+ const Sequence1& sequence1, const Sequence2& sequence2, LessThan&& comp) {
1643
1835
  return std::lexicographical_compare(
1644
1836
  container_algorithm_internal::c_begin(sequence1),
1645
1837
  container_algorithm_internal::c_end(sequence1),
@@ -1654,7 +1846,7 @@ bool c_lexicographical_compare(const Sequence1& sequence1,
1654
1846
  // to rearrange a container's elements into the next lexicographically greater
1655
1847
  // permutation.
1656
1848
  template <typename C>
1657
- bool c_next_permutation(C& c) {
1849
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_next_permutation(C& c) {
1658
1850
  return std::next_permutation(container_algorithm_internal::c_begin(c),
1659
1851
  container_algorithm_internal::c_end(c));
1660
1852
  }
@@ -1662,7 +1854,8 @@ bool c_next_permutation(C& c) {
1662
1854
  // Overload of c_next_permutation() for performing a lexicographical
1663
1855
  // comparison using a `comp` operator instead of `operator<`.
1664
1856
  template <typename C, typename LessThan>
1665
- bool c_next_permutation(C& c, LessThan&& comp) {
1857
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_next_permutation(C& c,
1858
+ LessThan&& comp) {
1666
1859
  return std::next_permutation(container_algorithm_internal::c_begin(c),
1667
1860
  container_algorithm_internal::c_end(c),
1668
1861
  std::forward<LessThan>(comp));
@@ -1674,7 +1867,7 @@ bool c_next_permutation(C& c, LessThan&& comp) {
1674
1867
  // to rearrange a container's elements into the next lexicographically lesser
1675
1868
  // permutation.
1676
1869
  template <typename C>
1677
- bool c_prev_permutation(C& c) {
1870
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_prev_permutation(C& c) {
1678
1871
  return std::prev_permutation(container_algorithm_internal::c_begin(c),
1679
1872
  container_algorithm_internal::c_end(c));
1680
1873
  }
@@ -1682,7 +1875,8 @@ bool c_prev_permutation(C& c) {
1682
1875
  // Overload of c_prev_permutation() for performing a lexicographical
1683
1876
  // comparison using a `comp` operator instead of `operator<`.
1684
1877
  template <typename C, typename LessThan>
1685
- bool c_prev_permutation(C& c, LessThan&& comp) {
1878
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_prev_permutation(C& c,
1879
+ LessThan&& comp) {
1686
1880
  return std::prev_permutation(container_algorithm_internal::c_begin(c),
1687
1881
  container_algorithm_internal::c_end(c),
1688
1882
  std::forward<LessThan>(comp));
@@ -1698,7 +1892,8 @@ bool c_prev_permutation(C& c, LessThan&& comp) {
1698
1892
  // to compute successive values of `value`, as if incremented with `++value`
1699
1893
  // after each element is written, and write them to the container.
1700
1894
  template <typename Sequence, typename T>
1701
- void c_iota(Sequence& sequence, const T& value) {
1895
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_iota(Sequence& sequence,
1896
+ const T& value) {
1702
1897
  std::iota(container_algorithm_internal::c_begin(sequence),
1703
1898
  container_algorithm_internal::c_end(sequence), value);
1704
1899
  }
@@ -1710,10 +1905,11 @@ void c_iota(Sequence& sequence, const T& value) {
1710
1905
  // accumulation by value.
1711
1906
  //
1712
1907
  // Note: Due to a language technicality this function has return type
1713
- // absl::decay_t<T>. As a user of this function you can casually read
1908
+ // std::decay_t<T>. As a user of this function you can casually read
1714
1909
  // this as "returns T by value" and assume it does the right thing.
1715
1910
  template <typename Sequence, typename T>
1716
- decay_t<T> c_accumulate(const Sequence& sequence, T&& init) {
1911
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_accumulate(
1912
+ const Sequence& sequence, T&& init) {
1717
1913
  return std::accumulate(container_algorithm_internal::c_begin(sequence),
1718
1914
  container_algorithm_internal::c_end(sequence),
1719
1915
  std::forward<T>(init));
@@ -1722,8 +1918,8 @@ decay_t<T> c_accumulate(const Sequence& sequence, T&& init) {
1722
1918
  // Overload of c_accumulate() for using a binary operations other than
1723
1919
  // addition for computing the accumulation.
1724
1920
  template <typename Sequence, typename T, typename BinaryOp>
1725
- decay_t<T> c_accumulate(const Sequence& sequence, T&& init,
1726
- BinaryOp&& binary_op) {
1921
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_accumulate(
1922
+ const Sequence& sequence, T&& init, BinaryOp&& binary_op) {
1727
1923
  return std::accumulate(container_algorithm_internal::c_begin(sequence),
1728
1924
  container_algorithm_internal::c_end(sequence),
1729
1925
  std::forward<T>(init),
@@ -1736,11 +1932,11 @@ decay_t<T> c_accumulate(const Sequence& sequence, T&& init,
1736
1932
  // to compute the cumulative inner product of container element pairs.
1737
1933
  //
1738
1934
  // Note: Due to a language technicality this function has return type
1739
- // absl::decay_t<T>. As a user of this function you can casually read
1935
+ // std::decay_t<T>. As a user of this function you can casually read
1740
1936
  // this as "returns T by value" and assume it does the right thing.
1741
1937
  template <typename Sequence1, typename Sequence2, typename T>
1742
- decay_t<T> c_inner_product(const Sequence1& factors1, const Sequence2& factors2,
1743
- T&& sum) {
1938
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_inner_product(
1939
+ const Sequence1& factors1, const Sequence2& factors2, T&& sum) {
1744
1940
  return std::inner_product(container_algorithm_internal::c_begin(factors1),
1745
1941
  container_algorithm_internal::c_end(factors1),
1746
1942
  container_algorithm_internal::c_begin(factors2),
@@ -1752,8 +1948,9 @@ decay_t<T> c_inner_product(const Sequence1& factors1, const Sequence2& factors2,
1752
1948
  // the product between the two container's element pair).
1753
1949
  template <typename Sequence1, typename Sequence2, typename T,
1754
1950
  typename BinaryOp1, typename BinaryOp2>
1755
- decay_t<T> c_inner_product(const Sequence1& factors1, const Sequence2& factors2,
1756
- T&& sum, BinaryOp1&& op1, BinaryOp2&& op2) {
1951
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_inner_product(
1952
+ const Sequence1& factors1, const Sequence2& factors2, T&& sum,
1953
+ BinaryOp1&& op1, BinaryOp2&& op2) {
1757
1954
  return std::inner_product(container_algorithm_internal::c_begin(factors1),
1758
1955
  container_algorithm_internal::c_end(factors1),
1759
1956
  container_algorithm_internal::c_begin(factors2),
@@ -1767,8 +1964,8 @@ decay_t<T> c_inner_product(const Sequence1& factors1, const Sequence2& factors2,
1767
1964
  // function to compute the difference between each element and the one preceding
1768
1965
  // it and write it to an iterator.
1769
1966
  template <typename InputSequence, typename OutputIt>
1770
- OutputIt c_adjacent_difference(const InputSequence& input,
1771
- OutputIt output_first) {
1967
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt
1968
+ c_adjacent_difference(const InputSequence& input, OutputIt output_first) {
1772
1969
  return std::adjacent_difference(container_algorithm_internal::c_begin(input),
1773
1970
  container_algorithm_internal::c_end(input),
1774
1971
  output_first);
@@ -1777,8 +1974,8 @@ OutputIt c_adjacent_difference(const InputSequence& input,
1777
1974
  // Overload of c_adjacent_difference() for using a binary operation other than
1778
1975
  // subtraction to compute the adjacent difference.
1779
1976
  template <typename InputSequence, typename OutputIt, typename BinaryOp>
1780
- OutputIt c_adjacent_difference(const InputSequence& input,
1781
- OutputIt output_first, BinaryOp&& op) {
1977
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt c_adjacent_difference(
1978
+ const InputSequence& input, OutputIt output_first, BinaryOp&& op) {
1782
1979
  return std::adjacent_difference(container_algorithm_internal::c_begin(input),
1783
1980
  container_algorithm_internal::c_end(input),
1784
1981
  output_first, std::forward<BinaryOp>(op));
@@ -1791,7 +1988,8 @@ OutputIt c_adjacent_difference(const InputSequence& input,
1791
1988
  // to an iterator. The partial sum is the sum of all element values so far in
1792
1989
  // the sequence.
1793
1990
  template <typename InputSequence, typename OutputIt>
1794
- OutputIt c_partial_sum(const InputSequence& input, OutputIt output_first) {
1991
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt
1992
+ c_partial_sum(const InputSequence& input, OutputIt output_first) {
1795
1993
  return std::partial_sum(container_algorithm_internal::c_begin(input),
1796
1994
  container_algorithm_internal::c_end(input),
1797
1995
  output_first);
@@ -1800,8 +1998,8 @@ OutputIt c_partial_sum(const InputSequence& input, OutputIt output_first) {
1800
1998
  // Overload of c_partial_sum() for using a binary operation other than addition
1801
1999
  // to compute the "partial sum".
1802
2000
  template <typename InputSequence, typename OutputIt, typename BinaryOp>
1803
- OutputIt c_partial_sum(const InputSequence& input, OutputIt output_first,
1804
- BinaryOp&& op) {
2001
+ ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt c_partial_sum(
2002
+ const InputSequence& input, OutputIt output_first, BinaryOp&& op) {
1805
2003
  return std::partial_sum(container_algorithm_internal::c_begin(input),
1806
2004
  container_algorithm_internal::c_end(input),
1807
2005
  output_first, std::forward<BinaryOp>(op));