re2 1.24.0 → 1.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -20
- package/README.md +63 -4
- package/binding.gyp +1 -2
- package/lib/addon.cc +9 -5
- package/lib/exec.cc +4 -4
- package/lib/match.cc +4 -4
- package/lib/new.cc +6 -6
- package/lib/pattern.cc +148 -1
- package/lib/replace.cc +5 -4
- package/lib/search.cc +1 -1
- package/lib/set.cc +85 -10
- package/lib/test.cc +1 -1
- package/lib/unicode_properties.h +15840 -0
- package/lib/wrapped_re2.h +40 -4
- package/lib/wrapped_re2_set.h +3 -1
- package/llms-full.txt +497 -0
- package/llms.txt +135 -0
- package/package.json +19 -11
- package/re2.d.ts +2 -0
- package/re2.js +1 -0
- package/vendor/abseil-cpp/CMake/AbseilDll.cmake +87 -74
- package/vendor/abseil-cpp/CMakeLists.txt +3 -3
- package/vendor/abseil-cpp/FAQ.md +130 -79
- package/vendor/abseil-cpp/MODULE.bazel +6 -7
- package/vendor/abseil-cpp/absl/BUILD.bazel +6 -0
- package/vendor/abseil-cpp/absl/algorithm/BUILD.bazel +4 -0
- package/vendor/abseil-cpp/absl/algorithm/CMakeLists.txt +4 -0
- package/vendor/abseil-cpp/absl/algorithm/algorithm.h +34 -2
- package/vendor/abseil-cpp/absl/algorithm/container.h +164 -17
- package/vendor/abseil-cpp/absl/algorithm/container_test.cc +390 -13
- package/vendor/abseil-cpp/absl/base/BUILD.bazel +53 -6
- package/vendor/abseil-cpp/absl/base/CMakeLists.txt +28 -4
- package/vendor/abseil-cpp/absl/base/attributes.h +61 -42
- package/vendor/abseil-cpp/absl/base/call_once.h +1 -0
- package/vendor/abseil-cpp/absl/base/casts.h +8 -1
- package/vendor/abseil-cpp/absl/base/casts_test.cc +3 -6
- package/vendor/abseil-cpp/absl/base/config.h +53 -9
- package/vendor/abseil-cpp/absl/base/exception_safety_testing_test.cc +9 -9
- package/vendor/abseil-cpp/absl/base/fast_type_id.h +30 -2
- package/vendor/abseil-cpp/absl/base/fast_type_id_test.cc +3 -0
- package/vendor/abseil-cpp/absl/base/internal/exception_safety_testing.h +15 -12
- package/vendor/abseil-cpp/absl/base/internal/hardening.h +136 -0
- package/vendor/abseil-cpp/absl/base/internal/hardening_test.cc +168 -0
- package/vendor/abseil-cpp/absl/base/internal/iterator_traits.h +2 -2
- package/vendor/abseil-cpp/absl/base/internal/low_level_alloc.cc +6 -0
- package/vendor/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
- package/vendor/abseil-cpp/absl/base/internal/sysinfo.cc +1 -2
- package/vendor/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
- package/vendor/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
- package/vendor/abseil-cpp/absl/base/macros.h +36 -20
- package/vendor/abseil-cpp/absl/base/nullability.h +4 -3
- package/vendor/abseil-cpp/absl/base/optimization.h +3 -2
- package/vendor/abseil-cpp/absl/base/optimization_test.cc +4 -3
- package/vendor/abseil-cpp/absl/base/options.h +55 -1
- package/vendor/abseil-cpp/absl/base/policy_checks.h +5 -5
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
- package/vendor/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
- package/vendor/abseil-cpp/absl/base/throw_delegate_test.cc +19 -28
- package/vendor/abseil-cpp/absl/cleanup/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/cleanup/CMakeLists.txt +2 -0
- package/vendor/abseil-cpp/absl/cleanup/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
- package/vendor/abseil-cpp/absl/container/BUILD.bazel +19 -7
- package/vendor/abseil-cpp/absl/container/CMakeLists.txt +6 -5
- package/vendor/abseil-cpp/absl/container/btree_benchmark.cc +3 -5
- package/vendor/abseil-cpp/absl/container/btree_set.h +5 -5
- package/vendor/abseil-cpp/absl/container/btree_test.cc +11 -14
- package/vendor/abseil-cpp/absl/container/chunked_queue.h +8 -6
- package/vendor/abseil-cpp/absl/container/chunked_queue_test.cc +5 -5
- package/vendor/abseil-cpp/absl/container/fixed_array.h +14 -13
- package/vendor/abseil-cpp/absl/container/fixed_array_test.cc +3 -3
- package/vendor/abseil-cpp/absl/container/flat_hash_map.h +18 -6
- package/vendor/abseil-cpp/absl/container/flat_hash_map_test.cc +34 -1
- package/vendor/abseil-cpp/absl/container/flat_hash_set.h +21 -7
- package/vendor/abseil-cpp/absl/container/flat_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/inlined_vector.h +29 -29
- package/vendor/abseil-cpp/absl/container/inlined_vector_test.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/btree.h +32 -24
- package/vendor/abseil-cpp/absl/container/internal/btree_container.h +16 -17
- package/vendor/abseil-cpp/absl/container/internal/common.h +6 -5
- package/vendor/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple.h +16 -16
- package/vendor/abseil-cpp/absl/container/internal/compressed_tuple_test.cc +13 -13
- package/vendor/abseil-cpp/absl/container/internal/container_memory.h +41 -31
- package/vendor/abseil-cpp/absl/container/internal/hash_function_defaults.h +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hash_generator_testing.h +4 -4
- package/vendor/abseil-cpp/absl/container/internal/hash_policy_traits.h +3 -3
- package/vendor/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +27 -19
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -2
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler.h +0 -17
- package/vendor/abseil-cpp/absl/container/internal/hashtablez_sampler_test.cc +12 -30
- package/vendor/abseil-cpp/absl/container/internal/inlined_vector.h +28 -28
- package/vendor/abseil-cpp/absl/container/internal/layout.h +13 -13
- package/vendor/abseil-cpp/absl/container/internal/layout_test.cc +3 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_map.h +60 -62
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.cc +59 -39
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set.h +619 -326
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_benchmark.cc +25 -2
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_probe_benchmark.cc +4 -4
- package/vendor/abseil-cpp/absl/container/internal/raw_hash_set_test.cc +575 -159
- package/vendor/abseil-cpp/absl/container/linked_hash_map.h +2 -2
- package/vendor/abseil-cpp/absl/container/node_hash_map.h +27 -15
- package/vendor/abseil-cpp/absl/container/node_hash_map_test.cc +34 -0
- package/vendor/abseil-cpp/absl/container/node_hash_set.h +25 -11
- package/vendor/abseil-cpp/absl/container/node_hash_set_test.cc +39 -7
- package/vendor/abseil-cpp/absl/container/sample_element_size_test.cc +7 -4
- package/vendor/abseil-cpp/absl/crc/BUILD.bazel +0 -1
- package/vendor/abseil-cpp/absl/crc/CMakeLists.txt +2 -3
- package/vendor/abseil-cpp/absl/crc/crc32c_benchmark.cc +2 -1
- package/vendor/abseil-cpp/absl/crc/internal/cpu_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc.cc +4 -6
- package/vendor/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
- package/vendor/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
- package/vendor/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +143 -81
- package/vendor/abseil-cpp/absl/debugging/BUILD.bazel +9 -31
- package/vendor/abseil-cpp/absl/debugging/CMakeLists.txt +3 -33
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
- package/vendor/abseil-cpp/absl/debugging/internal/demangle_test.cc +2 -1
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.cc +12 -2
- package/vendor/abseil-cpp/absl/debugging/internal/examine_stack.h +2 -3
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +11 -0
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -4
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
- package/vendor/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +4 -0
- package/vendor/abseil-cpp/absl/debugging/internal/symbolize.h +46 -36
- package/vendor/abseil-cpp/absl/debugging/stacktrace.cc +18 -58
- package/vendor/abseil-cpp/absl/debugging/stacktrace.h +5 -48
- package/vendor/abseil-cpp/absl/debugging/stacktrace_test.cc +10 -124
- package/vendor/abseil-cpp/absl/debugging/symbolize.cc +20 -2
- package/vendor/abseil-cpp/absl/debugging/symbolize_elf.inc +58 -106
- package/vendor/abseil-cpp/absl/debugging/symbolize_test.cc +37 -36
- package/vendor/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
- package/vendor/abseil-cpp/absl/flags/BUILD.bazel +6 -3
- package/vendor/abseil-cpp/absl/flags/CMakeLists.txt +1 -1
- package/vendor/abseil-cpp/absl/flags/commandlineflag.h +8 -6
- package/vendor/abseil-cpp/absl/flags/commandlineflag_test.cc +1 -1
- package/vendor/abseil-cpp/absl/flags/flag_benchmark.cc +5 -5
- package/vendor/abseil-cpp/absl/flags/flag_test.cc +30 -30
- package/vendor/abseil-cpp/absl/flags/internal/flag.cc +4 -4
- package/vendor/abseil-cpp/absl/flags/internal/flag.h +6 -6
- package/vendor/abseil-cpp/absl/flags/marshalling.h +2 -28
- package/vendor/abseil-cpp/absl/flags/marshalling_test.cc +12 -11
- package/vendor/abseil-cpp/absl/flags/reflection_test.cc +1 -1
- package/vendor/abseil-cpp/absl/functional/BUILD.bazel +26 -1
- package/vendor/abseil-cpp/absl/functional/CMakeLists.txt +29 -1
- package/vendor/abseil-cpp/absl/functional/any_invocable.h +13 -14
- package/vendor/abseil-cpp/absl/functional/any_invocable_test.cc +46 -47
- package/vendor/abseil-cpp/absl/functional/bind_back.h +79 -0
- package/vendor/abseil-cpp/absl/functional/bind_back_test.cc +237 -0
- package/vendor/abseil-cpp/absl/functional/bind_front.h +7 -1
- package/vendor/abseil-cpp/absl/functional/bind_front_test.cc +4 -4
- package/vendor/abseil-cpp/absl/functional/function_ref_test.cc +2 -2
- package/vendor/abseil-cpp/absl/functional/internal/any_invocable.h +28 -28
- package/vendor/abseil-cpp/absl/functional/internal/back_binder.h +95 -0
- package/vendor/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
- package/vendor/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- package/vendor/abseil-cpp/absl/functional/overload_test.cc +13 -13
- package/vendor/abseil-cpp/absl/hash/BUILD.bazel +1 -2
- package/vendor/abseil-cpp/absl/hash/CMakeLists.txt +1 -2
- package/vendor/abseil-cpp/absl/hash/hash.h +1 -1
- package/vendor/abseil-cpp/absl/hash/hash_test.cc +14 -20
- package/vendor/abseil-cpp/absl/hash/hash_testing.h +11 -9
- package/vendor/abseil-cpp/absl/hash/internal/city.cc +39 -51
- package/vendor/abseil-cpp/absl/hash/internal/hash.cc +165 -47
- package/vendor/abseil-cpp/absl/hash/internal/hash.h +86 -27
- package/vendor/abseil-cpp/absl/hash/internal/low_level_hash_test.cc +36 -1
- package/vendor/abseil-cpp/absl/hash/internal/spy_hash_state.h +8 -5
- package/vendor/abseil-cpp/absl/log/BUILD.bazel +5 -2
- package/vendor/abseil-cpp/absl/log/CMakeLists.txt +5 -3
- package/vendor/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/internal/BUILD.bazel +15 -1
- package/vendor/abseil-cpp/absl/log/internal/log_message.cc +5 -4
- package/vendor/abseil-cpp/absl/log/internal/log_message.h +14 -0
- package/vendor/abseil-cpp/absl/log/internal/nullstream.h +1 -1
- package/vendor/abseil-cpp/absl/log/internal/proto.cc +13 -0
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
- package/vendor/abseil-cpp/absl/log/internal/structured_proto_test.cc +3 -3
- package/vendor/abseil-cpp/absl/log/internal/vlog_config.cc +2 -2
- package/vendor/abseil-cpp/absl/log/internal/vlog_config_benchmark.cc +3 -3
- package/vendor/abseil-cpp/absl/log/log_format_test.cc +19 -2
- package/vendor/abseil-cpp/absl/log/log_modifier_methods_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/log_streamer.h +29 -2
- package/vendor/abseil-cpp/absl/log/log_streamer_test.cc +18 -0
- package/vendor/abseil-cpp/absl/log/scoped_mock_log_test.cc +1 -1
- package/vendor/abseil-cpp/absl/log/vlog_is_on.h +0 -2
- package/vendor/abseil-cpp/absl/log/vlog_is_on_test.cc +6 -5
- package/vendor/abseil-cpp/absl/memory/memory.h +55 -5
- package/vendor/abseil-cpp/absl/memory/memory_test.cc +55 -1
- package/vendor/abseil-cpp/absl/meta/BUILD.bazel +2 -0
- package/vendor/abseil-cpp/absl/meta/internal/requires.h +1 -1
- package/vendor/abseil-cpp/absl/meta/type_traits.h +119 -55
- package/vendor/abseil-cpp/absl/meta/type_traits_test.cc +7 -7
- package/vendor/abseil-cpp/absl/numeric/int128_test.cc +6 -6
- package/vendor/abseil-cpp/absl/profiling/BUILD.bazel +3 -1
- package/vendor/abseil-cpp/absl/profiling/hashtable.cc +0 -4
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.cc +32 -33
- package/vendor/abseil-cpp/absl/profiling/internal/profile_builder.h +25 -2
- package/vendor/abseil-cpp/absl/profiling/internal/sample_recorder_test.cc +8 -5
- package/vendor/abseil-cpp/absl/random/BUILD.bazel +13 -1
- package/vendor/abseil-cpp/absl/random/CMakeLists.txt +23 -2
- package/vendor/abseil-cpp/absl/random/benchmarks.cc +1 -1
- package/vendor/abseil-cpp/absl/random/beta_distribution.h +2 -2
- package/vendor/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
- package/vendor/abseil-cpp/absl/random/bit_gen_ref_test.cc +43 -0
- package/vendor/abseil-cpp/absl/random/discrete_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/distributions.h +17 -17
- package/vendor/abseil-cpp/absl/random/distributions_test.cc +4 -4
- package/vendor/abseil-cpp/absl/random/exponential_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/BUILD.bazel +4 -2
- package/vendor/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
- package/vendor/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/generate_real.h +1 -1
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/iostream_state_saver_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/mock_helpers.h +14 -40
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/nonsecure_base_test.cc +2 -2
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
- package/vendor/abseil-cpp/absl/random/internal/pcg_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
- package/vendor/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_engine_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/randen_test.cc +3 -2
- package/vendor/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
- package/vendor/abseil-cpp/absl/random/internal/seed_material.cc +4 -4
- package/vendor/abseil-cpp/absl/random/internal/seed_material.h +2 -1
- package/vendor/abseil-cpp/absl/random/internal/traits.h +21 -0
- package/vendor/abseil-cpp/absl/random/internal/traits_test.cc +5 -0
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
- package/vendor/abseil-cpp/absl/random/internal/uniform_helper_test.cc +2 -1
- package/vendor/abseil-cpp/absl/random/mocking_access.h +74 -0
- package/vendor/abseil-cpp/absl/random/mocking_bit_gen.h +9 -19
- package/vendor/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
- package/vendor/abseil-cpp/absl/status/BUILD.bazel +81 -0
- package/vendor/abseil-cpp/absl/status/CMakeLists.txt +91 -0
- package/vendor/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
- package/vendor/abseil-cpp/absl/status/internal/status_internal.h +26 -2
- package/vendor/abseil-cpp/absl/status/internal/status_matchers.h +22 -8
- package/vendor/abseil-cpp/absl/status/internal/statusor_internal.h +43 -43
- package/vendor/abseil-cpp/absl/status/status.cc +62 -70
- package/vendor/abseil-cpp/absl/status/status.h +249 -23
- package/vendor/abseil-cpp/absl/status/status_benchmark.cc +12 -0
- package/vendor/abseil-cpp/absl/status/status_builder.cc +196 -0
- package/vendor/abseil-cpp/absl/status/status_builder.h +978 -0
- package/vendor/abseil-cpp/absl/status/status_builder_test.cc +380 -0
- package/vendor/abseil-cpp/absl/status/status_macros.h +484 -0
- package/vendor/abseil-cpp/absl/status/status_macros_test.cc +634 -0
- package/vendor/abseil-cpp/absl/status/status_matchers.h +2 -1
- package/vendor/abseil-cpp/absl/status/status_matchers_test.cc +3 -4
- package/vendor/abseil-cpp/absl/status/status_payload_printer.h +3 -2
- package/vendor/abseil-cpp/absl/status/status_test.cc +443 -13
- package/vendor/abseil-cpp/absl/status/statusor.h +69 -36
- package/vendor/abseil-cpp/absl/status/statusor_test.cc +132 -35
- package/vendor/abseil-cpp/absl/strings/BUILD.bazel +42 -7
- package/vendor/abseil-cpp/absl/strings/CMakeLists.txt +33 -4
- package/vendor/abseil-cpp/absl/strings/ascii.h +1 -2
- package/vendor/abseil-cpp/absl/strings/atod_manual_test.cc +5 -5
- package/vendor/abseil-cpp/absl/strings/cord.cc +26 -7
- package/vendor/abseil-cpp/absl/strings/cord.h +23 -13
- package/vendor/abseil-cpp/absl/strings/cord_buffer.h +4 -2
- package/vendor/abseil-cpp/absl/strings/cord_test.cc +85 -9
- package/vendor/abseil-cpp/absl/strings/escaping.cc +183 -35
- package/vendor/abseil-cpp/absl/strings/escaping.h +12 -2
- package/vendor/abseil-cpp/absl/strings/escaping_benchmark.cc +1 -3
- package/vendor/abseil-cpp/absl/strings/escaping_test.cc +22 -18
- package/vendor/abseil-cpp/absl/strings/has_absl_stringify_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/has_ostream_operator_test.cc +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/append_and_overwrite.h +10 -10
- package/vendor/abseil-cpp/absl/strings/internal/cordz_sample_token_test.cc +1 -1
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
- package/vendor/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
- package/vendor/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
- package/vendor/abseil-cpp/absl/strings/internal/escaping.h +2 -26
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_internal.h +23 -2
- package/vendor/abseil-cpp/absl/strings/internal/generic_printer_test.cc +6 -2
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -24
- package/vendor/abseil-cpp/absl/strings/internal/resize_uninitialized_test.cc +16 -41
- package/vendor/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
- package/vendor/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
- package/vendor/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
- package/vendor/abseil-cpp/absl/strings/internal/str_format/convert_test.cc +12 -20
- package/vendor/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +510 -307
- package/vendor/abseil-cpp/absl/strings/internal/str_join_internal.h +0 -1
- package/vendor/abseil-cpp/absl/strings/internal/str_split_internal.h +9 -10
- package/vendor/abseil-cpp/absl/strings/internal/string_constant_test.cc +6 -5
- package/vendor/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream.h +119 -0
- package/vendor/abseil-cpp/absl/strings/internal/stringify_stream_test.cc +111 -0
- package/vendor/abseil-cpp/absl/strings/numbers.cc +406 -0
- package/vendor/abseil-cpp/absl/strings/numbers.h +4 -0
- package/vendor/abseil-cpp/absl/strings/numbers_test.cc +33 -0
- package/vendor/abseil-cpp/absl/strings/resize_and_overwrite.h +10 -6
- package/vendor/abseil-cpp/absl/strings/str_cat.h +36 -1
- package/vendor/abseil-cpp/absl/strings/str_cat_benchmark.cc +1 -2
- package/vendor/abseil-cpp/absl/strings/str_cat_test.cc +28 -0
- package/vendor/abseil-cpp/absl/strings/str_join_test.cc +4 -4
- package/vendor/abseil-cpp/absl/strings/str_split.h +11 -6
- package/vendor/abseil-cpp/absl/strings/str_split_test.cc +13 -0
- package/vendor/abseil-cpp/absl/strings/substitute.h +2 -2
- package/vendor/abseil-cpp/absl/synchronization/BUILD.bazel +3 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +21 -0
- package/vendor/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.cc +13 -0
- package/vendor/abseil-cpp/absl/synchronization/mutex.h +32 -2
- package/vendor/abseil-cpp/absl/synchronization/mutex_test.cc +17 -3
- package/vendor/abseil-cpp/absl/time/BUILD.bazel +80 -0
- package/vendor/abseil-cpp/absl/time/CMakeLists.txt +73 -0
- package/vendor/abseil-cpp/absl/time/clock.h +3 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.cc +71 -0
- package/vendor/abseil-cpp/absl/time/clock_interface.h +93 -0
- package/vendor/abseil-cpp/absl/time/clock_interface_test.cc +128 -0
- package/vendor/abseil-cpp/absl/time/format.cc +3 -10
- package/vendor/abseil-cpp/absl/time/format_test.cc +12 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +90 -89
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_format_test.cc +80 -5
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +1 -2
- package/vendor/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/version +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/America/Vancouver +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Ho_Chi_Minh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Phnom_Penh +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Saigon +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Tbilisi +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Asia/Vientiane +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Canada/Pacific +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Chisinau +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/Europe/Tiraspol +0 -0
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zone1970.tab +1 -1
- package/vendor/abseil-cpp/absl/time/internal/cctz/testdata/zoneinfo/zonenow.tab +3 -3
- package/vendor/abseil-cpp/absl/time/simulated_clock.cc +225 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock.h +109 -0
- package/vendor/abseil-cpp/absl/time/simulated_clock_test.cc +614 -0
- package/vendor/abseil-cpp/absl/types/BUILD.bazel +116 -0
- package/vendor/abseil-cpp/absl/types/CMakeLists.txt +100 -0
- package/vendor/abseil-cpp/absl/types/any.h +26 -4
- package/vendor/abseil-cpp/absl/types/any_span.h +1067 -0
- package/vendor/abseil-cpp/absl/types/any_span_benchmark.cc +258 -0
- package/vendor/abseil-cpp/absl/types/any_span_test.cc +1210 -0
- package/vendor/abseil-cpp/absl/types/compare.h +4 -4
- package/vendor/abseil-cpp/absl/types/internal/any_span.h +477 -0
- package/vendor/abseil-cpp/absl/types/internal/span.h +5 -6
- package/vendor/abseil-cpp/absl/types/optional.h +30 -3
- package/vendor/abseil-cpp/absl/types/optional_ref.h +295 -0
- package/vendor/abseil-cpp/absl/types/optional_ref_test.cc +370 -0
- package/vendor/abseil-cpp/absl/types/source_location.cc +18 -0
- package/vendor/abseil-cpp/absl/types/source_location.h +172 -0
- package/vendor/abseil-cpp/absl/types/source_location_test.cc +139 -0
- package/vendor/abseil-cpp/absl/types/span.h +19 -23
- package/vendor/abseil-cpp/absl/types/variant.h +75 -18
- package/vendor/abseil-cpp/absl/types/variant_test.cc +23 -23
- package/vendor/abseil-cpp/absl/utility/BUILD.bazel +1 -0
- package/vendor/abseil-cpp/absl/utility/CMakeLists.txt +1 -0
- package/vendor/abseil-cpp/absl/utility/utility.h +99 -16
- package/vendor/abseil-cpp/ci/absl_alternate_options.h +2 -0
- package/vendor/abseil-cpp/ci/linux_arm_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_asan_bazel.sh +13 -6
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_bazel.sh +10 -4
- package/vendor/abseil-cpp/ci/linux_clang-latest_libcxx_tsan_bazel.sh +12 -5
- package/vendor/abseil-cpp/ci/linux_clang-latest_libstdcxx_bazel.sh +9 -2
- package/vendor/abseil-cpp/ci/linux_docker_containers.sh +4 -4
- package/vendor/abseil-cpp/ci/linux_gcc-floor_libstdcxx_bazel.sh +10 -3
- package/vendor/abseil-cpp/ci/linux_gcc-latest_libstdcxx_bazel.sh +8 -2
- package/vendor/abseil-cpp/ci/macos_xcode_bazel.sh +4 -3
- package/vendor/abseil-cpp/ci/macos_xcode_cmake.sh +2 -2
- package/vendor/abseil-cpp/ci/windows_clangcl_bazel.bat +1 -1
- package/vendor/abseil-cpp/ci/windows_msvc_bazel.bat +1 -1
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.cc +0 -118
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer.h +0 -71
- package/vendor/abseil-cpp/absl/debugging/internal/borrowed_fixup_buffer_test.cc +0 -97
|
@@ -41,7 +41,7 @@ struct _ {};
|
|
|
41
41
|
template <class T>
|
|
42
42
|
struct Wrapper {
|
|
43
43
|
template <class U,
|
|
44
|
-
class =
|
|
44
|
+
class = std::enable_if_t<std::is_convertible<U, T>::value>>
|
|
45
45
|
Wrapper(U&&); // NOLINT
|
|
46
46
|
};
|
|
47
47
|
|
|
@@ -58,7 +58,7 @@ template <class Qualifiers, class This>
|
|
|
58
58
|
struct QualifiersForThisImpl {
|
|
59
59
|
static_assert(std::is_object<This>::value, "");
|
|
60
60
|
using type =
|
|
61
|
-
|
|
61
|
+
std::conditional_t<std::is_const<Qualifiers>::value, const This, This>&;
|
|
62
62
|
};
|
|
63
63
|
|
|
64
64
|
template <class Qualifiers, class This>
|
|
@@ -69,7 +69,7 @@ template <class Qualifiers, class This>
|
|
|
69
69
|
struct QualifiersForThisImpl<Qualifiers&&, This> {
|
|
70
70
|
static_assert(std::is_object<This>::value, "");
|
|
71
71
|
using type =
|
|
72
|
-
|
|
72
|
+
std::conditional_t<std::is_const<Qualifiers>::value, const This, This>&&;
|
|
73
73
|
};
|
|
74
74
|
|
|
75
75
|
template <class Qualifiers, class This>
|
|
@@ -84,39 +84,38 @@ struct GiveQualifiersToFunImpl;
|
|
|
84
84
|
template <class T, class R, class... P>
|
|
85
85
|
struct GiveQualifiersToFunImpl<T, R(P...)> {
|
|
86
86
|
using type =
|
|
87
|
-
|
|
87
|
+
std::conditional_t<std::is_const<T>::value, R(P...) const, R(P...)>;
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
template <class T, class R, class... P>
|
|
91
91
|
struct GiveQualifiersToFunImpl<T&, R(P...)> {
|
|
92
92
|
using type =
|
|
93
|
-
|
|
93
|
+
std::conditional_t<std::is_const<T>::value, R(P...) const&, R(P...) &>;
|
|
94
94
|
};
|
|
95
95
|
|
|
96
96
|
template <class T, class R, class... P>
|
|
97
97
|
struct GiveQualifiersToFunImpl<T&&, R(P...)> {
|
|
98
98
|
using type =
|
|
99
|
-
|
|
99
|
+
std::conditional_t<std::is_const<T>::value, R(P...) const&&, R(P...) &&>;
|
|
100
100
|
};
|
|
101
101
|
|
|
102
102
|
template <class T, class R, class... P>
|
|
103
103
|
struct GiveQualifiersToFunImpl<T, R(P...) noexcept> {
|
|
104
|
-
using type =
|
|
105
|
-
|
|
104
|
+
using type = std::conditional_t<std::is_const<T>::value,
|
|
105
|
+
R(P...) const noexcept, R(P...) noexcept>;
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
template <class T, class R, class... P>
|
|
109
109
|
struct GiveQualifiersToFunImpl<T&, R(P...) noexcept> {
|
|
110
|
-
using type =
|
|
111
|
-
|
|
112
|
-
R(P...) & noexcept>;
|
|
110
|
+
using type = std::conditional_t<std::is_const<T>::value,
|
|
111
|
+
R(P...) const & noexcept, R(P...) & noexcept>;
|
|
113
112
|
};
|
|
114
113
|
|
|
115
114
|
template <class T, class R, class... P>
|
|
116
115
|
struct GiveQualifiersToFunImpl<T&&, R(P...) noexcept> {
|
|
117
116
|
using type =
|
|
118
|
-
|
|
119
|
-
|
|
117
|
+
std::conditional_t<std::is_const<T>::value, R(P...) const && noexcept,
|
|
118
|
+
R(P...) && noexcept>;
|
|
120
119
|
};
|
|
121
120
|
|
|
122
121
|
template <class T, class Fun>
|
|
@@ -367,16 +366,16 @@ struct TestParams {
|
|
|
367
366
|
}
|
|
368
367
|
|
|
369
368
|
using CompatibleAnyInvocableFunType =
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
369
|
+
std::conditional_t<std::is_rvalue_reference<Qual>::value,
|
|
370
|
+
GiveQualifiersToFun<const _&&, UnqualifiedFunType>,
|
|
371
|
+
GiveQualifiersToFun<const _&, UnqualifiedFunType>>;
|
|
373
372
|
|
|
374
373
|
using CompatibleAnyInvType = AnyInvocable<CompatibleAnyInvocableFunType>;
|
|
375
374
|
|
|
376
375
|
using IncompatibleInvocable =
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
376
|
+
std::conditional_t<std::is_rvalue_reference<Qual>::value,
|
|
377
|
+
GiveQualifiersToFun<_&, UnqualifiedFunType>(_::*),
|
|
378
|
+
GiveQualifiersToFun<_&&, UnqualifiedFunType>(_::*)>;
|
|
380
379
|
};
|
|
381
380
|
|
|
382
381
|
// Given a member-pointer type, this metafunction yields the target type of the
|
|
@@ -401,7 +400,7 @@ struct IsMemberSwappableImpl : std::false_type {
|
|
|
401
400
|
|
|
402
401
|
template <class T>
|
|
403
402
|
struct IsMemberSwappableImpl<
|
|
404
|
-
T,
|
|
403
|
+
T, std::void_t<decltype(std::declval<T&>().swap(std::declval<T&>()))>>
|
|
405
404
|
: std::true_type {
|
|
406
405
|
static constexpr bool kIsNothrow =
|
|
407
406
|
noexcept(std::declval<T&>().swap(std::declval<T&>()));
|
|
@@ -568,7 +567,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceConstruction) {
|
|
|
568
567
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
569
568
|
using AddType = typename TypeParam::AddType;
|
|
570
569
|
|
|
571
|
-
AnyInvType fun(
|
|
570
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
572
571
|
|
|
573
572
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
574
573
|
EXPECT_EQ(29, TypeParam::ToThisParam(fun)(7, 8, 9).value);
|
|
@@ -578,7 +577,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceConstructionInitializerList) {
|
|
|
578
577
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
579
578
|
using AddType = typename TypeParam::AddType;
|
|
580
579
|
|
|
581
|
-
AnyInvType fun(
|
|
580
|
+
AnyInvType fun(std::in_place_type<AddType>, {1, 2, 3, 4}, 5);
|
|
582
581
|
|
|
583
582
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
584
583
|
EXPECT_EQ(39, TypeParam::ToThisParam(fun)(7, 8, 9).value);
|
|
@@ -588,7 +587,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullFunPtrConstruction) {
|
|
|
588
587
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
589
588
|
using UnqualifiedFunType = typename TypeParam::UnqualifiedFunType;
|
|
590
589
|
|
|
591
|
-
AnyInvType fun(
|
|
590
|
+
AnyInvType fun(std::in_place_type<UnqualifiedFunType*>, nullptr);
|
|
592
591
|
|
|
593
592
|
// In-place construction does not lead to empty.
|
|
594
593
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -598,7 +597,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullFunPtrConstructionValueInit) {
|
|
|
598
597
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
599
598
|
using UnqualifiedFunType = typename TypeParam::UnqualifiedFunType;
|
|
600
599
|
|
|
601
|
-
AnyInvType fun(
|
|
600
|
+
AnyInvType fun(std::in_place_type<UnqualifiedFunType*>);
|
|
602
601
|
|
|
603
602
|
// In-place construction does not lead to empty.
|
|
604
603
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -608,7 +607,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullMemFunPtrConstruction) {
|
|
|
608
607
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
609
608
|
using MemFunPtrType = typename TypeParam::MemFunPtrType;
|
|
610
609
|
|
|
611
|
-
AnyInvType fun(
|
|
610
|
+
AnyInvType fun(std::in_place_type<MemFunPtrType>, nullptr);
|
|
612
611
|
|
|
613
612
|
// In-place construction does not lead to empty.
|
|
614
613
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -618,7 +617,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullMemFunPtrConstructionValueInit) {
|
|
|
618
617
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
619
618
|
using MemFunPtrType = typename TypeParam::MemFunPtrType;
|
|
620
619
|
|
|
621
|
-
AnyInvType fun(
|
|
620
|
+
AnyInvType fun(std::in_place_type<MemFunPtrType>);
|
|
622
621
|
|
|
623
622
|
// In-place construction does not lead to empty.
|
|
624
623
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -628,7 +627,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullMemObjPtrConstruction) {
|
|
|
628
627
|
using UnaryAnyInvType = typename TypeParam::UnaryAnyInvType;
|
|
629
628
|
using MemObjPtrType = typename TypeParam::MemObjPtrType;
|
|
630
629
|
|
|
631
|
-
UnaryAnyInvType fun(
|
|
630
|
+
UnaryAnyInvType fun(std::in_place_type<MemObjPtrType>, nullptr);
|
|
632
631
|
|
|
633
632
|
// In-place construction does not lead to empty.
|
|
634
633
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -638,7 +637,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceNullMemObjPtrConstructionValueInit) {
|
|
|
638
637
|
using UnaryAnyInvType = typename TypeParam::UnaryAnyInvType;
|
|
639
638
|
using MemObjPtrType = typename TypeParam::MemObjPtrType;
|
|
640
639
|
|
|
641
|
-
UnaryAnyInvType fun(
|
|
640
|
+
UnaryAnyInvType fun(std::in_place_type<MemObjPtrType>);
|
|
642
641
|
|
|
643
642
|
// In-place construction does not lead to empty.
|
|
644
643
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -648,7 +647,7 @@ TYPED_TEST_P(AnyInvTestBasic, InPlaceVoidCovarianceConstruction) {
|
|
|
648
647
|
using VoidAnyInvType = typename TypeParam::VoidAnyInvType;
|
|
649
648
|
using AddType = typename TypeParam::AddType;
|
|
650
649
|
|
|
651
|
-
VoidAnyInvType fun(
|
|
650
|
+
VoidAnyInvType fun(std::in_place_type<AddType>, 5);
|
|
652
651
|
|
|
653
652
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
654
653
|
}
|
|
@@ -668,7 +667,7 @@ TYPED_TEST_P(AnyInvTestBasic, MoveConstructionFromNonEmpty) {
|
|
|
668
667
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
669
668
|
using AddType = typename TypeParam::AddType;
|
|
670
669
|
|
|
671
|
-
AnyInvType source_fun(
|
|
670
|
+
AnyInvType source_fun(std::in_place_type<AddType>, 5);
|
|
672
671
|
AnyInvType fun(std::move(source_fun));
|
|
673
672
|
|
|
674
673
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
@@ -693,7 +692,7 @@ TYPED_TEST_P(AnyInvTestBasic, ComparisonWithNullptrNonempty) {
|
|
|
693
692
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
694
693
|
using AddType = typename TypeParam::AddType;
|
|
695
694
|
|
|
696
|
-
AnyInvType fun(
|
|
695
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
697
696
|
|
|
698
697
|
EXPECT_FALSE(fun == nullptr);
|
|
699
698
|
EXPECT_FALSE(nullptr == fun);
|
|
@@ -730,7 +729,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, MoveAssignEmptyLhsNonemptyRhs) {
|
|
|
730
729
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
731
730
|
using AddType = typename TypeParam::AddType;
|
|
732
731
|
|
|
733
|
-
AnyInvType source_fun(
|
|
732
|
+
AnyInvType source_fun(std::in_place_type<AddType>, 5);
|
|
734
733
|
AnyInvType fun;
|
|
735
734
|
|
|
736
735
|
fun = std::move(source_fun);
|
|
@@ -744,7 +743,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, MoveAssignNonemptyEmptyLhsRhs) {
|
|
|
744
743
|
using AddType = typename TypeParam::AddType;
|
|
745
744
|
|
|
746
745
|
AnyInvType source_fun;
|
|
747
|
-
AnyInvType fun(
|
|
746
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
748
747
|
|
|
749
748
|
fun = std::move(source_fun);
|
|
750
749
|
|
|
@@ -755,8 +754,8 @@ TYPED_TEST_P(AnyInvTestCombinatoric, MoveAssignNonemptyLhsNonemptyRhs) {
|
|
|
755
754
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
756
755
|
using AddType = typename TypeParam::AddType;
|
|
757
756
|
|
|
758
|
-
AnyInvType source_fun(
|
|
759
|
-
AnyInvType fun(
|
|
757
|
+
AnyInvType source_fun(std::in_place_type<AddType>, 5);
|
|
758
|
+
AnyInvType fun(std::in_place_type<AddType>, 20);
|
|
760
759
|
|
|
761
760
|
fun = std::move(source_fun);
|
|
762
761
|
|
|
@@ -777,7 +776,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SelfMoveAssignNonempty) {
|
|
|
777
776
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
778
777
|
using AddType = typename TypeParam::AddType;
|
|
779
778
|
|
|
780
|
-
AnyInvType source_fun(
|
|
779
|
+
AnyInvType source_fun(std::in_place_type<AddType>, 5);
|
|
781
780
|
source_fun = std::move(source_fun);
|
|
782
781
|
|
|
783
782
|
// This space intentionally left blank.
|
|
@@ -1028,7 +1027,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapEmptyLhsNonemptyRhs) {
|
|
|
1028
1027
|
// Swap idiom
|
|
1029
1028
|
{
|
|
1030
1029
|
AnyInvType fun;
|
|
1031
|
-
AnyInvType other(
|
|
1030
|
+
AnyInvType other(std::in_place_type<AddType>, 5);
|
|
1032
1031
|
|
|
1033
1032
|
using std::swap;
|
|
1034
1033
|
swap(fun, other);
|
|
@@ -1045,7 +1044,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapEmptyLhsNonemptyRhs) {
|
|
|
1045
1044
|
// Member swap
|
|
1046
1045
|
{
|
|
1047
1046
|
AnyInvType fun;
|
|
1048
|
-
AnyInvType other(
|
|
1047
|
+
AnyInvType other(std::in_place_type<AddType>, 5);
|
|
1049
1048
|
|
|
1050
1049
|
fun.swap(other);
|
|
1051
1050
|
|
|
@@ -1064,7 +1063,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapNonemptyLhsEmptyRhs) {
|
|
|
1064
1063
|
|
|
1065
1064
|
// Swap idiom
|
|
1066
1065
|
{
|
|
1067
|
-
AnyInvType fun(
|
|
1066
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
1068
1067
|
AnyInvType other;
|
|
1069
1068
|
|
|
1070
1069
|
using std::swap;
|
|
@@ -1081,7 +1080,7 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapNonemptyLhsEmptyRhs) {
|
|
|
1081
1080
|
|
|
1082
1081
|
// Member swap
|
|
1083
1082
|
{
|
|
1084
|
-
AnyInvType fun(
|
|
1083
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
1085
1084
|
AnyInvType other;
|
|
1086
1085
|
|
|
1087
1086
|
fun.swap(other);
|
|
@@ -1101,8 +1100,8 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapNonemptyLhsNonemptyRhs) {
|
|
|
1101
1100
|
|
|
1102
1101
|
// Swap idiom
|
|
1103
1102
|
{
|
|
1104
|
-
AnyInvType fun(
|
|
1105
|
-
AnyInvType other(
|
|
1103
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
1104
|
+
AnyInvType other(std::in_place_type<AddType>, 6);
|
|
1106
1105
|
|
|
1107
1106
|
using std::swap;
|
|
1108
1107
|
swap(fun, other);
|
|
@@ -1119,8 +1118,8 @@ TYPED_TEST_P(AnyInvTestCombinatoric, SwapNonemptyLhsNonemptyRhs) {
|
|
|
1119
1118
|
|
|
1120
1119
|
// Member swap
|
|
1121
1120
|
{
|
|
1122
|
-
AnyInvType fun(
|
|
1123
|
-
AnyInvType other(
|
|
1121
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
1122
|
+
AnyInvType other(std::in_place_type<AddType>, 6);
|
|
1124
1123
|
|
|
1125
1124
|
fun.swap(other);
|
|
1126
1125
|
|
|
@@ -1284,7 +1283,7 @@ TYPED_TEST_P(AnyInvTestNonRvalue, NonMoveableResultType) {
|
|
|
1284
1283
|
// Just like plain functors, it should work fine to use an AnyInvocable that
|
|
1285
1284
|
// returns the non-moveable type.
|
|
1286
1285
|
using UnqualifiedFun =
|
|
1287
|
-
|
|
1286
|
+
std::conditional_t<TypeParam::kIsNoexcept, Result() noexcept, Result()>;
|
|
1288
1287
|
|
|
1289
1288
|
using Fun =
|
|
1290
1289
|
GiveQualifiersToFun<typename TypeParam::Qualifiers, UnqualifiedFun>;
|
|
@@ -1364,7 +1363,7 @@ TYPED_TEST_P(AnyInvTestRvalue, NonMoveableResultType) {
|
|
|
1364
1363
|
// Just like plain functors, it should work fine to use an AnyInvocable that
|
|
1365
1364
|
// returns the non-moveable type.
|
|
1366
1365
|
using UnqualifiedFun =
|
|
1367
|
-
|
|
1366
|
+
std::conditional_t<TypeParam::kIsNoexcept, Result() noexcept, Result()>;
|
|
1368
1367
|
|
|
1369
1368
|
using Fun =
|
|
1370
1369
|
GiveQualifiersToFun<typename TypeParam::Qualifiers, UnqualifiedFun>;
|
|
@@ -1384,7 +1383,7 @@ TYPED_TEST_P(AnyInvTestRvalue, NonConstCrashesOnSecondCall) {
|
|
|
1384
1383
|
using AnyInvType = typename TypeParam::AnyInvType;
|
|
1385
1384
|
using AddType = typename TypeParam::AddType;
|
|
1386
1385
|
|
|
1387
|
-
AnyInvType fun(
|
|
1386
|
+
AnyInvType fun(std::in_place_type<AddType>, 5);
|
|
1388
1387
|
|
|
1389
1388
|
EXPECT_TRUE(static_cast<bool>(fun));
|
|
1390
1389
|
std::move(fun)(7, 8, 9);
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// Copyright 2026 The Abseil Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
//
|
|
15
|
+
// -----------------------------------------------------------------------------
|
|
16
|
+
// File: bind_back.h
|
|
17
|
+
// -----------------------------------------------------------------------------
|
|
18
|
+
//
|
|
19
|
+
// `absl::bind_back()` returns a functor by binding a number of arguments to
|
|
20
|
+
// the back of a provided (usually more generic) functor. Unlike `std::bind`,
|
|
21
|
+
// it does not require the use of argument placeholders. The simpler syntax of
|
|
22
|
+
// `absl::bind_back()` allows you to avoid known misuses with `std::bind()`.
|
|
23
|
+
//
|
|
24
|
+
// `absl::bind_back()` is meant as a drop-in replacement for C++23's
|
|
25
|
+
// `std::bind_back()`, which similarly resolves these issues with
|
|
26
|
+
// `std::bind()`. Both `bind_back()` alternatives, unlike `std::bind()`, allow
|
|
27
|
+
// partial function application. (See
|
|
28
|
+
// https://en.wikipedia.org/wiki/Partial_application).
|
|
29
|
+
|
|
30
|
+
#ifndef ABSL_FUNCTIONAL_BIND_BACK_H_
|
|
31
|
+
#define ABSL_FUNCTIONAL_BIND_BACK_H_
|
|
32
|
+
|
|
33
|
+
#ifdef __has_include
|
|
34
|
+
#if __has_include(<version>)
|
|
35
|
+
#include <version>
|
|
36
|
+
#endif
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#if defined(__cpp_lib_bind_back) && __cpp_lib_bind_back >= 202202L
|
|
40
|
+
#include <functional> // For std::bind_back.
|
|
41
|
+
#endif
|
|
42
|
+
|
|
43
|
+
#include <utility>
|
|
44
|
+
|
|
45
|
+
#include "absl/base/config.h"
|
|
46
|
+
#include "absl/functional/internal/back_binder.h"
|
|
47
|
+
#include "absl/utility/utility.h"
|
|
48
|
+
|
|
49
|
+
namespace absl {
|
|
50
|
+
ABSL_NAMESPACE_BEGIN
|
|
51
|
+
|
|
52
|
+
// bind_back()
|
|
53
|
+
//
|
|
54
|
+
// Binds the last N arguments of an invocable object and stores them by value.
|
|
55
|
+
//
|
|
56
|
+
// Like `std::bind()`, `absl::bind_back()` is implicitly convertible to
|
|
57
|
+
// `std::function`. In particular, it may be used as a simpler replacement for
|
|
58
|
+
// `std::bind()` in most cases, as it does not require placeholders to be
|
|
59
|
+
// specified. More importantly, it provides more reliable correctness guarantees
|
|
60
|
+
// than `std::bind()`; while `std::bind()` will silently ignore passing more
|
|
61
|
+
// parameters than expected, for example, `absl::bind_back()` will report such
|
|
62
|
+
// mis-uses as errors. In C++23, `absl::bind_back` is replaced by
|
|
63
|
+
// `std::bind_back`.
|
|
64
|
+
//
|
|
65
|
+
#if defined(__cpp_lib_bind_back) && __cpp_lib_bind_back >= 202202L
|
|
66
|
+
using std::bind_back;
|
|
67
|
+
#else
|
|
68
|
+
template <class F, class... BoundArgs>
|
|
69
|
+
constexpr functional_internal::bind_back_t<F, BoundArgs...> bind_back(
|
|
70
|
+
F&& func, BoundArgs&&... args) {
|
|
71
|
+
return functional_internal::bind_back_t<F, BoundArgs...>(
|
|
72
|
+
std::in_place, std::forward<F>(func), std::forward<BoundArgs>(args)...);
|
|
73
|
+
}
|
|
74
|
+
#endif
|
|
75
|
+
|
|
76
|
+
ABSL_NAMESPACE_END
|
|
77
|
+
} // namespace absl
|
|
78
|
+
|
|
79
|
+
#endif // ABSL_FUNCTIONAL_BIND_BACK_H_
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// Copyright 2026 The Abseil Authors
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// https://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
|
|
15
|
+
#include "absl/functional/bind_back.h"
|
|
16
|
+
|
|
17
|
+
#include <stddef.h>
|
|
18
|
+
|
|
19
|
+
#include <functional>
|
|
20
|
+
#include <memory>
|
|
21
|
+
#include <string>
|
|
22
|
+
#include <utility>
|
|
23
|
+
|
|
24
|
+
#include "gmock/gmock.h"
|
|
25
|
+
#include "gtest/gtest.h"
|
|
26
|
+
#include "absl/memory/memory.h"
|
|
27
|
+
|
|
28
|
+
namespace {
|
|
29
|
+
|
|
30
|
+
char CharAt(const char* s, size_t index) { return s[index]; }
|
|
31
|
+
|
|
32
|
+
TEST(BindTest, Basics) {
|
|
33
|
+
EXPECT_EQ('C', absl::bind_back(CharAt)("ABC", 2));
|
|
34
|
+
EXPECT_EQ('C', absl::bind_back(CharAt, 2)("ABC"));
|
|
35
|
+
EXPECT_EQ('C', absl::bind_back(CharAt, "ABC", 2)());
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
TEST(BindTest, Lambda) {
|
|
39
|
+
auto lambda = [](int x, int y, int z) { return x + y + z; };
|
|
40
|
+
EXPECT_EQ(6, absl::bind_back(lambda)(1, 2, 3));
|
|
41
|
+
EXPECT_EQ(6, absl::bind_back(lambda, 3)(1, 2));
|
|
42
|
+
EXPECT_EQ(6, absl::bind_back(lambda, 2, 3)(1));
|
|
43
|
+
EXPECT_EQ(6, absl::bind_back(lambda, 1, 2, 3)());
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
struct Functor {
|
|
47
|
+
std::string operator()() & { return "&"; }
|
|
48
|
+
std::string operator()() const& { return "const&"; }
|
|
49
|
+
std::string operator()() && { return "&&"; }
|
|
50
|
+
std::string operator()() const&& { return "const&&"; }
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
TEST(BindTest, PerfectForwardingOfBoundArgs) {
|
|
54
|
+
auto f = absl::bind_back(Functor());
|
|
55
|
+
const auto& cf = f;
|
|
56
|
+
EXPECT_EQ("&", f());
|
|
57
|
+
EXPECT_EQ("const&", cf());
|
|
58
|
+
EXPECT_EQ("&&", std::move(f)());
|
|
59
|
+
EXPECT_EQ("const&&", std::move(cf)());
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
struct ArgDescribe {
|
|
63
|
+
std::string operator()(int&) const { return "&"; } // NOLINT
|
|
64
|
+
std::string operator()(const int&) const { return "const&"; } // NOLINT
|
|
65
|
+
std::string operator()(int&&) const { return "&&"; }
|
|
66
|
+
std::string operator()(const int&&) const { return "const&&"; }
|
|
67
|
+
};
|
|
68
|
+
|
|
69
|
+
TEST(BindTest, PerfectForwardingOfFreeArgs) {
|
|
70
|
+
ArgDescribe f;
|
|
71
|
+
int i;
|
|
72
|
+
EXPECT_EQ("&", absl::bind_back(f)(static_cast<int&>(i)));
|
|
73
|
+
EXPECT_EQ("const&", absl::bind_back(f)(static_cast<const int&>(i)));
|
|
74
|
+
EXPECT_EQ("&&", absl::bind_back(f)(static_cast<int&&>(i)));
|
|
75
|
+
EXPECT_EQ("const&&", absl::bind_back(f)(static_cast<const int&&>(i)));
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
struct NonCopyableFunctor {
|
|
79
|
+
NonCopyableFunctor() = default;
|
|
80
|
+
NonCopyableFunctor(const NonCopyableFunctor&) = delete;
|
|
81
|
+
NonCopyableFunctor& operator=(const NonCopyableFunctor&) = delete;
|
|
82
|
+
const NonCopyableFunctor* operator()() const { return this; }
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
TEST(BindTest, RefToFunctor) {
|
|
86
|
+
// It won't copy/move the functor and use the original object.
|
|
87
|
+
NonCopyableFunctor ncf;
|
|
88
|
+
auto bound_ncf = absl::bind_back(std::ref(ncf));
|
|
89
|
+
auto bound_ncf_copy = bound_ncf;
|
|
90
|
+
EXPECT_EQ(&ncf, bound_ncf_copy());
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
struct Struct {
|
|
94
|
+
std::string value;
|
|
95
|
+
};
|
|
96
|
+
|
|
97
|
+
TEST(BindTest, StoreByCopy) {
|
|
98
|
+
Struct s = {"hello"};
|
|
99
|
+
auto f = absl::bind_back(&Struct::value, s);
|
|
100
|
+
auto g = f;
|
|
101
|
+
EXPECT_EQ("hello", f());
|
|
102
|
+
EXPECT_EQ("hello", g());
|
|
103
|
+
EXPECT_NE(&s.value, &f());
|
|
104
|
+
EXPECT_NE(&s.value, &g());
|
|
105
|
+
EXPECT_NE(&g(), &f());
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
struct NonCopyable {
|
|
109
|
+
explicit NonCopyable(const std::string& s) : value(s) {}
|
|
110
|
+
NonCopyable(const NonCopyable&) = delete;
|
|
111
|
+
NonCopyable& operator=(const NonCopyable&) = delete;
|
|
112
|
+
|
|
113
|
+
std::string value;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
const std::string& GetNonCopyableValue(const NonCopyable& n) { return n.value; }
|
|
117
|
+
|
|
118
|
+
TEST(BindTest, StoreByRef) {
|
|
119
|
+
NonCopyable s("hello");
|
|
120
|
+
auto f = absl::bind_back(&GetNonCopyableValue, std::ref(s));
|
|
121
|
+
EXPECT_EQ("hello", f());
|
|
122
|
+
EXPECT_EQ(&s.value, &f());
|
|
123
|
+
auto g = std::move(f); // NOLINT
|
|
124
|
+
EXPECT_EQ("hello", g());
|
|
125
|
+
EXPECT_EQ(&s.value, &g());
|
|
126
|
+
s.value = "goodbye";
|
|
127
|
+
EXPECT_EQ("goodbye", g());
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
TEST(BindTest, StoreByCRef) {
|
|
131
|
+
NonCopyable s("hello");
|
|
132
|
+
auto f = absl::bind_back(&GetNonCopyableValue, std::cref(s));
|
|
133
|
+
EXPECT_EQ("hello", f());
|
|
134
|
+
EXPECT_EQ(&s.value, &f());
|
|
135
|
+
auto g = std::move(f); // NOLINT
|
|
136
|
+
EXPECT_EQ("hello", g());
|
|
137
|
+
EXPECT_EQ(&s.value, &g());
|
|
138
|
+
s.value = "goodbye";
|
|
139
|
+
EXPECT_EQ("goodbye", g());
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
const std::string& GetNonCopyableValueByWrapper(
|
|
143
|
+
std::reference_wrapper<NonCopyable> n) {
|
|
144
|
+
return n.get().value;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
TEST(BindTest, StoreByRefInvokeByWrapper) {
|
|
148
|
+
NonCopyable s("hello");
|
|
149
|
+
auto f = absl::bind_back(GetNonCopyableValueByWrapper, std::ref(s));
|
|
150
|
+
EXPECT_EQ("hello", f());
|
|
151
|
+
EXPECT_EQ(&s.value, &f());
|
|
152
|
+
auto g = std::move(f);
|
|
153
|
+
EXPECT_EQ("hello", g());
|
|
154
|
+
EXPECT_EQ(&s.value, &g());
|
|
155
|
+
s.value = "goodbye";
|
|
156
|
+
EXPECT_EQ("goodbye", g());
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
TEST(BindTest, StoreByPointer) {
|
|
160
|
+
NonCopyable s("hello");
|
|
161
|
+
auto f = absl::bind_back(&NonCopyable::value, &s);
|
|
162
|
+
EXPECT_EQ("hello", f());
|
|
163
|
+
EXPECT_EQ(&s.value, &f());
|
|
164
|
+
auto g = std::move(f);
|
|
165
|
+
EXPECT_EQ("hello", g());
|
|
166
|
+
EXPECT_EQ(&s.value, &g());
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
struct MyStruct {
|
|
170
|
+
int x;
|
|
171
|
+
int Add(int y) const { return x + y; }
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
TEST(BindTest, MemberFunctionFreeInstance) {
|
|
175
|
+
MyStruct s{10};
|
|
176
|
+
auto f = absl::bind_back(&MyStruct::Add, 5);
|
|
177
|
+
EXPECT_EQ(f(s), 15);
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
int Sink(std::unique_ptr<int> p) { return *p; }
|
|
181
|
+
|
|
182
|
+
std::unique_ptr<int> Factory(int n) { return std::make_unique<int>(n); }
|
|
183
|
+
|
|
184
|
+
TEST(BindTest, NonCopyableArg) {
|
|
185
|
+
EXPECT_EQ(42, absl::bind_back(Sink)(std::make_unique<int>(42)));
|
|
186
|
+
EXPECT_EQ(42, absl::bind_back(Sink, std::make_unique<int>(42))());
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
TEST(BindTest, NonCopyableResult) {
|
|
190
|
+
EXPECT_THAT(absl::bind_back(Factory)(42), ::testing::Pointee(42));
|
|
191
|
+
EXPECT_THAT(absl::bind_back(Factory, 42)(), ::testing::Pointee(42));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// is_copy_constructible<FalseCopyable<unique_ptr<T>> is true but an attempt to
|
|
195
|
+
// instantiate the copy constructor leads to a compile error. This is similar
|
|
196
|
+
// to how standard containers behave.
|
|
197
|
+
template <class T>
|
|
198
|
+
struct FalseCopyable {
|
|
199
|
+
FalseCopyable() = default;
|
|
200
|
+
FalseCopyable(const FalseCopyable& other) : m(other.m) {}
|
|
201
|
+
FalseCopyable(FalseCopyable&& other) : m(std::move(other.m)) {}
|
|
202
|
+
T m;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
int GetMember(FalseCopyable<std::unique_ptr<int>> x) { return *x.m; }
|
|
206
|
+
|
|
207
|
+
TEST(BindTest, WrappedMoveOnly) {
|
|
208
|
+
FalseCopyable<std::unique_ptr<int>> x;
|
|
209
|
+
x.m = std::make_unique<int>(42);
|
|
210
|
+
auto f = absl::bind_back(&GetMember, std::move(x));
|
|
211
|
+
EXPECT_EQ(42, std::move(f)());
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
int Plus(int a, int b) { return a + b; }
|
|
215
|
+
|
|
216
|
+
TEST(BindTest, ConstExpr) {
|
|
217
|
+
constexpr auto f = absl::bind_back(CharAt);
|
|
218
|
+
EXPECT_EQ(f("ABC", 1), 'B');
|
|
219
|
+
static constexpr int five = 5;
|
|
220
|
+
constexpr auto plus5 = absl::bind_back(Plus, five);
|
|
221
|
+
EXPECT_EQ(plus5(1), 6);
|
|
222
|
+
|
|
223
|
+
static constexpr char data[] = "DEF";
|
|
224
|
+
constexpr auto g = absl::bind_back(CharAt, 1);
|
|
225
|
+
EXPECT_EQ(g(data), 'E');
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
struct ManglingCall {
|
|
229
|
+
int operator()(int, double, std::string) const { return 0; }
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
TEST(BindTest, Mangling) {
|
|
233
|
+
// We just want to generate a particular instantiation to see its mangling.
|
|
234
|
+
absl::bind_back(ManglingCall{}, 3.3, "A")(1);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
} // namespace
|
|
@@ -30,6 +30,12 @@
|
|
|
30
30
|
#ifndef ABSL_FUNCTIONAL_BIND_FRONT_H_
|
|
31
31
|
#define ABSL_FUNCTIONAL_BIND_FRONT_H_
|
|
32
32
|
|
|
33
|
+
#ifdef __has_include
|
|
34
|
+
#if __has_include(<version>)
|
|
35
|
+
#include <version>
|
|
36
|
+
#endif
|
|
37
|
+
#endif
|
|
38
|
+
|
|
33
39
|
#if defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
|
34
40
|
#include <functional> // For std::bind_front.
|
|
35
41
|
#endif // defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
|
@@ -184,7 +190,7 @@ template <class F, class... BoundArgs>
|
|
|
184
190
|
constexpr functional_internal::bind_front_t<F, BoundArgs...> bind_front(
|
|
185
191
|
F&& func, BoundArgs&&... args) {
|
|
186
192
|
return functional_internal::bind_front_t<F, BoundArgs...>(
|
|
187
|
-
|
|
193
|
+
std::in_place, std::forward<F>(func), std::forward<BoundArgs>(args)...);
|
|
188
194
|
}
|
|
189
195
|
#endif // defined(__cpp_lib_bind_front) && __cpp_lib_bind_front >= 201907L
|
|
190
196
|
|
|
@@ -169,11 +169,11 @@ int Sink(std::unique_ptr<int> p) {
|
|
|
169
169
|
return *p;
|
|
170
170
|
}
|
|
171
171
|
|
|
172
|
-
std::unique_ptr<int> Factory(int n) { return
|
|
172
|
+
std::unique_ptr<int> Factory(int n) { return std::make_unique<int>(n); }
|
|
173
173
|
|
|
174
174
|
TEST(BindTest, NonCopyableArg) {
|
|
175
|
-
EXPECT_EQ(42, absl::bind_front(Sink)(
|
|
176
|
-
EXPECT_EQ(42, absl::bind_front(Sink,
|
|
175
|
+
EXPECT_EQ(42, absl::bind_front(Sink)(std::make_unique<int>(42)));
|
|
176
|
+
EXPECT_EQ(42, absl::bind_front(Sink, std::make_unique<int>(42))());
|
|
177
177
|
}
|
|
178
178
|
|
|
179
179
|
TEST(BindTest, NonCopyableResult) {
|
|
@@ -196,7 +196,7 @@ int GetMember(FalseCopyable<std::unique_ptr<int>> x) { return *x.m; }
|
|
|
196
196
|
|
|
197
197
|
TEST(BindTest, WrappedMoveOnly) {
|
|
198
198
|
FalseCopyable<std::unique_ptr<int>> x;
|
|
199
|
-
x.m =
|
|
199
|
+
x.m = std::make_unique<int>(42);
|
|
200
200
|
auto f = absl::bind_front(&GetMember, std::move(x));
|
|
201
201
|
EXPECT_EQ(42, std::move(f)());
|
|
202
202
|
}
|