Reland "Roll abseil_revision 635c53fd9d..acc35c318c" This is a reland of commit dee46bb93533c5772a83e0a742a9b98be1e982b6 Original change's description: > Roll abseil_revision 635c53fd9d..acc35c318c > > Change Log: > https://chromium.googlesource.com/external/github.com/abseil/abseil-cpp/+log/635c53fd9d..acc35c318c > Full diff: > https://chromium.googlesource.com/external/github.com/abseil/abseil-cpp/+/635c53fd9d..acc35c318c > > Bug: None > Change-Id: I8b0542ba9bac9fef783f29236b11e580e302261b > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7909683 > Commit-Queue: Danil Chapovalov <danilchap@chromium.org> > SLSA-Policy-Verified: SLSA Policy Verification Service <devtools-gerritcodereview-exitgate@google.com> > Reviewed-by: Danil Chapovalov <danilchap@chromium.org> > Cr-Commit-Position: refs/heads/main@{#1645954} Bug: None Change-Id: Ia4746ff1bace53662abcdcd85df09bfda071ff22 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/7928870 Commit-Queue: Danil Chapovalov <danilchap@chromium.org> Auto-Submit: Mirko Bonadei <mbonadei@chromium.org> Reviewed-by: Danil Chapovalov <danilchap@chromium.org> SLSA-Policy-Verified: SLSA Policy Verification Service <devtools-gerritcodereview-exitgate@google.com> Cr-Commit-Position: refs/heads/main@{#1646389} NOKEYCHECK=True GitOrigin-RevId: f9d77a48d4e627bbe456e672b0580da9693ab9f6
diff --git a/CMake/AbseilDll.cmake b/CMake/AbseilDll.cmake index 97dd3ad..7c15070 100644 --- a/CMake/AbseilDll.cmake +++ b/CMake/AbseilDll.cmake
@@ -13,12 +13,15 @@ "base/dynamic_annotations.h" "base/fast_type_id.h" "base/internal/atomic_hook.h" + "base/internal/cpu_detect.cc" + "base/internal/cpu_detect.h" "base/internal/cycleclock.cc" "base/internal/cycleclock.h" "base/internal/cycleclock_config.h" "base/internal/direct_mmap.h" "base/internal/endian.h" "base/internal/errno_saver.h" + "base/internal/hardening.cc" "base/internal/hardening.h" "base/internal/hide_ptr.h" "base/internal/iterator_traits.h" @@ -104,8 +107,6 @@ "container/node_hash_set.h" "crc/crc32c.cc" "crc/crc32c.h" - "crc/internal/cpu_detect.cc" - "crc/internal/cpu_detect.h" "crc/internal/crc.cc" "crc/internal/crc.h" "crc/internal/crc32_x86_arm_combined_simd.h"
diff --git a/README.chromium b/README.chromium index 0d227de..4bc097b 100644 --- a/README.chromium +++ b/README.chromium
@@ -4,7 +4,7 @@ License: Apache-2.0 License File: LICENSE Version: N/A -Revision: 635c53fd9d77d90c926cb74b29a719aaeb5d4eed +Revision: acc35c318c4248b05ad85f6b7bbffd3c09bdfea7 Update Mechanism: Manual Security Critical: yes Shipped: yes
diff --git a/absl/algorithm/algorithm.h b/absl/algorithm/algorithm.h index 4e2ebf4..0b75908 100644 --- a/absl/algorithm/algorithm.h +++ b/absl/algorithm/algorithm.h
@@ -85,8 +85,8 @@ // n = (`last` - `first`) comparisons. A linear search over short containers // may be faster than a binary search, even when the container is sorted. template <typename InputIterator, typename EqualityComparable> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool linear_search( - InputIterator first, InputIterator last, const EqualityComparable& value) { +constexpr bool linear_search(InputIterator first, InputIterator last, + const EqualityComparable& value) { return std::find(first, last, value) != last; }
diff --git a/absl/algorithm/container.h b/absl/algorithm/container.h index c0934f7..6928623 100644 --- a/absl/algorithm/container.h +++ b/absl/algorithm/container.h
@@ -42,6 +42,7 @@ #include <algorithm> #include <cassert> +#include <cstddef> #include <iterator> #include <numeric> #include <type_traits> @@ -57,8 +58,16 @@ #include "absl/base/macros.h" #include "absl/meta/type_traits.h" +#ifdef __cpp_lib_span +#include <span> // NOLINT(build/c++20) +#endif + namespace absl { ABSL_NAMESPACE_BEGIN + +template <typename T> +class Span; + namespace container_algorithm_internal { // NOTE: it is important to defer to ADL lookup for building with C++ modules, @@ -99,21 +108,20 @@ // These are meant for internal use only. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 ContainerIter<C> c_begin(C& c) { +constexpr ContainerIter<C> c_begin(C& c) { return begin(c); } template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 ContainerIter<C> c_end(C& c) { +constexpr ContainerIter<C> c_end(C& c) { return end(c); } // Helper to check that the `OutputRange` has enough space. // Only performs the check if the iterators are ForwardIterators or better. template <typename InputSequence, typename Size, typename OutputRange> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 void AssertCopyNSize(InputSequence& input, - Size n, - OutputRange& output) { +constexpr void AssertCopyNSize(InputSequence& input, Size n, + OutputRange& output) { using InputIter = ContainerIter<InputSequence>; using OutputIter = ContainerIter<OutputRange>; @@ -130,8 +138,7 @@ } template <typename InputSequence, typename OutputRange> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 void AssertCopySize(InputSequence& input, - OutputRange& output) { +constexpr void AssertCopySize(InputSequence& input, OutputRange& output) { using InputIter = ContainerIter<InputSequence>; using OutputIter = ContainerIter<OutputRange>; if constexpr (base_internal::IsAtLeastForwardIterator<InputIter>::value && @@ -176,6 +183,54 @@ struct IsIterator< Iter, std::void_t<typename std::iterator_traits<Iter>::iterator_category>> : std::true_type {}; + +template <typename C, typename OutputIterator> +using ResultOfRangeToIteratorTransfer = + std::enable_if_t<container_algorithm_internal::IsIterator< + absl::remove_cvref_t<OutputIterator>>::value && + !container_algorithm_internal::IsMultidimensionalArray< + std::remove_reference_t<C>>::value, + std::decay_t<OutputIterator>>; + +template <typename C, typename OutputRange> +using ResultOfRangeToRangeTransfer = + std::enable_if_t<container_algorithm_internal::HasBeginEnd< + std::add_lvalue_reference_t<OutputRange>>::value && + !container_algorithm_internal::IsMultidimensionalArray< + std::remove_reference_t<OutputRange>>::value && + !container_algorithm_internal::IsMultidimensionalArray< + std::remove_reference_t<C>>::value, + void>; + +// Similar to std::is_pointer, but for testing if a type is a span. +// +// Note that subclasses of spans do not automatically qualify as spans, as they +// may deviate from the ownership assumption of a span. +template <typename T> +struct IsSpan + : std::conditional_t<std::is_same_v<T, std::remove_cv_t<T>>, + std::false_type, IsSpan<std::remove_cv_t<T>>> {}; + +template <typename T> +struct IsSpan<absl::Span<T>> : std::true_type {}; + +#ifdef __cpp_lib_span +template <typename T, size_t Extent> +struct IsSpan<std::span<T, Extent>> : std::true_type {}; +#endif + +// Indicates whether the given type is safe to pass as a sink to a function such +// as absl::c_fill(). Similar idea as std::ranges::borrowed_range. +// +// We are deliberately conservative here and only support lvalues and spans for +// now, in order to avoid divergence from C++17 or potentially unforeseen +// consequences. If needed in the future, we can probably extend this to all +// types that satisfy std::ranges::borrowed_range. +template <typename C> +using IsPermissibleDestinationRange = + std::conditional_t<std::is_lvalue_reference<C>::value, std::true_type, + IsSpan<C>>; + } // namespace container_algorithm_internal // PUBLIC API @@ -191,8 +246,7 @@ // // For a generalization that uses a predicate, see absl::c_any_of(). template <typename C, typename EqualityComparable> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_linear_search( - const C& c, EqualityComparable&& value) { +constexpr bool c_linear_search(const C& c, EqualityComparable&& value) { return absl::linear_search(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<EqualityComparable>(value)); @@ -207,9 +261,8 @@ // Container-based version of the <iterator> `std::distance()` function to // return the number of elements within a container. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerDifferenceType<const C> - c_distance(const C& c) { +constexpr container_algorithm_internal::ContainerDifferenceType<const C> +c_distance(const C& c) { return std::distance(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -223,7 +276,7 @@ // Container-based version of the <algorithm> `std::all_of()` function to // test if all elements within a container satisfy a condition. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_all_of(const C& c, Pred&& pred) { +constexpr bool c_all_of(const C& c, Pred&& pred) { return std::all_of(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -234,7 +287,7 @@ // Container-based version of the <algorithm> `std::any_of()` function to // test if any element in a container fulfills a condition. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_any_of(const C& c, Pred&& pred) { +constexpr bool c_any_of(const C& c, Pred&& pred) { return std::any_of(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -245,7 +298,7 @@ // Container-based version of the <algorithm> `std::none_of()` function to // test if no elements in a container fulfill a condition. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_none_of(const C& c, Pred&& pred) { +constexpr bool c_none_of(const C& c, Pred&& pred) { return std::none_of(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -256,8 +309,7 @@ // Container-based version of the <algorithm> `std::for_each()` function to // apply a function to a container's elements. template <typename C, typename Function> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<Function> c_for_each( - C&& c, Function&& f) { +constexpr std::decay_t<Function> c_for_each(C&& c, Function&& f) { return std::for_each(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Function>(f)); @@ -268,9 +320,8 @@ // Container-based version of the <algorithm> `std::find()` function to find // the first element containing the passed value within a container value. template <typename C, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_find(C& c, T&& value) { +constexpr container_algorithm_internal::ContainerIter<C> c_find(C& c, + T&& value) { return std::find(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<T>(value)); @@ -281,8 +332,7 @@ // Container-based version of the <algorithm> `std::ranges::contains()` C++23 // function to search a container for a value. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_contains(const Sequence& sequence, - T&& value) { +constexpr bool c_contains(const Sequence& sequence, T&& value) { return absl::c_find(sequence, std::forward<T>(value)) != container_algorithm_internal::c_end(sequence); } @@ -292,9 +342,8 @@ // Container-based version of the <algorithm> `std::find_if()` function to find // the first element in a container matching the given condition. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_find_if(C& c, Pred&& pred) { +constexpr container_algorithm_internal::ContainerIter<C> c_find_if( + C& c, Pred&& pred) { return std::find_if(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -305,9 +354,8 @@ // Container-based version of the <algorithm> `std::find_if_not()` function to // find the first element in a container not matching the given condition. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_find_if_not(C& c, Pred&& pred) { +constexpr container_algorithm_internal::ContainerIter<C> c_find_if_not( + C& c, Pred&& pred) { return std::find_if_not(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -318,9 +366,8 @@ // Container-based version of the <algorithm> `std::find_end()` function to // find the last subsequence within a container. template <typename Sequence1, typename Sequence2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence1> - c_find_end(Sequence1& sequence, Sequence2& subsequence) { +constexpr container_algorithm_internal::ContainerIter<Sequence1> c_find_end( + Sequence1& sequence, Sequence2& subsequence) { return std::find_end(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(subsequence), @@ -330,10 +377,8 @@ // Overload of c_find_end() for using a predicate evaluation other than `==` as // the function's test condition. template <typename Sequence1, typename Sequence2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence1> - c_find_end(Sequence1& sequence, Sequence2& subsequence, - BinaryPredicate&& pred) { +constexpr container_algorithm_internal::ContainerIter<Sequence1> c_find_end( + Sequence1& sequence, Sequence2& subsequence, BinaryPredicate&& pred) { return std::find_end(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(subsequence), @@ -347,9 +392,8 @@ // find the first element within the container that is also within the options // container. template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C1> - c_find_first_of(C1& container, const C2& options) { +constexpr container_algorithm_internal::ContainerIter<C1> c_find_first_of( + C1& container, const C2& options) { return std::find_first_of(container_algorithm_internal::c_begin(container), container_algorithm_internal::c_end(container), container_algorithm_internal::c_begin(options), @@ -359,9 +403,8 @@ // Overload of c_find_first_of() for using a predicate evaluation other than // `==` as the function's test condition. template <typename C1, typename C2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C1> - c_find_first_of(C1& container, const C2& options, BinaryPredicate&& pred) { +constexpr container_algorithm_internal::ContainerIter<C1> c_find_first_of( + C1& container, const C2& options, BinaryPredicate&& pred) { return std::find_first_of(container_algorithm_internal::c_begin(container), container_algorithm_internal::c_end(container), container_algorithm_internal::c_begin(options), @@ -374,9 +417,8 @@ // Container-based version of the <algorithm> `std::adjacent_find()` function to // find equal adjacent elements within a container. template <typename Sequence> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_adjacent_find(Sequence& sequence) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_adjacent_find( + Sequence& sequence) { return std::adjacent_find(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -384,9 +426,8 @@ // Overload of c_adjacent_find() for using a predicate evaluation other than // `==` as the function's test condition. template <typename Sequence, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_adjacent_find(Sequence& sequence, BinaryPredicate&& pred) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_adjacent_find( + Sequence& sequence, BinaryPredicate&& pred) { return std::adjacent_find(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<BinaryPredicate>(pred)); @@ -397,9 +438,8 @@ // Container-based version of the <algorithm> `std::count()` function to count // values that match within a container. template <typename C, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerDifferenceType<const C> - c_count(const C& c, T&& value) { +constexpr container_algorithm_internal::ContainerDifferenceType<const C> +c_count(const C& c, T&& value) { return std::count(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<T>(value)); @@ -410,9 +450,8 @@ // Container-based version of the <algorithm> `std::count_if()` function to // count values matching a condition within a container. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerDifferenceType<const C> - c_count_if(const C& c, Pred&& pred) { +constexpr container_algorithm_internal::ContainerDifferenceType<const C> +c_count_if(const C& c, Pred&& pred) { return std::count_if(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -424,9 +463,8 @@ // return the first element where two ordered containers differ. Applies `==` to // the first N elements of `c1` and `c2`, where N = min(size(c1), size(c2)). template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIterPairType<C1, C2> - c_mismatch(C1& c1, C2& c2) { +constexpr container_algorithm_internal::ContainerIterPairType<C1, C2> +c_mismatch(C1& c1, C2& c2) { return std::mismatch(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -437,9 +475,8 @@ // the function's test condition. Applies `pred`to the first N elements of `c1` // and `c2`, where N = min(size(c1), size(c2)). template <typename C1, typename C2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIterPairType<C1, C2> - c_mismatch(C1& c1, C2& c2, BinaryPredicate pred) { +constexpr container_algorithm_internal::ContainerIterPairType<C1, C2> +c_mismatch(C1& c1, C2& c2, BinaryPredicate pred) { return std::mismatch(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -451,7 +488,7 @@ // Container-based version of the <algorithm> `std::equal()` function to // test whether two containers are equal. template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_equal(const C1& c1, const C2& c2) { +constexpr bool c_equal(const C1& c1, const C2& c2) { return std::equal(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -461,8 +498,7 @@ // Overload of c_equal() for using a predicate evaluation other than `==` as // the function's test condition. template <typename C1, typename C2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_equal(const C1& c1, const C2& c2, - BinaryPredicate&& pred) { +constexpr bool c_equal(const C1& c1, const C2& c2, BinaryPredicate&& pred) { return std::equal(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -475,8 +511,7 @@ // Container-based version of the <algorithm> `std::is_permutation()` function // to test whether a container is a permutation of another. template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_permutation(const C1& c1, - const C2& c2) { +constexpr bool c_is_permutation(const C1& c1, const C2& c2) { return std::is_permutation(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -486,8 +521,8 @@ // Overload of c_is_permutation() for using a predicate evaluation other than // `==` as the function's test condition. template <typename C1, typename C2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_permutation( - const C1& c1, const C2& c2, BinaryPredicate&& pred) { +constexpr bool c_is_permutation(const C1& c1, const C2& c2, + BinaryPredicate&& pred) { return std::is_permutation(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -500,9 +535,8 @@ // Container-based version of the <algorithm> `std::search()` function to search // a container for a subsequence. template <typename Sequence1, typename Sequence2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence1> - c_search(Sequence1& sequence, Sequence2& subsequence) { +constexpr container_algorithm_internal::ContainerIter<Sequence1> c_search( + Sequence1& sequence, Sequence2& subsequence) { return std::search(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(subsequence), @@ -512,10 +546,8 @@ // Overload of c_search() for using a predicate evaluation other than // `==` as the function's test condition. template <typename Sequence1, typename Sequence2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence1> - c_search(Sequence1& sequence, Sequence2& subsequence, - BinaryPredicate&& pred) { +constexpr container_algorithm_internal::ContainerIter<Sequence1> c_search( + Sequence1& sequence, Sequence2& subsequence, BinaryPredicate&& pred) { return std::search(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(subsequence), @@ -528,8 +560,8 @@ // Container-based version of the <algorithm> `std::ranges::contains_subrange()` // C++23 function to search a container for a subsequence. template <typename Sequence1, typename Sequence2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_contains_subrange( - Sequence1& sequence, Sequence2& subsequence) { +constexpr bool c_contains_subrange(Sequence1& sequence, + Sequence2& subsequence) { return absl::c_search(sequence, subsequence) != container_algorithm_internal::c_end(sequence); } @@ -537,8 +569,8 @@ // Overload of c_contains_subrange() for using a predicate evaluation other than // `==` as the function's test condition. template <typename Sequence1, typename Sequence2, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_contains_subrange( - Sequence1& sequence, Sequence2& subsequence, BinaryPredicate&& pred) { +constexpr bool c_contains_subrange(Sequence1& sequence, Sequence2& subsequence, + BinaryPredicate&& pred) { return absl::c_search(sequence, subsequence, std::forward<BinaryPredicate>(pred)) != container_algorithm_internal::c_end(sequence); @@ -549,9 +581,8 @@ // Container-based version of the <algorithm> `std::search_n()` function to // search a container for the first sequence of N elements. template <typename Sequence, typename Size, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_search_n(Sequence& sequence, Size count, T&& value) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_search_n( + Sequence& sequence, Size count, T&& value) { return std::search_n(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), count, std::forward<T>(value)); @@ -561,10 +592,8 @@ // `==` as the function's test condition. template <typename Sequence, typename Size, typename T, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_search_n(Sequence& sequence, Size count, T&& value, - BinaryPredicate&& pred) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_search_n( + Sequence& sequence, Size count, T&& value, BinaryPredicate&& pred) { return std::search_n(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), count, std::forward<T>(value), @@ -580,13 +609,9 @@ // Container-based version of the <algorithm> `std::copy()` function to copy a // container's elements into an iterator. template <typename InputSequence, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - std::enable_if_t<container_algorithm_internal::IsIterator< - absl::remove_cvref_t<OutputIterator>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - InputSequence>::value, - std::decay_t<OutputIterator>> - c_copy(const InputSequence& input, OutputIterator&& output) { +constexpr container_algorithm_internal::ResultOfRangeToIteratorTransfer< + InputSequence, OutputIterator> +c_copy(const InputSequence& input, OutputIterator&& output) { return std::copy(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), std::forward<OutputIterator>(output)); @@ -603,15 +628,9 @@ // If `std::size(output) > std::size(input)`, only `std::size(input)` elements // are copied, and `output` is not truncated. template <typename InputSequence, typename OutputRange> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - std::enable_if_t<container_algorithm_internal::HasBeginEnd< - std::add_lvalue_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - std::remove_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - InputSequence>::value, - void> - c_copy(const InputSequence& input, OutputRange&& output) { +constexpr container_algorithm_internal::ResultOfRangeToRangeTransfer< + InputSequence, OutputRange> +c_copy(const InputSequence& input, OutputRange&& output) { container_algorithm_internal::AssertCopySize(input, output); absl::c_copy(input, container_algorithm_internal::c_begin( std::forward<OutputRange>(output))); @@ -622,11 +641,8 @@ // Container-based version of the <algorithm> `std::copy_n()` function to copy a // container's first N elements into an iterator. template <typename C, typename Size, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::enable_if_t< - container_algorithm_internal::IsIterator< - absl::remove_cvref_t<OutputIterator>>::value && - !container_algorithm_internal::IsMultidimensionalArray<C>::value, - std::decay_t<OutputIterator>> +constexpr container_algorithm_internal::ResultOfRangeToIteratorTransfer< + C, OutputIterator> c_copy_n(const C& input, Size n, OutputIterator&& output) { return std::copy_n(container_algorithm_internal::c_begin(input), n, std::forward<OutputIterator>(output)); @@ -644,13 +660,8 @@ // If `std::size(output) > n`, only `n` elements are copied, and `output` is not // truncated. template <typename C, typename Size, typename OutputRange> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::enable_if_t< - container_algorithm_internal::HasBeginEnd< - std::add_lvalue_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - std::remove_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray<C>::value, - void> +constexpr container_algorithm_internal::ResultOfRangeToRangeTransfer< + C, OutputRange> c_copy_n(const C& input, Size n, OutputRange&& output) { container_algorithm_internal::AssertCopyNSize(input, n, output); absl::c_copy_n( @@ -663,8 +674,8 @@ // Container-based version of the <algorithm> `std::copy_if()` function to copy // a container's elements satisfying some condition into an iterator. template <typename InputSequence, typename OutputIterator, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_copy_if(const InputSequence& input, OutputIterator output, Pred&& pred) { +constexpr OutputIterator c_copy_if(const InputSequence& input, + OutputIterator output, Pred&& pred) { return std::copy_if(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output, std::forward<Pred>(pred)); @@ -675,8 +686,8 @@ // Container-based version of the <algorithm> `std::copy_backward()` function to // copy a container's elements in reverse order into an iterator. template <typename C, typename BidirectionalIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 BidirectionalIterator -c_copy_backward(const C& src, BidirectionalIterator dest) { +constexpr BidirectionalIterator c_copy_backward(const C& src, + BidirectionalIterator dest) { return std::copy_backward(container_algorithm_internal::c_begin(src), container_algorithm_internal::c_end(src), dest); } @@ -686,13 +697,9 @@ // Container-based version of the <algorithm> `std::move()` function to move // a container's elements into an iterator. template <typename C, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - std::enable_if_t<container_algorithm_internal::IsIterator< - absl::remove_cvref_t<OutputIterator>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - std::remove_reference_t<C>>::value, - std::decay_t<OutputIterator>> - c_move(C&& src, OutputIterator&& dest) { +constexpr container_algorithm_internal::ResultOfRangeToIteratorTransfer< + C, OutputIterator> +c_move(C&& src, OutputIterator&& dest) { return std::move(container_algorithm_internal::c_begin(src), container_algorithm_internal::c_end(src), std::forward<OutputIterator>(dest)); @@ -704,15 +711,9 @@ // The `dest` container must be large enough to hold all elements of `src`; // this function does not resize `dest`. template <typename C, typename OutputRange> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - std::enable_if_t<container_algorithm_internal::HasBeginEnd< - std::add_lvalue_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - std::remove_reference_t<OutputRange>>::value && - !container_algorithm_internal::IsMultidimensionalArray< - std::remove_reference_t<C>>::value, - void> - c_move(C&& src, OutputRange&& dest) { +constexpr container_algorithm_internal::ResultOfRangeToRangeTransfer< + C, OutputRange> +c_move(C&& src, OutputRange&& dest) { container_algorithm_internal::AssertCopySize(src, dest); absl::c_move(std::forward<C>(src), container_algorithm_internal::c_begin( std::forward<OutputRange>(dest))); @@ -723,8 +724,8 @@ // Container-based version of the <algorithm> `std::move_backward()` function to // move a container's elements into an iterator in reverse order. template <typename C, typename BidirectionalIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 BidirectionalIterator -c_move_backward(C&& src, BidirectionalIterator dest) { +constexpr BidirectionalIterator c_move_backward(C&& src, + BidirectionalIterator dest) { return std::move_backward(container_algorithm_internal::c_begin(src), container_algorithm_internal::c_end(src), dest); } @@ -735,9 +736,8 @@ // swap a container's elements with another container's elements. Swaps the // first N elements of `c1` and `c2`, where N = min(size(c1), size(c2)). template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C2> - c_swap_ranges(C1& c1, C2& c2) { +constexpr container_algorithm_internal::ContainerIter<C2> c_swap_ranges( + C1& c1, C2& c2) { auto first1 = container_algorithm_internal::c_begin(c1); auto last1 = container_algorithm_internal::c_end(c1); auto first2 = container_algorithm_internal::c_begin(c2); @@ -757,8 +757,9 @@ // result in an iterator pointing to the last transformed element in the output // range. template <typename InputSequence, typename OutputIterator, typename UnaryOp> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_transform( - const InputSequence& input, OutputIterator output, UnaryOp&& unary_op) { +constexpr OutputIterator c_transform(const InputSequence& input, + OutputIterator output, + UnaryOp&& unary_op) { return std::transform(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output, std::forward<UnaryOp>(unary_op)); @@ -769,9 +770,10 @@ // where N = min(size(c1), size(c2)). template <typename InputSequence1, typename InputSequence2, typename OutputIterator, typename BinaryOp> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_transform(const InputSequence1& input1, const InputSequence2& input2, - OutputIterator output, BinaryOp&& binary_op) { +constexpr OutputIterator c_transform(const InputSequence1& input1, + const InputSequence2& input2, + OutputIterator output, + BinaryOp&& binary_op) { auto first1 = container_algorithm_internal::c_begin(input1); auto last1 = container_algorithm_internal::c_end(input1); auto first2 = container_algorithm_internal::c_begin(input2); @@ -790,9 +792,8 @@ // replace a container's elements of some value with a new value. The container // is modified in place. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_replace(Sequence& sequence, - const T& old_value, - const T& new_value) { +constexpr void c_replace(Sequence& sequence, const T& old_value, + const T& new_value) { std::replace(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), old_value, new_value); @@ -804,8 +805,7 @@ // replace a container's elements of some value with a new value based on some // condition. The container is modified in place. template <typename C, typename Pred, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_replace_if(C& c, Pred&& pred, - T&& new_value) { +constexpr void c_replace_if(C& c, Pred&& pred, T&& new_value) { std::replace_if(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred), std::forward<T>(new_value)); @@ -817,8 +817,8 @@ // replace a container's elements of some value with a new value and return the // results within an iterator. template <typename C, typename OutputIterator, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_replace_copy( - const C& c, OutputIterator result, T&& old_value, T&& new_value) { +constexpr OutputIterator c_replace_copy(const C& c, OutputIterator result, + T&& old_value, T&& new_value) { return std::replace_copy(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result, std::forward<T>(old_value), @@ -831,8 +831,8 @@ // to replace a container's elements of some value with a new value based on // some condition, and return the results within an iterator. template <typename C, typename OutputIterator, typename Pred, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_replace_copy_if( - const C& c, OutputIterator result, Pred&& pred, const T& new_value) { +constexpr OutputIterator c_replace_copy_if(const C& c, OutputIterator result, + Pred&& pred, const T& new_value) { return std::replace_copy_if(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result, std::forward<Pred>(pred), new_value); @@ -843,7 +843,9 @@ // Container-based version of the <algorithm> `std::fill()` function to fill a // container with some value. template <typename C, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_fill(C& c, const T& value) { +constexpr std::enable_if_t< + container_algorithm_internal::IsPermissibleDestinationRange<C>::value, void> +c_fill(C&& c, const T& value) { std::fill(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), value); } @@ -853,8 +855,9 @@ // Container-based version of the <algorithm> `std::fill_n()` function to fill // the first N elements in a container with some value. template <typename C, typename Size, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_fill_n(C& c, Size n, - const T& value) { +constexpr std::enable_if_t< + container_algorithm_internal::IsPermissibleDestinationRange<C>::value, void> +c_fill_n(C&& c, Size n, const T& value) { std::fill_n(container_algorithm_internal::c_begin(c), n, value); } @@ -863,7 +866,7 @@ // Container-based version of the <algorithm> `std::generate()` function to // assign a container's elements to the values provided by the given generator. template <typename C, typename Generator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_generate(C& c, Generator&& gen) { +constexpr void c_generate(C& c, Generator&& gen) { std::generate(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Generator>(gen)); @@ -875,9 +878,8 @@ // assign a container's first N elements to the values provided by the given // generator. template <typename C, typename Size, typename Generator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_generate_n(C& c, Size n, Generator&& gen) { +constexpr container_algorithm_internal::ContainerIter<C> c_generate_n( + C& c, Size n, Generator&& gen) { return std::generate_n(container_algorithm_internal::c_begin(c), n, std::forward<Generator>(gen)); } @@ -893,8 +895,8 @@ // copy a container's elements while removing any elements matching the given // `value`. template <typename C, typename OutputIterator, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_remove_copy(const C& c, OutputIterator result, const T& value) { +constexpr OutputIterator c_remove_copy(const C& c, OutputIterator result, + const T& value) { return std::remove_copy(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result, value); @@ -906,8 +908,8 @@ // to copy a container's elements while removing any elements matching the given // condition. template <typename C, typename OutputIterator, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_remove_copy_if(const C& c, OutputIterator result, Pred&& pred) { +constexpr OutputIterator c_remove_copy_if(const C& c, OutputIterator result, + Pred&& pred) { return std::remove_copy_if(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result, std::forward<Pred>(pred)); @@ -919,8 +921,7 @@ // copy a container's elements while removing any elements containing duplicate // values. template <typename C, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_unique_copy(const C& c, OutputIterator result) { +constexpr OutputIterator c_unique_copy(const C& c, OutputIterator result) { return std::unique_copy(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result); } @@ -928,8 +929,8 @@ // Overload of c_unique_copy() for using a predicate evaluation other than // `==` for comparing uniqueness of the element values. template <typename C, typename OutputIterator, typename BinaryPredicate> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_unique_copy(const C& c, OutputIterator result, BinaryPredicate&& pred) { +constexpr OutputIterator c_unique_copy(const C& c, OutputIterator result, + BinaryPredicate&& pred) { return std::unique_copy(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), result, std::forward<BinaryPredicate>(pred)); @@ -940,7 +941,7 @@ // Container-based version of the <algorithm> `std::reverse()` function to // reverse a container's elements. template <typename Sequence> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_reverse(Sequence& sequence) { +constexpr void c_reverse(Sequence& sequence) { std::reverse(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -950,8 +951,8 @@ // Container-based version of the <algorithm> `std::reverse()` function to // reverse a container's elements and write them to an iterator range. template <typename C, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_reverse_copy(const C& sequence, OutputIterator result) { +constexpr OutputIterator c_reverse_copy(const C& sequence, + OutputIterator result) { return std::reverse_copy(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), result); @@ -964,10 +965,9 @@ // the first element in the container. template <typename C, typename Iterator = container_algorithm_internal::ContainerIter<C>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 Iterator c_rotate(C& sequence, - Iterator middle) { - return absl::rotate(container_algorithm_internal::c_begin(sequence), middle, - container_algorithm_internal::c_end(sequence)); +constexpr Iterator c_rotate(C& sequence, Iterator middle) { + return std::rotate(container_algorithm_internal::c_begin(sequence), middle, + container_algorithm_internal::c_end(sequence)); } // c_rotate_copy() @@ -976,10 +976,10 @@ // shift a container's elements leftward such that the `middle` element becomes // the first element in a new iterator range. template <typename C, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_rotate_copy(const C& sequence, - container_algorithm_internal::ContainerIter<const C> middle, - OutputIterator result) { +constexpr OutputIterator c_rotate_copy( + const C& sequence, + container_algorithm_internal::ContainerIter<const C> middle, + OutputIterator result) { return std::rotate_copy(container_algorithm_internal::c_begin(sequence), middle, container_algorithm_internal::c_end(sequence), result); @@ -1021,8 +1021,7 @@ // to test whether all elements in the container for which `pred` returns `true` // precede those for which `pred` is `false`. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_partitioned(const C& c, - Pred&& pred) { +constexpr bool c_is_partitioned(const C& c, Pred&& pred) { return std::is_partitioned(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -1035,9 +1034,8 @@ // which `pred` returns `true` precede all those for which it returns `false`, // returning an iterator to the first element of the second group. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_partition(C& c, Pred&& pred) { +constexpr container_algorithm_internal::ContainerIter<C> c_partition( + C& c, Pred&& pred) { return std::partition(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -1066,9 +1064,9 @@ template <typename C, typename OutputIterator1, typename OutputIterator2, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::pair<OutputIterator1, OutputIterator2> -c_partition_copy(const C& c, OutputIterator1 out_true, - OutputIterator2 out_false, Pred&& pred) { +constexpr std::pair<OutputIterator1, OutputIterator2> c_partition_copy( + const C& c, OutputIterator1 out_true, OutputIterator2 out_false, + Pred&& pred) { return std::partition_copy(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), out_true, out_false, std::forward<Pred>(pred)); @@ -1080,9 +1078,8 @@ // to return the first element of an already partitioned container for which // the given `pred` is not `true`. template <typename C, typename Pred> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_partition_point(C& c, Pred&& pred) { +constexpr container_algorithm_internal::ContainerIter<C> c_partition_point( + C& c, Pred&& pred) { return std::partition_point(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<Pred>(pred)); @@ -1097,7 +1094,7 @@ // Container-based version of the <algorithm> `std::sort()` function // to sort elements in ascending order of their values. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort(C& c) { +constexpr void c_sort(C& c) { std::sort(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1105,7 +1102,7 @@ // Overload of c_sort() for performing a `comp` comparison other than the // default `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort(C& c, LessThan&& comp) { +constexpr void c_sort(C& c, LessThan&& comp) { std::sort(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1136,7 +1133,7 @@ // Container-based version of the <algorithm> `std::is_sorted()` function // to evaluate whether the given container is sorted in ascending order. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_sorted(const C& c) { +constexpr bool c_is_sorted(const C& c) { return std::is_sorted(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1144,8 +1141,7 @@ // c_is_sorted() overload for performing a `comp` comparison other than the // default `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_sorted(const C& c, - LessThan&& comp) { +constexpr bool c_is_sorted(const C& c, LessThan&& comp) { return std::is_sorted(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1157,7 +1153,7 @@ // to rearrange elements within a container such that elements before `middle` // are sorted in ascending order. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_partial_sort( +constexpr void c_partial_sort( RandomAccessContainer& sequence, container_algorithm_internal::ContainerIter<RandomAccessContainer> middle) { std::partial_sort(container_algorithm_internal::c_begin(sequence), middle, @@ -1167,7 +1163,7 @@ // Overload of c_partial_sort() for performing a `comp` comparison other than // the default `operator<`. template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_partial_sort( +constexpr void c_partial_sort( RandomAccessContainer& sequence, container_algorithm_internal::ContainerIter<RandomAccessContainer> middle, LessThan&& comp) { @@ -1184,9 +1180,8 @@ // At most min(result.last - result.first, sequence.last - sequence.first) // elements from the sequence will be stored in the result. template <typename C, typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<RandomAccessContainer> - c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) { +constexpr container_algorithm_internal::ContainerIter<RandomAccessContainer> +c_partial_sort_copy(const C& sequence, RandomAccessContainer& result) { return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(result), @@ -1196,10 +1191,9 @@ // Overload of c_partial_sort_copy() for performing a `comp` comparison other // than the default `operator<`. template <typename C, typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<RandomAccessContainer> - c_partial_sort_copy(const C& sequence, RandomAccessContainer& result, - LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<RandomAccessContainer> +c_partial_sort_copy(const C& sequence, RandomAccessContainer& result, + LessThan&& comp) { return std::partial_sort_copy(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), container_algorithm_internal::c_begin(result), @@ -1213,9 +1207,8 @@ // to return the first element within a container that is not sorted in // ascending order as an iterator. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_is_sorted_until(C& c) { +constexpr container_algorithm_internal::ContainerIter<C> c_is_sorted_until( + C& c) { return std::is_sorted_until(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1223,9 +1216,8 @@ // Overload of c_is_sorted_until() for performing a `comp` comparison other than // the default `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<C> - c_is_sorted_until(C& c, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<C> c_is_sorted_until( + C& c, LessThan&& comp) { return std::is_sorted_until(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1239,7 +1231,7 @@ // any order, except that all preceding `nth` will be less than that element, // and all following `nth` will be greater than that element. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_nth_element( +constexpr void c_nth_element( RandomAccessContainer& sequence, container_algorithm_internal::ContainerIter<RandomAccessContainer> nth) { std::nth_element(container_algorithm_internal::c_begin(sequence), nth, @@ -1249,7 +1241,7 @@ // Overload of c_nth_element() for performing a `comp` comparison other than // the default `operator<`. template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_nth_element( +constexpr void c_nth_element( RandomAccessContainer& sequence, container_algorithm_internal::ContainerIter<RandomAccessContainer> nth, LessThan&& comp) { @@ -1268,9 +1260,8 @@ // to return an iterator pointing to the first element in a sorted container // which does not compare less than `value`. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_lower_bound(Sequence& sequence, const T& value) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_lower_bound( + Sequence& sequence, const T& value) { return std::lower_bound(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value); } @@ -1278,9 +1269,8 @@ // Overload of c_lower_bound() for performing a `comp` comparison other than // the default `operator<`. template <typename Sequence, typename T, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_lower_bound(Sequence& sequence, const T& value, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_lower_bound( + Sequence& sequence, const T& value, LessThan&& comp) { return std::lower_bound(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value, std::forward<LessThan>(comp)); @@ -1292,9 +1282,8 @@ // to return an iterator pointing to the first element in a sorted container // which is greater than `value`. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_upper_bound(Sequence& sequence, const T& value) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_upper_bound( + Sequence& sequence, const T& value) { return std::upper_bound(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value); } @@ -1302,9 +1291,8 @@ // Overload of c_upper_bound() for performing a `comp` comparison other than // the default `operator<`. template <typename Sequence, typename T, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<Sequence> - c_upper_bound(Sequence& sequence, const T& value, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_upper_bound( + Sequence& sequence, const T& value, LessThan&& comp) { return std::upper_bound(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value, std::forward<LessThan>(comp)); @@ -1316,9 +1304,9 @@ // to return an iterator pair pointing to the first and last elements in a // sorted container which compare equal to `value`. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIterPairType<Sequence, Sequence> - c_equal_range(Sequence& sequence, const T& value) { +constexpr container_algorithm_internal::ContainerIterPairType<Sequence, + Sequence> +c_equal_range(Sequence& sequence, const T& value) { return std::equal_range(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value); } @@ -1326,9 +1314,9 @@ // Overload of c_equal_range() for performing a `comp` comparison other than // the default `operator<`. template <typename Sequence, typename T, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIterPairType<Sequence, Sequence> - c_equal_range(Sequence& sequence, const T& value, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIterPairType<Sequence, + Sequence> +c_equal_range(Sequence& sequence, const T& value, LessThan&& comp) { return std::equal_range(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value, std::forward<LessThan>(comp)); @@ -1340,8 +1328,7 @@ // to test if any element in the sorted container contains a value equivalent to // 'value'. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_binary_search( - const Sequence& sequence, const T& value) { +constexpr bool c_binary_search(const Sequence& sequence, const T& value) { return std::binary_search(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value); @@ -1350,8 +1337,8 @@ // Overload of c_binary_search() for performing a `comp` comparison other than // the default `operator<`. template <typename Sequence, typename T, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_binary_search( - const Sequence& sequence, const T& value, LessThan&& comp) { +constexpr bool c_binary_search(const Sequence& sequence, const T& value, + LessThan&& comp) { return std::binary_search(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value, std::forward<LessThan>(comp)); @@ -1366,8 +1353,8 @@ // Container-based version of the <algorithm> `std::merge()` function // to merge two sorted containers into a single sorted iterator. template <typename C1, typename C2, typename OutputIterator> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_merge(const C1& c1, const C2& c2, OutputIterator result) { +constexpr OutputIterator c_merge(const C1& c1, const C2& c2, + OutputIterator result) { return std::merge(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1377,8 +1364,8 @@ // Overload of c_merge() for performing a `comp` comparison other than // the default `operator<`. template <typename C1, typename C2, typename OutputIterator, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_merge(const C1& c1, const C2& c2, OutputIterator result, LessThan&& comp) { +constexpr OutputIterator c_merge(const C1& c1, const C2& c2, + OutputIterator result, LessThan&& comp) { return std::merge(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1414,8 +1401,7 @@ // to test whether a sorted container `c1` entirely contains another sorted // container `c2`. template <typename C1, typename C2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_includes(const C1& c1, - const C2& c2) { +constexpr bool c_includes(const C1& c1, const C2& c2) { return std::includes(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1425,8 +1411,7 @@ // Overload of c_includes() for performing a merge using a `comp` other than // `operator<`. template <typename C1, typename C2, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_includes(const C1& c1, const C2& c2, - LessThan&& comp) { +constexpr bool c_includes(const C1& c1, const C2& c2, LessThan&& comp) { return std::includes(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1439,15 +1424,14 @@ // Container-based version of the <algorithm> `std::set_union()` function // to return an iterator containing the union of two containers; duplicate // values are not copied into the output. -template <typename C1, typename C2, typename OutputIterator, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_set_union(const C1& c1, const C2& c2, OutputIterator output) { +template < + typename C1, typename C2, typename OutputIterator, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_union(const C1& c1, const C2& c2, + OutputIterator output) { return std::set_union(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1456,15 +1440,14 @@ // Overload of c_set_union() for performing a merge using a `comp` other than // `operator<`. -template <typename C1, typename C2, typename OutputIterator, typename LessThan, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_union( - const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) { +template < + typename C1, typename C2, typename OutputIterator, typename LessThan, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_union(const C1& c1, const C2& c2, + OutputIterator output, LessThan&& comp) { return std::set_union(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1476,15 +1459,14 @@ // // Container-based version of the <algorithm> `std::set_intersection()` function // to return an iterator containing the intersection of two sorted containers. -template <typename C1, typename C2, typename OutputIterator, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_set_intersection(const C1& c1, const C2& c2, OutputIterator output) { +template < + typename C1, typename C2, typename OutputIterator, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_intersection(const C1& c1, const C2& c2, + OutputIterator output) { // In debug builds, ensure that both containers are sorted with respect to the // default comparator. std::set_intersection requires the containers be sorted // using operator<. @@ -1498,15 +1480,15 @@ // Overload of c_set_intersection() for performing a merge using a `comp` other // than `operator<`. -template <typename C1, typename C2, typename OutputIterator, typename LessThan, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_intersection( - const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) { +template < + typename C1, typename C2, typename OutputIterator, typename LessThan, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_intersection(const C1& c1, const C2& c2, + OutputIterator output, + LessThan&& comp) { // In debug builds, ensure that both containers are sorted with respect to the // default comparator. std::set_intersection requires the containers be sorted // using the same comparator. @@ -1524,15 +1506,14 @@ // Container-based version of the <algorithm> `std::set_difference()` function // to return an iterator containing elements present in the first container but // not in the second. -template <typename C1, typename C2, typename OutputIterator, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_set_difference(const C1& c1, const C2& c2, OutputIterator output) { +template < + typename C1, typename C2, typename OutputIterator, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_difference(const C1& c1, const C2& c2, + OutputIterator output) { return std::set_difference(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1541,15 +1522,15 @@ // Overload of c_set_difference() for performing a merge using a `comp` other // than `operator<`. -template <typename C1, typename C2, typename OutputIterator, typename LessThan, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_difference( - const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) { +template < + typename C1, typename C2, typename OutputIterator, typename LessThan, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_difference(const C1& c1, const C2& c2, + OutputIterator output, + LessThan&& comp) { return std::set_difference(container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), container_algorithm_internal::c_begin(c2), @@ -1562,15 +1543,14 @@ // Container-based version of the <algorithm> `std::set_symmetric_difference()` // function to return an iterator containing elements present in either one // container or the other, but not both. -template <typename C1, typename C2, typename OutputIterator, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator -c_set_symmetric_difference(const C1& c1, const C2& c2, OutputIterator output) { +template < + typename C1, typename C2, typename OutputIterator, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2, + OutputIterator output) { return std::set_symmetric_difference( container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), @@ -1580,15 +1560,15 @@ // Overload of c_set_symmetric_difference() for performing a merge using a // `comp` other than `operator<`. -template <typename C1, typename C2, typename OutputIterator, typename LessThan, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C1>::value, - void>::type, - typename = typename std::enable_if< - !container_algorithm_internal::IsUnorderedContainer<C2>::value, - void>::type> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIterator c_set_symmetric_difference( - const C1& c1, const C2& c2, OutputIterator output, LessThan&& comp) { +template < + typename C1, typename C2, typename OutputIterator, typename LessThan, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C1>::value, void>, + typename = std::enable_if_t< + !container_algorithm_internal::IsUnorderedContainer<C2>::value, void>> +constexpr OutputIterator c_set_symmetric_difference(const C1& c1, const C2& c2, + OutputIterator output, + LessThan&& comp) { return std::set_symmetric_difference( container_algorithm_internal::c_begin(c1), container_algorithm_internal::c_end(c1), @@ -1606,8 +1586,7 @@ // Container-based version of the <algorithm> `std::push_heap()` function // to push a value onto a container heap. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_push_heap( - RandomAccessContainer& sequence) { +constexpr void c_push_heap(RandomAccessContainer& sequence) { std::push_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1615,8 +1594,7 @@ // Overload of c_push_heap() for performing a push operation on a heap using a // `comp` other than `operator<`. template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_push_heap( - RandomAccessContainer& sequence, LessThan&& comp) { +constexpr void c_push_heap(RandomAccessContainer& sequence, LessThan&& comp) { std::push_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1627,8 +1605,7 @@ // Container-based version of the <algorithm> `std::pop_heap()` function // to pop a value from a heap container. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_pop_heap( - RandomAccessContainer& sequence) { +constexpr void c_pop_heap(RandomAccessContainer& sequence) { std::pop_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1636,8 +1613,7 @@ // Overload of c_pop_heap() for performing a pop operation on a heap using a // `comp` other than `operator<`. template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_pop_heap( - RandomAccessContainer& sequence, LessThan&& comp) { +constexpr void c_pop_heap(RandomAccessContainer& sequence, LessThan&& comp) { std::pop_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1648,8 +1624,7 @@ // Container-based version of the <algorithm> `std::make_heap()` function // to make a container a heap. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_make_heap( - RandomAccessContainer& sequence) { +constexpr void c_make_heap(RandomAccessContainer& sequence) { std::make_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1657,8 +1632,7 @@ // Overload of c_make_heap() for performing heap comparisons using a // `comp` other than `operator<` template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_make_heap( - RandomAccessContainer& sequence, LessThan&& comp) { +constexpr void c_make_heap(RandomAccessContainer& sequence, LessThan&& comp) { std::make_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1669,8 +1643,7 @@ // Container-based version of the <algorithm> `std::sort_heap()` function // to sort a heap into ascending order (after which it is no longer a heap). template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort_heap( - RandomAccessContainer& sequence) { +constexpr void c_sort_heap(RandomAccessContainer& sequence) { std::sort_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1678,8 +1651,7 @@ // Overload of c_sort_heap() for performing heap comparisons using a // `comp` other than `operator<` template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_sort_heap( - RandomAccessContainer& sequence, LessThan&& comp) { +constexpr void c_sort_heap(RandomAccessContainer& sequence, LessThan&& comp) { std::sort_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1690,8 +1662,7 @@ // Container-based version of the <algorithm> `std::is_heap()` function // to check whether the given container is a heap. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_heap( - const RandomAccessContainer& sequence) { +constexpr bool c_is_heap(const RandomAccessContainer& sequence) { return std::is_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1699,8 +1670,8 @@ // Overload of c_is_heap() for performing heap comparisons using a // `comp` other than `operator<` template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_is_heap( - const RandomAccessContainer& sequence, LessThan&& comp) { +constexpr bool c_is_heap(const RandomAccessContainer& sequence, + LessThan&& comp) { return std::is_heap(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1711,9 +1682,8 @@ // Container-based version of the <algorithm> `std::is_heap_until()` function // to find the first element in a given container which is not in heap order. template <typename RandomAccessContainer> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<RandomAccessContainer> - c_is_heap_until(RandomAccessContainer& sequence) { +constexpr container_algorithm_internal::ContainerIter<RandomAccessContainer> +c_is_heap_until(RandomAccessContainer& sequence) { return std::is_heap_until(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1721,9 +1691,8 @@ // Overload of c_is_heap_until() for performing heap comparisons using a // `comp` other than `operator<` template <typename RandomAccessContainer, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 - container_algorithm_internal::ContainerIter<RandomAccessContainer> - c_is_heap_until(RandomAccessContainer& sequence, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<RandomAccessContainer> +c_is_heap_until(RandomAccessContainer& sequence, LessThan&& comp) { return std::is_heap_until(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1739,9 +1708,8 @@ // to return an iterator pointing to the element with the smallest value, using // `operator<` to make the comparisons. template <typename Sequence> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIter<Sequence> - c_min_element(Sequence& sequence) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_min_element( + Sequence& sequence) { return std::min_element(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1749,9 +1717,8 @@ // Overload of c_min_element() for performing a `comp` comparison other than // `operator<`. template <typename Sequence, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIter<Sequence> - c_min_element(Sequence& sequence, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_min_element( + Sequence& sequence, LessThan&& comp) { return std::min_element(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1763,9 +1730,8 @@ // to return an iterator pointing to the element with the largest value, using // `operator<` to make the comparisons. template <typename Sequence> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIter<Sequence> - c_max_element(Sequence& sequence) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_max_element( + Sequence& sequence) { return std::max_element(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence)); } @@ -1773,9 +1739,8 @@ // Overload of c_max_element() for performing a `comp` comparison other than // `operator<`. template <typename Sequence, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIter<Sequence> - c_max_element(Sequence& sequence, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIter<Sequence> c_max_element( + Sequence& sequence, LessThan&& comp) { return std::max_element(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<LessThan>(comp)); @@ -1788,9 +1753,8 @@ // smallest and largest values, respectively, using `operator<` to make the // comparisons. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIterPairType<C, C> - c_minmax_element(C& c) { +constexpr container_algorithm_internal::ContainerIterPairType<C, C> +c_minmax_element(C& c) { return std::minmax_element(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1798,9 +1762,8 @@ // Overload of c_minmax_element() for performing `comp` comparisons other than // `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 - container_algorithm_internal::ContainerIterPairType<C, C> - c_minmax_element(C& c, LessThan&& comp) { +constexpr container_algorithm_internal::ContainerIterPairType<C, C> +c_minmax_element(C& c, LessThan&& comp) { return std::minmax_element(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1818,8 +1781,8 @@ // that capital letters ("A-Z") have ASCII values less than lowercase letters // ("a-z"). template <typename Sequence1, typename Sequence2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_lexicographical_compare( - const Sequence1& sequence1, const Sequence2& sequence2) { +constexpr bool c_lexicographical_compare(const Sequence1& sequence1, + const Sequence2& sequence2) { return std::lexicographical_compare( container_algorithm_internal::c_begin(sequence1), container_algorithm_internal::c_end(sequence1), @@ -1830,8 +1793,9 @@ // Overload of c_lexicographical_compare() for performing a lexicographical // comparison using a `comp` operator instead of `operator<`. template <typename Sequence1, typename Sequence2, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_lexicographical_compare( - const Sequence1& sequence1, const Sequence2& sequence2, LessThan&& comp) { +constexpr bool c_lexicographical_compare(const Sequence1& sequence1, + const Sequence2& sequence2, + LessThan&& comp) { return std::lexicographical_compare( container_algorithm_internal::c_begin(sequence1), container_algorithm_internal::c_end(sequence1), @@ -1846,7 +1810,7 @@ // to rearrange a container's elements into the next lexicographically greater // permutation. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_next_permutation(C& c) { +constexpr bool c_next_permutation(C& c) { return std::next_permutation(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1854,8 +1818,7 @@ // Overload of c_next_permutation() for performing a lexicographical // comparison using a `comp` operator instead of `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_next_permutation(C& c, - LessThan&& comp) { +constexpr bool c_next_permutation(C& c, LessThan&& comp) { return std::next_permutation(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1867,7 +1830,7 @@ // to rearrange a container's elements into the next lexicographically lesser // permutation. template <typename C> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_prev_permutation(C& c) { +constexpr bool c_prev_permutation(C& c) { return std::prev_permutation(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c)); } @@ -1875,8 +1838,7 @@ // Overload of c_prev_permutation() for performing a lexicographical // comparison using a `comp` operator instead of `operator<`. template <typename C, typename LessThan> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool c_prev_permutation(C& c, - LessThan&& comp) { +constexpr bool c_prev_permutation(C& c, LessThan&& comp) { return std::prev_permutation(container_algorithm_internal::c_begin(c), container_algorithm_internal::c_end(c), std::forward<LessThan>(comp)); @@ -1892,8 +1854,7 @@ // to compute successive values of `value`, as if incremented with `++value` // after each element is written, and write them to the container. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 void c_iota(Sequence& sequence, - const T& value) { +constexpr void c_iota(Sequence& sequence, const T& value) { std::iota(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), value); } @@ -1908,8 +1869,7 @@ // std::decay_t<T>. As a user of this function you can casually read // this as "returns T by value" and assume it does the right thing. template <typename Sequence, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_accumulate( - const Sequence& sequence, T&& init) { +constexpr std::decay_t<T> c_accumulate(const Sequence& sequence, T&& init) { return std::accumulate(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<T>(init)); @@ -1918,8 +1878,8 @@ // Overload of c_accumulate() for using a binary operations other than // addition for computing the accumulation. template <typename Sequence, typename T, typename BinaryOp> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_accumulate( - const Sequence& sequence, T&& init, BinaryOp&& binary_op) { +constexpr std::decay_t<T> c_accumulate(const Sequence& sequence, T&& init, + BinaryOp&& binary_op) { return std::accumulate(container_algorithm_internal::c_begin(sequence), container_algorithm_internal::c_end(sequence), std::forward<T>(init), @@ -1935,8 +1895,8 @@ // std::decay_t<T>. As a user of this function you can casually read // this as "returns T by value" and assume it does the right thing. template <typename Sequence1, typename Sequence2, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_inner_product( - const Sequence1& factors1, const Sequence2& factors2, T&& sum) { +constexpr std::decay_t<T> c_inner_product(const Sequence1& factors1, + const Sequence2& factors2, T&& sum) { return std::inner_product(container_algorithm_internal::c_begin(factors1), container_algorithm_internal::c_end(factors1), container_algorithm_internal::c_begin(factors2), @@ -1948,9 +1908,9 @@ // the product between the two container's element pair). template <typename Sequence1, typename Sequence2, typename T, typename BinaryOp1, typename BinaryOp2> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 std::decay_t<T> c_inner_product( - const Sequence1& factors1, const Sequence2& factors2, T&& sum, - BinaryOp1&& op1, BinaryOp2&& op2) { +constexpr std::decay_t<T> c_inner_product(const Sequence1& factors1, + const Sequence2& factors2, T&& sum, + BinaryOp1&& op1, BinaryOp2&& op2) { return std::inner_product(container_algorithm_internal::c_begin(factors1), container_algorithm_internal::c_end(factors1), container_algorithm_internal::c_begin(factors2), @@ -1964,8 +1924,8 @@ // function to compute the difference between each element and the one preceding // it and write it to an iterator. template <typename InputSequence, typename OutputIt> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt -c_adjacent_difference(const InputSequence& input, OutputIt output_first) { +constexpr OutputIt c_adjacent_difference(const InputSequence& input, + OutputIt output_first) { return std::adjacent_difference(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output_first); @@ -1974,8 +1934,8 @@ // Overload of c_adjacent_difference() for using a binary operation other than // subtraction to compute the adjacent difference. template <typename InputSequence, typename OutputIt, typename BinaryOp> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt c_adjacent_difference( - const InputSequence& input, OutputIt output_first, BinaryOp&& op) { +constexpr OutputIt c_adjacent_difference(const InputSequence& input, + OutputIt output_first, BinaryOp&& op) { return std::adjacent_difference(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output_first, std::forward<BinaryOp>(op)); @@ -1988,8 +1948,8 @@ // to an iterator. The partial sum is the sum of all element values so far in // the sequence. template <typename InputSequence, typename OutputIt> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt -c_partial_sum(const InputSequence& input, OutputIt output_first) { +constexpr OutputIt c_partial_sum(const InputSequence& input, + OutputIt output_first) { return std::partial_sum(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output_first); @@ -1998,8 +1958,8 @@ // Overload of c_partial_sum() for using a binary operation other than addition // to compute the "partial sum". template <typename InputSequence, typename OutputIt, typename BinaryOp> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 OutputIt c_partial_sum( - const InputSequence& input, OutputIt output_first, BinaryOp&& op) { +constexpr OutputIt c_partial_sum(const InputSequence& input, + OutputIt output_first, BinaryOp&& op) { return std::partial_sum(container_algorithm_internal::c_begin(input), container_algorithm_internal::c_end(input), output_first, std::forward<BinaryOp>(op));
diff --git a/absl/algorithm/container_test.cc b/absl/algorithm/container_test.cc index 6bacb1e..6249e20 100644 --- a/absl/algorithm/container_test.cc +++ b/absl/algorithm/container_test.cc
@@ -42,6 +42,10 @@ #include "absl/random/random.h" #include "absl/types/span.h" +#ifdef __cpp_lib_span +#include <span> // NOLINT(build/c++20) +#endif + namespace { using ::testing::Each; @@ -76,6 +80,31 @@ bool Equals(int v1, int v2) { return v1 == v2; } bool IsOdd(int x) { return x % 2 != 0; } +TEST(Span, IsSpan) { + static_assert( + absl::container_algorithm_internal::IsSpan<absl::Span<int>>::value); + static_assert( + absl::container_algorithm_internal::IsSpan<const absl::Span<int>>::value); + static_assert(absl::container_algorithm_internal::IsSpan< + volatile absl::Span<int>>::value); + static_assert(absl::container_algorithm_internal::IsSpan< + const volatile absl::Span<int>>::value); + + static_assert( + !absl::container_algorithm_internal::IsSpan<absl::Span<int>&>::value); + static_assert( + !absl::container_algorithm_internal::IsSpan<absl::Span<int>&&>::value); + +#ifdef __cpp_lib_span + static_assert( + absl::container_algorithm_internal::IsSpan<std::span<int>>::value); + static_assert( + !absl::container_algorithm_internal::IsSpan<std::span<int>&>::value); + static_assert( + !absl::container_algorithm_internal::IsSpan<std::span<int>&&>::value); +#endif +} + TEST_F(NonMutatingTest, Distance) { EXPECT_EQ(container_.size(), static_cast<size_t>(absl::c_distance(container_))); @@ -1184,12 +1213,24 @@ EXPECT_THAT(actual, ElementsAre(1, 1, 1, 1, 1)); } +TEST(MutatingTest, FillWithRvalue) { + std::vector<int> actual(5); + absl::c_fill(absl::MakeSpan(actual), 1); + EXPECT_THAT(actual, ElementsAre(1, 1, 1, 1, 1)); +} + TEST(MutatingTest, FillN) { std::vector<int> actual(5, 0); absl::c_fill_n(actual, 2, 1); EXPECT_THAT(actual, ElementsAre(1, 1, 0, 0, 0)); } +TEST(MutatingTest, FillNWithRvalue) { + std::vector<int> actual(5, 0); + absl::c_fill_n(absl::MakeSpan(actual), 2, 1); + EXPECT_THAT(actual, ElementsAre(1, 1, 0, 0, 0)); +} + TEST(MutatingTest, Generate) { std::vector<int> actual(5); int x = 0; @@ -2536,15 +2577,15 @@ struct CanCopy : std::false_type {}; template <typename Container, typename Output> struct CanCopy<Container, Output, - absl::void_t<decltype(absl::c_copy(std::declval<Container>(), - std::declval<Output>()))>> + std::void_t<decltype(absl::c_copy(std::declval<Container>(), + std::declval<Output>()))>> : std::true_type {}; template <typename Container, typename Output, typename = void> struct CanCopyN : std::false_type {}; template <typename Container, typename Output> struct CanCopyN<Container, Output, - absl::void_t<decltype(absl::c_copy_n( + std::void_t<decltype(absl::c_copy_n( std::declval<Container>(), std::declval<ptrdiff_t>(), std::declval<Output>()))>> : std::true_type {}; @@ -2552,8 +2593,8 @@ struct CanMove : std::false_type {}; template <typename Container, typename Output> struct CanMove<Container, Output, - absl::void_t<decltype(absl::c_move(std::declval<Container>(), - std::declval<Output>()))>> + std::void_t<decltype(absl::c_move(std::declval<Container>(), + std::declval<Output>()))>> : std::true_type {}; TEST(CanCopyTest, CopyToMultiDimArray) { @@ -2606,4 +2647,29 @@ static_assert(!CanMove<Vec, AmbiguousType>::value, "Ambiguous types should not compile!"); } + +template <typename C, typename T, typename = void> +struct CanFill : std::false_type {}; + +template <typename C, typename T> +struct CanFill<C, T, + std::void_t<decltype(absl::c_fill(std::declval<C (*)()>()(), + std::declval<T (*)()>()()))>> + : std::true_type {}; + +TEST(CanFillTest, NonSpans) { + using T = int; + + struct AbslSpanSubclass : absl::Span<T> {}; + static_assert(!CanFill<std::vector<T>, T>::value, + "non-spans must not be allowed"); + static_assert(!CanFill<AbslSpanSubclass, T>::value, + "subclasses must not be allowed"); + +#ifdef __cpp_lib_span + struct StdSpanSubclass : std::span<T> {}; + static_assert(!CanFill<StdSpanSubclass, T>::value, + "std::span must not be allowed"); +#endif +} } // namespace
diff --git a/absl/base/BUILD.bazel b/absl/base/BUILD.bazel index 9548368..5bbe2f3 100644 --- a/absl/base/BUILD.bazel +++ b/absl/base/BUILD.bazel
@@ -62,7 +62,25 @@ ) cc_library( + name = "cpu_detect", + srcs = [ + "internal/cpu_detect.cc", + ], + hdrs = ["internal/cpu_detect.h"], + copts = ABSL_DEFAULT_COPTS, + linkopts = ABSL_DEFAULT_LINKOPTS, + visibility = [ + "//absl:__subpackages__", + "//absl:friends", + ], + deps = [ + ":config", + ], +) + +cc_library( name = "hardening", + srcs = ["internal/hardening.cc"], hdrs = [ "internal/hardening.h", ],
diff --git a/absl/base/BUILD.gn b/absl/base/BUILD.gn index ea59cd8..ee9201f 100644 --- a/absl/base/BUILD.gn +++ b/absl/base/BUILD.gn
@@ -19,8 +19,16 @@ visibility = [ "//third_party/abseil-cpp/absl/*" ] } +absl_source_set("cpu_detect") { + public = [ "internal/cpu_detect.h" ] + sources = [ "internal/cpu_detect.cc" ] + deps = [ ":config" ] + visibility = [ "//third_party/abseil-cpp/absl/*" ] +} + absl_source_set("hardening") { public = [ "internal/hardening.h" ] + sources = [ "internal/hardening.cc" ] deps = [ ":config", ":core_headers",
diff --git a/absl/base/CMakeLists.txt b/absl/base/CMakeLists.txt index 0608fe3..212db0d 100644 --- a/absl/base/CMakeLists.txt +++ b/absl/base/CMakeLists.txt
@@ -32,6 +32,21 @@ # Internal-only target, do not depend on directly. absl_cc_library( NAME + base_cpu_detect + HDRS + "internal/cpu_detect.h" + SRCS + "internal/cpu_detect.cc" + DEPS + absl::base + absl::config + COPTS + ${ABSL_DEFAULT_COPTS} +) + +# Internal-only target, do not depend on directly. +absl_cc_library( + NAME errno_saver HDRS "internal/errno_saver.h" @@ -46,6 +61,8 @@ hardening HDRS "internal/hardening.h" + SRCS + "internal/hardening.cc" DEPS absl::config absl::core_headers
diff --git a/absl/base/casts.h b/absl/base/casts.h index 928f409..1a85798 100644 --- a/absl/base/casts.h +++ b/absl/base/casts.h
@@ -176,16 +176,15 @@ #else // defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L -template < - typename Dest, typename Source, - typename std::enable_if<sizeof(Dest) == sizeof(Source) && - std::is_trivially_copyable<Source>::value && - std::is_trivially_copyable<Dest>::value +template <typename Dest, typename Source, + std::enable_if_t<sizeof(Dest) == sizeof(Source) && + std::is_trivially_copyable_v<Source> && + std::is_trivially_copyable_v<Dest> #if !ABSL_HAVE_BUILTIN(__builtin_bit_cast) - && std::is_default_constructible<Dest>::value + && std::is_default_constructible_v<Dest> #endif // !ABSL_HAVE_BUILTIN(__builtin_bit_cast) - , - int>::type = 0> + , + int> = 0> #if ABSL_HAVE_BUILTIN(__builtin_bit_cast) inline constexpr Dest bit_cast(const Source& source) { return __builtin_bit_cast(Dest, source); @@ -254,19 +253,19 @@ template <typename To, typename From> // use like this: down_cast<T*>(foo); [[nodiscard]] inline To down_cast(From* f) { // so we only accept pointers - static_assert(std::is_pointer<To>::value, "target type not a pointer"); + static_assert(std::is_pointer_v<To>, "target type not a pointer"); // dynamic_cast allows casting to the same type or a more cv-qualified // version of the same type without them being polymorphic. - if constexpr (!std::is_same<std::remove_cv_t<std::remove_pointer_t<To>>, - std::remove_cv_t<From>>::value) { - static_assert(std::is_polymorphic<From>::value, + if constexpr (!std::is_same_v<std::remove_cv_t<std::remove_pointer_t<To>>, + std::remove_cv_t<From>>) { + static_assert(std::is_polymorphic_v<From>, "source type must be polymorphic"); - static_assert(std::is_polymorphic<std::remove_pointer_t<To>>::value, + static_assert(std::is_polymorphic_v<std::remove_pointer_t<To>>, "target type must be polymorphic"); } static_assert( - std::is_convertible<std::remove_cv_t<std::remove_pointer_t<To>>*, - std::remove_cv_t<From>*>::value, + std::is_convertible_v<std::remove_cv_t<std::remove_pointer_t<To>>*, + std::remove_cv_t<From>*>, "target type not derived from source type"); absl::base_internal::ValidateDownCast<To>(f); @@ -285,20 +284,19 @@ template <typename To, typename From> [[nodiscard]] inline To down_cast(From& f) { - static_assert(std::is_lvalue_reference<To>::value, - "target type not a reference"); + static_assert(std::is_lvalue_reference_v<To>, "target type not a reference"); // dynamic_cast allows casting to the same type or a more cv-qualified // version of the same type without them being polymorphic. - if constexpr (!std::is_same<std::remove_cv_t<std::remove_reference_t<To>>, - std::remove_cv_t<From>>::value) { - static_assert(std::is_polymorphic<From>::value, + if constexpr (!std::is_same_v<std::remove_cv_t<std::remove_reference_t<To>>, + std::remove_cv_t<From>>) { + static_assert(std::is_polymorphic_v<From>, "source type must be polymorphic"); - static_assert(std::is_polymorphic<std::remove_reference_t<To>>::value, + static_assert(std::is_polymorphic_v<std::remove_reference_t<To>>, "target type must be polymorphic"); } static_assert( - std::is_convertible<std::remove_cv_t<std::remove_reference_t<To>>*, - std::remove_cv_t<From>*>::value, + std::is_convertible_v<std::remove_cv_t<std::remove_reference_t<To>>*, + std::remove_cv_t<From>*>, "target type not derived from source type"); absl::base_internal::ValidateDownCast<std::remove_reference_t<To>*>(
diff --git a/absl/base/config.h b/absl/base/config.h index d4a7bfb..4a35ff1 100644 --- a/absl/base/config.h +++ b/absl/base/config.h
@@ -493,34 +493,6 @@ #error "absl endian detection needs to be set up for your compiler" #endif -// macOS < 10.13 and iOS < 12 don't support <any>, <optional>, or <variant> -// because the libc++ shared library shipped on the system doesn't have the -// requisite exported symbols. See -// https://github.com/abseil/abseil-cpp/issues/207 and -// https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes -// -// libc++ spells out the availability requirements in the file -// llvm-project/libcxx/include/__config via the #define -// _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS. The set of versions has been -// modified a few times, via -// https://github.com/llvm/llvm-project/commit/7fb40e1569dd66292b647f4501b85517e9247953 -// and -// https://github.com/llvm/llvm-project/commit/0bc451e7e137c4ccadcd3377250874f641ca514a -// The second has the actually correct versions, thus, is what we copy here. -#if defined(__APPLE__) && \ - ((defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 101300) || \ - (defined(__ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_IPHONE_OS_VERSION_MIN_REQUIRED__ < 120000) || \ - (defined(__ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_WATCH_OS_VERSION_MIN_REQUIRED__ < 50000) || \ - (defined(__ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__) && \ - __ENVIRONMENT_TV_OS_VERSION_MIN_REQUIRED__ < 120000)) -#define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 1 -#else -#define ABSL_INTERNAL_APPLE_CXX17_TYPES_UNAVAILABLE 0 -#endif - // Deprecated macros for polyfill detection. #define ABSL_HAVE_STD_ANY 1 #define ABSL_USES_STD_ANY 1 @@ -854,27 +826,6 @@ #define ABSL_HAVE_CONSTANT_EVALUATED 1 #endif -// ABSL_INTERNAL_CONSTEXPR_SINCE_CXXYY is used to conditionally define constexpr -// for different C++ versions. -// -// These macros are an implementation detail and will be unconditionally removed -// once the minimum supported C++ version catches up to a given version. -// -// For this reason, this symbol is considered INTERNAL and code outside of -// Abseil must not use it. -#if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \ - ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L -#define ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 constexpr -#else -#define ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 -#endif -#if defined(ABSL_INTERNAL_CPLUSPLUS_LANG) && \ - ABSL_INTERNAL_CPLUSPLUS_LANG >= 202002L -#define ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 constexpr -#else -#define ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 -#endif - // ABSL_INTERNAL_EMSCRIPTEN_VERSION combines Emscripten's three version macros // into an integer that can be compared against. #ifdef ABSL_INTERNAL_EMSCRIPTEN_VERSION
diff --git a/absl/base/exception_safety_testing_test.cc b/absl/base/exception_safety_testing_test.cc index d615a38..5e98c5f 100644 --- a/absl/base/exception_safety_testing_test.cc +++ b/absl/base/exception_safety_testing_test.cc
@@ -936,8 +936,8 @@ TEST(ThrowingValueTraitsTest, RelationalOperators) { ThrowingValue<> a, b; - EXPECT_TRUE((std::is_convertible<decltype(a == b), bool>::value)); - EXPECT_TRUE((std::is_convertible<decltype(a != b), bool>::value)); + EXPECT_TRUE((std::is_convertible_v<decltype(a == b), bool>)); + EXPECT_TRUE((std::is_convertible_v<decltype(a != b), bool>)); EXPECT_TRUE((std::is_convertible<decltype(a < b), bool>::value)); EXPECT_TRUE((std::is_convertible<decltype(a <= b), bool>::value)); EXPECT_TRUE((std::is_convertible<decltype(a > b), bool>::value)); @@ -945,10 +945,10 @@ } TEST(ThrowingAllocatorTraitsTest, Assignablility) { - EXPECT_TRUE(std::is_move_assignable<ThrowingAllocator<int>>::value); - EXPECT_TRUE(std::is_copy_assignable<ThrowingAllocator<int>>::value); - EXPECT_TRUE(std::is_nothrow_move_assignable<ThrowingAllocator<int>>::value); - EXPECT_TRUE(std::is_nothrow_copy_assignable<ThrowingAllocator<int>>::value); + EXPECT_TRUE(std::is_move_assignable_v<ThrowingAllocator<int>>); + EXPECT_TRUE(std::is_copy_assignable_v<ThrowingAllocator<int>>); + EXPECT_TRUE(std::is_nothrow_move_assignable_v<ThrowingAllocator<int>>); + EXPECT_TRUE(std::is_nothrow_copy_assignable_v<ThrowingAllocator<int>>); } } // namespace
diff --git a/absl/crc/internal/cpu_detect.cc b/absl/base/internal/cpu_detect.cc similarity index 82% rename from absl/crc/internal/cpu_detect.cc rename to absl/base/internal/cpu_detect.cc index 86f55d0..c08637c 100644 --- a/absl/crc/internal/cpu_detect.cc +++ b/absl/base/internal/cpu_detect.cc
@@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -#include "absl/crc/internal/cpu_detect.h" +#include "absl/base/internal/cpu_detect.h" #include <cstdint> #include <optional> // IWYU pragma: keep @@ -42,6 +42,7 @@ // MSVC-equivalent __cpuid intrinsic declaration for clang-like compilers // for non-Windows build environments. extern void __cpuid(int[4], int); +extern void __cpuidex(int[4], int, int); #elif !defined(_WIN32) && !defined(_WIN64) // MSVC defines this function for us. // https://learn.microsoft.com/en-us/cpp/intrinsics/cpuid-cpuidex @@ -51,12 +52,18 @@ "=d"(cpu_info[3]) : "a"(info_type), "c"(0)); } +static void __cpuidex(int cpu_info[4], int info_type, int ecx) { + __asm__ volatile("cpuid \n\t" + : "=a"(cpu_info[0]), "=b"(cpu_info[1]), "=c"(cpu_info[2]), + "=d"(cpu_info[3]) + : "a"(info_type), "c"(ecx)); +} #endif // !defined(_WIN32) && !defined(_WIN64) #endif // defined(__x86_64__) || defined(_M_X64) namespace absl { ABSL_NAMESPACE_BEGIN -namespace crc_internal { +namespace base_internal { #if defined(__x86_64__) || defined(_M_X64) @@ -137,7 +144,7 @@ case 0x4f: // Broadwell case 0x56: // BroadwellDE return CpuType::kIntelBroadwell; - case 0x55: // Skylake Xeon + case 0x55: // Skylake Xeon if ((cpu_info[0] & 0x0f) < 5) { // stepping < 5 is skylake return CpuType::kIntelSkylakeXeon; } else { // stepping >= 5 is cascadelake @@ -152,7 +159,7 @@ case 0xcf: // Emerald Rapids return CpuType::kIntelEmeraldrapids; case 0xad: // Granite Rapids - return CpuType::kIntelGraniterapidsap; + return CpuType::kIntelGraniterapids; default: return CpuType::kUnknown; } @@ -271,18 +278,30 @@ switch (implementer) { case 0x41: switch (part_number) { - case 0xd0c: return CpuType::kArmNeoverseN1; - case 0xd40: return CpuType::kArmNeoverseV1; - case 0xd49: return CpuType::kArmNeoverseN2; - case 0xd4f: return CpuType::kArmNeoverseV2; - case 0xd8e: return CpuType::kArmNeoverseN3; + case 0xd0c: + return CpuType::kArmNeoverseN1; + case 0xd40: + return CpuType::kArmNeoverseV1; + case 0xd49: + return CpuType::kArmNeoverseN2; + case 0xd4f: { + uint64_t isar0 = 0; + ABSL_INTERNAL_AARCH64_ID_REG_READ(ID_AA64ISAR0_EL1, isar0); + if (((isar0 >> 60) & 0xf) == 0x0) { + return CpuType::kNvidiaGrace; + } + return CpuType::kArmNeoverseV2; + } + case 0xd8e: + return CpuType::kArmNeoverseN3; default: return CpuType::kUnknown; } break; case 0xc0: switch (part_number) { - case 0xac3: return CpuType::kAmpereSiryn; + case 0xac3: + return CpuType::kAmpereSiryn; default: return CpuType::kUnknown; } @@ -354,6 +373,47 @@ #endif -} // namespace crc_internal +// Returns how many hardware contexts per CPU exist. Note: AMD CPUs prior to Zen +// 2 (Rome, 2019) do not support CPUID leaf 0xb. We intentionally avoid falling +// back to leaf 1 ebx[23:16] because it reports total logical processors per +// package (not threads per core), which risks false positives on older +// multi-core non-SMT chips. Pre-Zen 2 AMD safely defaults to 1. +int NumContextsPerCPU() { +#if defined(__x86_64__) || defined(_M_X64) + int info[4]; + __cpuid(info, 0); + if (info[0] < 0xb) { + return 1; + } + + __cpuid(info, 1); + bool has_ht = (info[3] & (1 << 28)) != 0; + if (!has_ht) { + return 1; + } + + for (int sub_leaf = 0; sub_leaf < 4; ++sub_leaf) { + __cpuidex(info, 0xb, sub_leaf); + int level_type = (info[2] >> 8) & 0xff; + if (level_type == 0) { + break; + } + if (level_type == 1) { + int num_threads = info[1] & 0x0ffff; + if (num_threads >= 1) { + return num_threads; + } + } + } + + return 1; +#else + return 1; +#endif +} + +bool IsSMTEnabled() { return NumContextsPerCPU() > 1; } + +} // namespace base_internal ABSL_NAMESPACE_END } // namespace absl
diff --git a/absl/crc/internal/cpu_detect.h b/absl/base/internal/cpu_detect.h similarity index 80% rename from absl/crc/internal/cpu_detect.h rename to absl/base/internal/cpu_detect.h index e76a802..5ea76ec 100644 --- a/absl/crc/internal/cpu_detect.h +++ b/absl/base/internal/cpu_detect.h
@@ -12,14 +12,14 @@ // See the License for the specific language governing permissions and // limitations under the License. -#ifndef ABSL_CRC_INTERNAL_CPU_DETECT_H_ -#define ABSL_CRC_INTERNAL_CPU_DETECT_H_ +#ifndef ABSL_BASE_INTERNAL_CPU_DETECT_H_ +#define ABSL_BASE_INTERNAL_CPU_DETECT_H_ #include "absl/base/config.h" namespace absl { ABSL_NAMESPACE_BEGIN -namespace crc_internal { +namespace base_internal { // Enumeration of architectures that we have special-case tuning parameters for. // This set may change over time. @@ -38,7 +38,7 @@ kIntelIcelake, kIntelSapphirerapids, kIntelEmeraldrapids, - kIntelGraniterapidsap, + kIntelGraniterapids, kIntelSkylake, kIntelIvybridge, kIntelSandybridge, @@ -49,6 +49,7 @@ kArmNeoverseN2, kArmNeoverseV2, kArmNeoverseN3, + kNvidiaGrace, }; // Returns the type of host CPU this code is running on. Returns kUnknown if @@ -62,8 +63,15 @@ // tuning. bool SupportsArmCRC32PMULL(); -} // namespace crc_internal +// Returns whether the host CPU supports simultaneous multithreading (SMT) and +// if it is enabled. +bool IsSMTEnabled(); + +// Returns how many hardware contexts per CPU exist. +int NumContextsPerCPU(); + +} // namespace base_internal ABSL_NAMESPACE_END } // namespace absl -#endif // ABSL_CRC_INTERNAL_CPU_DETECT_H_ +#endif // ABSL_BASE_INTERNAL_CPU_DETECT_H_
diff --git a/absl/base/internal/exception_safety_testing.h b/absl/base/internal/exception_safety_testing.h index a2d128e..4cccf96 100644 --- a/absl/base/internal/exception_safety_testing.h +++ b/absl/base/internal/exception_safety_testing.h
@@ -845,10 +845,10 @@ template <size_t LazyContractsCount, typename LazyFactory, typename LazyOperation> -using EnableIfTestable = typename std::enable_if_t< - LazyContractsCount != 0 && - !std::is_same<LazyFactory, UninitializedT>::value && - !std::is_same<LazyOperation, UninitializedT>::value>; +using EnableIfTestable = + typename std::enable_if_t<LazyContractsCount != 0 && + !std::is_same_v<LazyFactory, UninitializedT> && + !std::is_same_v<LazyOperation, UninitializedT>>; template <typename Factory = UninitializedT, typename Operation = UninitializedT, typename... Contracts>
diff --git a/absl/base/internal/hardening.cc b/absl/base/internal/hardening.cc new file mode 100644 index 0000000..9b11b99 --- /dev/null +++ b/absl/base/internal/hardening.cc
@@ -0,0 +1,34 @@ +// +// Copyright 2026 The Abseil Authors. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "absl/base/internal/hardening.h" + +#include <atomic> + +#include "absl/base/config.h" +#include "absl/base/macros.h" + +namespace absl { +ABSL_NAMESPACE_BEGIN + +namespace base_internal { + +void SetAbslHardeningEnabled([[maybe_unused]] bool enabled) { +} + +} // namespace base_internal + +ABSL_NAMESPACE_END +} // namespace absl
diff --git a/absl/base/internal/hardening.h b/absl/base/internal/hardening.h index 31b25d9..fc86621 100644 --- a/absl/base/internal/hardening.h +++ b/absl/base/internal/hardening.h
@@ -32,6 +32,8 @@ namespace base_internal { +void SetAbslHardeningEnabled(bool enabled); + // `HardeningAssert` performs runtime checks when Abseil Hardening is enabled, // even if `NDEBUG` is defined. // @@ -45,7 +47,7 @@ ABSL_ASSERT(cond); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(!cond)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -59,7 +61,7 @@ ABSL_ASSERT(cond); #if (ABSL_OPTION_HARDENED == 1) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(!cond)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -69,7 +71,7 @@ ABSL_ASSERT(val1 > val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 > val2)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -79,7 +81,7 @@ ABSL_ASSERT(val1 >= val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 >= val2)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -89,7 +91,7 @@ ABSL_ASSERT(val1 < val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 < val2)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -99,7 +101,7 @@ ABSL_ASSERT(val1 <= val2); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (!ABSL_PREDICT_TRUE(val1 <= val2)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -113,7 +115,7 @@ ABSL_ASSERT(!container.empty()); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(container.empty())) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif } @@ -123,7 +125,7 @@ ABSL_ASSERT(ptr != nullptr); #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) if (ABSL_PREDICT_FALSE(ptr == nullptr)) { - base_internal::HardeningAbort(); + ABSL_INTERNAL_HARDENING_ABORT(); } #endif }
diff --git a/absl/base/internal/hardening_test.cc b/absl/base/internal/hardening_test.cc index cffa87c..f819331 100644 --- a/absl/base/internal/hardening_test.cc +++ b/absl/base/internal/hardening_test.cc
@@ -42,14 +42,28 @@ return hardened; } -TEST(HardeningTest, HardeningAssertSlow) { +class HardeningTest : public testing::Test { + public: + ~HardeningTest() override { + absl::base_internal::SetAbslHardeningEnabled(true); + } +}; + +class HardeningDeathTest : public testing::Test { + public: + ~HardeningDeathTest() override { + absl::base_internal::SetAbslHardeningEnabled(true); + } +}; + +TEST_F(HardeningTest, HardeningAssertSlow) { absl::base_internal::HardeningAssertSlow(true); if (!IsHardenedSlow()) { absl::base_internal::HardeningAssertSlow(false); } } -TEST(HardeningDeathTest, HardeningAssertSlow) { +TEST_F(HardeningDeathTest, HardeningAssertSlow) { #if GTEST_HAS_DEATH_TEST if (IsHardenedSlow()) { // The underlying mechanism of termination varies, and may include SIGILL @@ -59,107 +73,114 @@ #endif } -TEST(HardeningTest, HardeningAssertGT) { +TEST_F(HardeningTest, HardeningAssertGT) { absl::base_internal::HardeningAssertGT(1, 0); } -TEST(HardeningDeathTest, HardeningAssertGT) { +TEST_F(HardeningDeathTest, HardeningAssertGT) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertGT(1, 1), ""); EXPECT_DEATH(absl::base_internal::HardeningAssertGT(0, 1), ""); } #endif } -TEST(HardeningTest, HardeningAssertGE) { +TEST_F(HardeningTest, HardeningAssertGE) { absl::base_internal::HardeningAssertGE(1, 0); absl::base_internal::HardeningAssertGE(1, 1); } -TEST(HardeningDeathTest, HardeningAssertGE) { +TEST_F(HardeningDeathTest, HardeningAssertGE) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertGE(0, 1), ""); } #endif } -TEST(HardeningTest, HardeningAssertLT) { +TEST_F(HardeningTest, HardeningAssertLT) { absl::base_internal::HardeningAssertLT(0, 1); } -TEST(HardeningDeathTest, HardeningAssertLT) { +TEST_F(HardeningDeathTest, HardeningAssertLT) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertLT(1, 1), ""); EXPECT_DEATH(absl::base_internal::HardeningAssertLT(1, 0), ""); } #endif } -TEST(HardeningTest, HardeningAssertLE) { +TEST_F(HardeningTest, HardeningAssertLE) { absl::base_internal::HardeningAssertLE(0, 1); absl::base_internal::HardeningAssertLE(1, 1); } -TEST(HardeningDeathTest, HardeningAssertLE) { +TEST_F(HardeningDeathTest, HardeningAssertLE) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertLE(1, 0), ""); } #endif } -TEST(HardeningTest, HardeningAssertInBounds) { +TEST_F(HardeningTest, HardeningAssertInBounds) { absl::base_internal::HardeningAssertInBounds(0, 10); } -TEST(HardeningDeathTest, HardeningAssertInBounds) { +TEST_F(HardeningDeathTest, HardeningAssertInBounds) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertInBounds(10, 10), ""); } #endif } -TEST(HardeningTest, HardeningAssertNonEmpty) { +TEST_F(HardeningTest, HardeningAssertNonEmpty) { std::vector<int> v = {1}; absl::base_internal::HardeningAssertNonEmpty(v); } -TEST(HardeningDeathTest, HardeningAssertNonEmpty) { +TEST_F(HardeningDeathTest, HardeningAssertNonEmpty) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. std::vector<int> v = {}; + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertNonEmpty(v), ""); } #endif } -TEST(HardeningTest, HardeningAssertNonNull) { +TEST_F(HardeningTest, HardeningAssertNonNull) { int x = 1; absl::base_internal::HardeningAssertNonNull(&x); } -TEST(HardeningDeathTest, HardeningAssertNonNull) { +TEST_F(HardeningDeathTest, HardeningAssertNonNull) { #if GTEST_HAS_DEATH_TEST if (IsHardened()) { // The underlying mechanism of termination varies, and may include SIGILL // or SIGABRT. int *x = nullptr; + absl::base_internal::SetAbslHardeningEnabled(true); EXPECT_DEATH(absl::base_internal::HardeningAssertNonNull(x), ""); } #endif
diff --git a/absl/base/internal/strerror.cc b/absl/base/internal/strerror.cc index de91c05..519b93f 100644 --- a/absl/base/internal/strerror.cc +++ b/absl/base/internal/strerror.cc
@@ -39,7 +39,7 @@ // The type of `ret` is platform-specific; both of these branches must compile // either way but only one will execute on any given platform: auto ret = strerror_r(errnum, buf, buflen); - if (std::is_same<decltype(ret), int>::value) { + if (std::is_same_v<decltype(ret), int>) { // XSI `strerror_r`; `ret` is `int`: if (ret) *buf = '\0'; return buf;
diff --git a/absl/base/macros.h b/absl/base/macros.h index 225e2f3..38b5297 100644 --- a/absl/base/macros.h +++ b/absl/base/macros.h
@@ -28,6 +28,7 @@ #ifndef ABSL_BASE_MACROS_H_ #define ABSL_BASE_MACROS_H_ +#include <atomic> #include <cassert> #include <cstddef> @@ -135,7 +136,15 @@ // aborts the program in release mode (when NDEBUG is defined). The // implementation should abort the program as quickly as possible and ideally it // should not be possible to ignore the abort request. +#if defined(__CUDACC__) || defined(__CUDA_ARCH__) || defined(__CUDA__) +#define ABSL_INTERNAL_HARDENING_ABORT() \ + do { \ + ABSL_INTERNAL_IMMEDIATE_ABORT_IMPL(); \ + ABSL_INTERNAL_UNREACHABLE_IMPL(); \ + } while (false) +#else #define ABSL_INTERNAL_HARDENING_ABORT() ::absl::base_internal::HardeningAbort() +#endif // ABSL_HARDENING_ASSERT() // @@ -149,9 +158,12 @@ // See `ABSL_OPTION_HARDENED` in `absl/base/options.h` for more information on // hardened mode. #if (ABSL_OPTION_HARDENED == 1 || ABSL_OPTION_HARDENED == 2) && defined(NDEBUG) -#define ABSL_HARDENING_ASSERT(expr) \ - (ABSL_PREDICT_TRUE((expr)) ? static_cast<void>(0) \ - : ABSL_INTERNAL_HARDENING_ABORT()) + #define ABSL_HARDENING_ASSERT(expr) \ + do { \ + if (!ABSL_PREDICT_TRUE((expr))) { \ + ABSL_INTERNAL_HARDENING_ABORT(); \ + } \ + } while (false) #else #define ABSL_HARDENING_ASSERT(expr) ABSL_ASSERT(expr) #endif @@ -168,9 +180,7 @@ // See `ABSL_OPTION_HARDENED` in `absl/base/options.h` for more information on // hardened mode. #if ABSL_OPTION_HARDENED == 1 && defined(NDEBUG) -#define ABSL_HARDENING_ASSERT_SLOW(expr) \ - (ABSL_PREDICT_TRUE((expr)) ? static_cast<void>(0) \ - : ABSL_INTERNAL_HARDENING_ABORT()) +#define ABSL_HARDENING_ASSERT_SLOW(expr) ABSL_HARDENING_ASSERT(expr) #else #define ABSL_HARDENING_ASSERT_SLOW(expr) ABSL_ASSERT(expr) #endif
diff --git a/absl/base/no_destructor.h b/absl/base/no_destructor.h index 9d960ee..a0e990e 100644 --- a/absl/base/no_destructor.h +++ b/absl/base/no_destructor.h
@@ -115,9 +115,9 @@ // Forwards arguments to the T's constructor: calls T(args...). template <typename... Ts, // Disable this overload when it might collide with copy/move. - typename std::enable_if<!std::is_same<void(std::decay_t<Ts>&...), - void(NoDestructor&)>::value, - int>::type = 0> + std::enable_if_t<!std::is_same_v<void(std::decay_t<Ts>&...), + void(NoDestructor&)>, + int> = 0> explicit constexpr NoDestructor(Ts&&... args) : impl_(std::forward<Ts>(args)...) {} @@ -175,7 +175,7 @@ // potential once-init runtime initialization. It somewhat defeats the // purpose of NoDestructor in this case, but this makes the class more // friendly to generic code. - std::conditional_t<std::is_trivially_destructible<T>::value, DirectImpl, + std::conditional_t<std::is_trivially_destructible_v<T>, DirectImpl, PlacementImpl> impl_; };
diff --git a/absl/base/no_destructor_test.cc b/absl/base/no_destructor_test.cc index 316b213..161d86f 100644 --- a/absl/base/no_destructor_test.cc +++ b/absl/base/no_destructor_test.cc
@@ -60,21 +60,20 @@ TEST(NoDestructorTest, Noncopyable) { using T = absl::NoDestructor<int>; - EXPECT_FALSE((std::is_constructible<T, T>::value)); - EXPECT_FALSE((std::is_constructible<T, const T>::value)); - EXPECT_FALSE((std::is_constructible<T, T&>::value)); - EXPECT_FALSE((std::is_constructible<T, const T&>::value)); + EXPECT_FALSE((std::is_constructible_v<T, T>)); + EXPECT_FALSE((std::is_constructible_v<T, const T>)); + EXPECT_FALSE((std::is_constructible_v<T, T&>)); + EXPECT_FALSE((std::is_constructible_v<T, const T&>)); - EXPECT_FALSE((std::is_assignable<T&, T>::value)); - EXPECT_FALSE((std::is_assignable<T&, const T>::value)); - EXPECT_FALSE((std::is_assignable<T&, T&>::value)); - EXPECT_FALSE((std::is_assignable<T&, const T&>::value)); + EXPECT_FALSE((std::is_assignable_v<T&, T>)); + EXPECT_FALSE((std::is_assignable_v<T&, const T>)); + EXPECT_FALSE((std::is_assignable_v<T&, T&>)); + EXPECT_FALSE((std::is_assignable_v<T&, const T&>)); } TEST(NoDestructorTest, Interface) { - EXPECT_TRUE(std::is_trivially_destructible<absl::NoDestructor<Blob>>::value); - EXPECT_TRUE( - std::is_trivially_destructible<absl::NoDestructor<const Blob>>::value); + EXPECT_TRUE(std::is_trivially_destructible_v<absl::NoDestructor<Blob>>); + EXPECT_TRUE(std::is_trivially_destructible_v<absl::NoDestructor<const Blob>>); { absl::NoDestructor<Blob> b; // default c-tor // access: *, ->, get() @@ -173,12 +172,10 @@ TEST(NoDestructorTest, StaticPattern) { EXPECT_TRUE( - std::is_trivially_destructible<absl::NoDestructor<std::string>>::value); - EXPECT_TRUE( - std::is_trivially_destructible<absl::NoDestructor<MyArray>>::value); - EXPECT_TRUE( - std::is_trivially_destructible<absl::NoDestructor<MyVector>>::value); - EXPECT_TRUE(std::is_trivially_destructible<absl::NoDestructor<int>>::value); + std::is_trivially_destructible_v<absl::NoDestructor<std::string>>); + EXPECT_TRUE(std::is_trivially_destructible_v<absl::NoDestructor<MyArray>>); + EXPECT_TRUE(std::is_trivially_destructible_v<absl::NoDestructor<MyVector>>); + EXPECT_TRUE(std::is_trivially_destructible_v<absl::NoDestructor<int>>); EXPECT_EQ(*Str0(), ""); Str0()->append("foo"); @@ -198,7 +195,7 @@ TEST(NoDestructorTest, ClassTemplateArgumentDeduction) { absl::NoDestructor i(1); - static_assert(std::is_same<decltype(i), absl::NoDestructor<int>>::value, + static_assert(std::is_same_v<decltype(i), absl::NoDestructor<int>>, "Expected deduced type to be int."); }
diff --git a/absl/base/nullability_test.cc b/absl/base/nullability_test.cc index bccf1af..648b4be 100644 --- a/absl/base/nullability_test.cc +++ b/absl/base/nullability_test.cc
@@ -42,49 +42,49 @@ } TEST(PassThroughTest, PassesThroughRawPointerToInt) { - EXPECT_TRUE((std::is_same<int* absl_nonnull, int*>::value)); - EXPECT_TRUE((std::is_same<int* absl_nullable, int*>::value)); - EXPECT_TRUE((std::is_same<int* absl_nullability_unknown, int*>::value)); + EXPECT_TRUE((std::is_same_v<int* absl_nonnull, int*>)); + EXPECT_TRUE((std::is_same_v<int* absl_nullable, int*>)); + EXPECT_TRUE((std::is_same_v<int* absl_nullability_unknown, int*>)); } TEST(PassThroughTest, PassesThroughRawPointerToVoid) { - EXPECT_TRUE((std::is_same<void* absl_nonnull, void*>::value)); - EXPECT_TRUE((std::is_same<void* absl_nullable, void*>::value)); - EXPECT_TRUE((std::is_same<void* absl_nullability_unknown, void*>::value)); + EXPECT_TRUE((std::is_same_v<void* absl_nonnull, void*>)); + EXPECT_TRUE((std::is_same_v<void* absl_nullable, void*>)); + EXPECT_TRUE((std::is_same_v<void* absl_nullability_unknown, void*>)); } TEST(PassThroughTest, PassesThroughUniquePointerToInt) { using T = std::unique_ptr<int>; - EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullable T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value)); + EXPECT_TRUE((std::is_same_v<absl_nonnull T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullable T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullability_unknown T, T>)); } TEST(PassThroughTest, PassesThroughSharedPointerToInt) { using T = std::shared_ptr<int>; - EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullable T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value)); + EXPECT_TRUE((std::is_same_v<absl_nonnull T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullable T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullability_unknown T, T>)); } TEST(PassThroughTest, PassesThroughSharedPointerToVoid) { using T = std::shared_ptr<void>; - EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullable T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value)); + EXPECT_TRUE((std::is_same_v<absl_nonnull T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullable T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullability_unknown T, T>)); } TEST(PassThroughTest, PassesThroughPointerToMemberObject) { using T = decltype(&std::pair<int, int>::first); - EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullable T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value)); + EXPECT_TRUE((std::is_same_v<absl_nonnull T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullable T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullability_unknown T, T>)); } TEST(PassThroughTest, PassesThroughPointerToMemberFunction) { using T = decltype(&std::unique_ptr<int>::reset); - EXPECT_TRUE((std::is_same<absl_nonnull T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullable T, T>::value)); - EXPECT_TRUE((std::is_same<absl_nullability_unknown T, T>::value)); + EXPECT_TRUE((std::is_same_v<absl_nonnull T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullable T, T>)); + EXPECT_TRUE((std::is_same_v<absl_nullability_unknown T, T>)); } } // namespace
diff --git a/absl/cleanup/cleanup_test.cc b/absl/cleanup/cleanup_test.cc index 52774d7..0d407b2 100644 --- a/absl/cleanup/cleanup_test.cc +++ b/absl/cleanup/cleanup_test.cc
@@ -28,7 +28,7 @@ template <typename Type1, typename Type2> constexpr bool IsSame() { - return (std::is_same<Type1, Type2>::value); + return (std::is_same_v<Type1, Type2>); } struct IdentityFactory {
diff --git a/absl/cleanup/internal/cleanup.h b/absl/cleanup/internal/cleanup.h index 0a6c3ee..f078323 100644 --- a/absl/cleanup/internal/cleanup.h +++ b/absl/cleanup/internal/cleanup.h
@@ -33,13 +33,12 @@ template <typename Arg, typename... Args> constexpr bool WasDeduced() { - return (std::is_same<cleanup_internal::Tag, Arg>::value) && - (sizeof...(Args) == 0); + return (std::is_same_v<cleanup_internal::Tag, Arg>) && (sizeof...(Args) == 0); } template <typename Callback> constexpr bool ReturnsVoid() { - return (std::is_same<std::invoke_result_t<Callback>, void>::value); + return (std::is_same_v<std::invoke_result_t<Callback>, void>); } template <typename Callback>
diff --git a/absl/container/btree_test.cc b/absl/container/btree_test.cc index 1bae02e..8668777 100644 --- a/absl/container/btree_test.cc +++ b/absl/container/btree_test.cc
@@ -1097,9 +1097,9 @@ template <typename Btree> constexpr static bool FieldTypeEqualsSlotType() { - return std::is_same< + return std::is_same_v< typename btree_node<typename Btree::params_type>::field_type, - typename btree_node<typename Btree::params_type>::slot_type>::value; + typename btree_node<typename Btree::params_type>::slot_type>; } }; @@ -1237,16 +1237,16 @@ void AssertKeyCompareStringAdapted() { using Adapted = typename key_compare_adapter<Compare, Key>::type; static_assert( - std::is_same<Adapted, StringBtreeDefaultLess>::value || - std::is_same<Adapted, StringBtreeDefaultGreater>::value, + std::is_same_v<Adapted, StringBtreeDefaultLess> || + std::is_same_v<Adapted, StringBtreeDefaultGreater>, "key_compare_adapter should have string-adapted this comparator."); } template <typename Compare, typename Key> void AssertKeyCompareNotStringAdapted() { using Adapted = typename key_compare_adapter<Compare, Key>::type; static_assert( - !std::is_same<Adapted, StringBtreeDefaultLess>::value && - !std::is_same<Adapted, StringBtreeDefaultGreater>::value, + !std::is_same_v<Adapted, StringBtreeDefaultLess> && + !std::is_same_v<Adapted, StringBtreeDefaultGreater>, "key_compare_adapter shouldn't have string-adapted this comparator."); } @@ -2804,16 +2804,12 @@ TEST(Btree, SetIteratorsAreConst) { using Set = absl::btree_set<int>; - EXPECT_TRUE( - (std::is_same<typename Set::iterator::reference, const int &>::value)); - EXPECT_TRUE( - (std::is_same<typename Set::iterator::pointer, const int *>::value)); + EXPECT_TRUE((std::is_same_v<typename Set::iterator::reference, const int&>)); + EXPECT_TRUE((std::is_same_v<typename Set::iterator::pointer, const int*>)); using MSet = absl::btree_multiset<int>; - EXPECT_TRUE( - (std::is_same<typename MSet::iterator::reference, const int &>::value)); - EXPECT_TRUE( - (std::is_same<typename MSet::iterator::pointer, const int *>::value)); + EXPECT_TRUE((std::is_same_v<typename MSet::iterator::reference, const int&>)); + EXPECT_TRUE((std::is_same_v<typename MSet::iterator::pointer, const int*>)); } TEST(Btree, AllocConstructor) {
diff --git a/absl/container/btree_test.h b/absl/container/btree_test.h index 6249080..79c3d95 100644 --- a/absl/container/btree_test.h +++ b/absl/container/btree_test.h
@@ -19,6 +19,7 @@ #include <cassert> #include <random> #include <string> +#include <type_traits> #include <utility> #include <vector> @@ -35,7 +36,7 @@ // Like remove_const but propagates the removal through std::pair. template <typename T> struct remove_pair_const { - using type = typename std::remove_const<T>::type; + using type = std::remove_const_t<T>; }; template <typename T, typename U> struct remove_pair_const<std::pair<T, U> > {
diff --git a/absl/container/chunked_queue.h b/absl/container/chunked_queue.h index ff81447..8503825 100644 --- a/absl/container/chunked_queue.h +++ b/absl/container/chunked_queue.h
@@ -173,10 +173,9 @@ using iterator_category = std::forward_iterator_tag; using value_type = typename AllocatorTraits::value_type; using difference_type = typename AllocatorTraits::difference_type; - using pointer = - typename std::conditional<std::is_const<CT>::value, - typename AllocatorTraits::const_pointer, - typename AllocatorTraits::pointer>::type; + using pointer = std::conditional_t<std::is_const_v<CT>, + typename AllocatorTraits::const_pointer, + typename AllocatorTraits::pointer>; using reference = CT&; basic_iterator() = default;
diff --git a/absl/container/chunked_queue_test.cc b/absl/container/chunked_queue_test.cc index a66d0c2..bee7e03 100644 --- a/absl/container/chunked_queue_test.cc +++ b/absl/container/chunked_queue_test.cc
@@ -525,8 +525,8 @@ TEST(ChunkedQueue, IteratorConversion) { using ConstIter = absl::chunked_queue<int64_t>::const_iterator; using Iter = absl::chunked_queue<int64_t>::iterator; - EXPECT_FALSE((std::is_convertible<ConstIter, Iter>::value)); - EXPECT_TRUE((std::is_convertible<Iter, ConstIter>::value)); + EXPECT_FALSE((std::is_convertible_v<ConstIter, Iter>)); + EXPECT_TRUE((std::is_convertible_v<Iter, ConstIter>)); absl::chunked_queue<int64_t> q; ConstIter it1 = q.begin(); ConstIter it2 = q.cbegin(); @@ -534,7 +534,7 @@ it1 = q.end(); it2 = q.cend(); it3 = q.end(); - EXPECT_FALSE((std::is_assignable<Iter, ConstIter>::value)); + EXPECT_FALSE((std::is_assignable_v<Iter, ConstIter>)); } struct TestEntry {
diff --git a/absl/container/fixed_array.h b/absl/container/fixed_array.h index 77949bf..48ac57f 100644 --- a/absl/container/fixed_array.h +++ b/absl/container/fixed_array.h
@@ -79,7 +79,7 @@ template <typename T, size_t N = kFixedArrayUseDefault, typename A = std::allocator<T>> class ABSL_ATTRIBUTE_WARN_UNUSED FixedArray { - static_assert(!std::is_array<T>::value || std::extent<T>::value > 0, + static_assert(!std::is_array_v<T> || std::extent_v<T> > 0, "Arrays with unknown bounds cannot be used with FixedArray."); static constexpr size_t kInlineBytesDefault = 256; @@ -89,15 +89,15 @@ using EnableIfInputIterator = std::enable_if_t<base_internal::IsAtLeastInputIterator<Iterator>::value>; static constexpr bool NoexceptCopyable() { - return std::is_nothrow_copy_constructible<StorageElement>::value && + return std::is_nothrow_copy_constructible_v<StorageElement> && absl::allocator_is_nothrow<allocator_type>::value; } static constexpr bool NoexceptMovable() { - return std::is_nothrow_move_constructible<StorageElement>::value && + return std::is_nothrow_move_constructible_v<StorageElement> && absl::allocator_is_nothrow<allocator_type>::value; } static constexpr bool DefaultConstructorIsNonTrivial() { - return !std::is_trivially_default_constructible<StorageElement>::value; + return !std::is_trivially_default_constructible_v<StorageElement>; } public: @@ -416,14 +416,14 @@ // will always overflow destination buffer [-Werror] // template <typename OuterT, typename InnerT = std::remove_extent_t<OuterT>, - size_t InnerN = std::extent<OuterT>::value> + size_t InnerN = std::extent_v<OuterT>> struct StorageElementWrapper { InnerT array[InnerN]; }; using StorageElement = - std::conditional_t<std::is_array<value_type>::value, - StorageElementWrapper<value_type>, value_type>; + std::conditional_t<std::is_array_v<value_type>, + StorageElementWrapper<value_type>, value_type>; static pointer AsValueType(pointer ptr) { return ptr; } static pointer AsValueType(StorageElementWrapper<value_type>* ptr) {
diff --git a/absl/container/flat_hash_map_test.cc b/absl/container/flat_hash_map_test.cc index 0839b00..effbae3 100644 --- a/absl/container/flat_hash_map_test.cc +++ b/absl/container/flat_hash_map_test.cc
@@ -119,11 +119,11 @@ TEST(FlatHashMap, Relocatability) { static_assert(absl::is_trivially_relocatable<int>::value); static_assert( - std::is_same<decltype(absl::container_internal::FlatHashMapPolicy< - int, int>::transfer<std::allocator<char>>(nullptr, - nullptr, - nullptr)), - std::true_type>::value); + std::is_same_v< + decltype(absl::container_internal::FlatHashMapPolicy< + int, int>::transfer<std::allocator<char>>(nullptr, nullptr, + nullptr)), + std::true_type>); struct NonRelocatable { NonRelocatable() = default; @@ -134,11 +134,11 @@ EXPECT_FALSE(absl::is_trivially_relocatable<NonRelocatable>::value); EXPECT_TRUE( - (std::is_same<decltype(absl::container_internal::FlatHashMapPolicy< - int, NonRelocatable>:: - transfer<std::allocator<char>>(nullptr, nullptr, - nullptr)), - std::false_type>::value)); + (std::is_same_v<decltype(absl::container_internal::FlatHashMapPolicy< + int, NonRelocatable>:: + transfer<std::allocator<char>>( + nullptr, nullptr, nullptr)), + std::false_type>)); } // gcc becomes unhappy if this is inside the method, so pull it out here.
diff --git a/absl/container/inlined_vector.h b/absl/container/inlined_vector.h index 020e37f..8132564 100644 --- a/absl/container/inlined_vector.h +++ b/absl/container/inlined_vector.h
@@ -193,8 +193,8 @@ // allocator doesn't do anything fancy, and there is nothing on the heap // then we know it is legal for us to simply memcpy the other vector's // inlined bytes to form our copy of its elements. - if (std::is_trivially_copy_constructible<value_type>::value && - std::is_same<A, std::allocator<value_type>>::value && + if (std::is_trivially_copy_constructible_v<value_type> && + std::is_same_v<A, std::allocator<value_type>> && !other.storage_.GetIsAllocated()) { storage_.MemcpyFrom(other.storage_); return; @@ -219,7 +219,7 @@ // or `value_type`'s move constructor is specified as `noexcept`. InlinedVector(InlinedVector&& other) noexcept( absl::allocator_is_nothrow<allocator_type>::value || - std::is_nothrow_move_constructible<value_type>::value) + std::is_nothrow_move_constructible_v<value_type>) : storage_(other.storage_.GetAllocator()) { // Fast path: if the value type can be trivially relocated (i.e. moved from // and destroyed), and we know the allocator doesn't do anything fancy, then @@ -227,7 +227,7 @@ // and remove its own reference to them. It's as if we had individually // move-constructed each value and then destroyed the original. if (absl::is_trivially_relocatable<value_type>::value && - std::is_same<A, std::allocator<value_type>>::value) { + std::is_same_v<A, std::allocator<value_type>>) { storage_.MemcpyFrom(other.storage_); other.storage_.SetInlinedSize(0); return; @@ -273,7 +273,7 @@ // and remove its own reference to them. It's as if we had individually // move-constructed each value and then destroyed the original. if (absl::is_trivially_relocatable<value_type>::value && - std::is_same<A, std::allocator<value_type>>::value) { + std::is_same_v<A, std::allocator<value_type>>) { storage_.MemcpyFrom(other.storage_); other.storage_.SetInlinedSize(0); return; @@ -858,8 +858,8 @@ // Assumption check: we shouldn't be told to use memcpy to implement move // assignment unless we have trivially destructible elements and an // allocator that does nothing fancy. - static_assert(std::is_trivially_destructible<value_type>::value, ""); - static_assert(std::is_same<A, std::allocator<value_type>>::value, ""); + static_assert(std::is_trivially_destructible_v<value_type>, ""); + static_assert(std::is_same_v<A, std::allocator<value_type>>, ""); // Throw away our existing heap allocation, if any. There is no need to // destroy the existing elements one by one because we know they are
diff --git a/absl/container/inlined_vector_test.cc b/absl/container/inlined_vector_test.cc index ba96be3..56edf09 100644 --- a/absl/container/inlined_vector_test.cc +++ b/absl/container/inlined_vector_test.cc
@@ -24,6 +24,7 @@ #include <sstream> #include <stdexcept> #include <string> +#include <type_traits> #include <utility> #include <vector> @@ -475,16 +476,16 @@ v.emplace(v.begin(), MoveOnly{}); } TEST(InlinedVectorTest, Noexcept) { - EXPECT_TRUE(std::is_nothrow_move_constructible<IntVec>::value); - EXPECT_TRUE((std::is_nothrow_move_constructible< - absl::InlinedVector<MoveOnly, 2>>::value)); + EXPECT_TRUE(std::is_nothrow_move_constructible_v<IntVec>); + EXPECT_TRUE( + (std::is_nothrow_move_constructible_v<absl::InlinedVector<MoveOnly, 2>>)); struct MoveCanThrow { MoveCanThrow(MoveCanThrow&&) {} }; EXPECT_EQ(absl::default_allocator_is_nothrow::value, - (std::is_nothrow_move_constructible< - absl::InlinedVector<MoveCanThrow, 2>>::value)); + (std::is_nothrow_move_constructible_v< + absl::InlinedVector<MoveCanThrow, 2>>)); } TEST(InlinedVectorTest, EmplaceBack) {
diff --git a/absl/container/internal/btree.h b/absl/container/internal/btree.h index 2e53db6..5d84bc6 100644 --- a/absl/container/internal/btree.h +++ b/absl/container/internal/btree.h
@@ -171,7 +171,7 @@ }; // See below comments for checked_compare. -template <typename Compare, bool is_class = std::is_class<Compare>::value> +template <typename Compare, bool is_class = std::is_class_v<Compare>> struct checked_compare_base : Compare { using Compare::Compare; explicit checked_compare_base(Compare c) : Compare(std::move(c)) {} @@ -232,11 +232,11 @@ // Allow converting to Compare for use in key_comp()/value_comp(). explicit operator Compare() const { return comp(); } - template <typename T, typename U, - std::enable_if_t< - std::is_same<bool, compare_result_t<Compare, T, U>>::value, - int> = 0> - bool operator()(const T &lhs, const U &rhs) const { + template < + typename T, typename U, + std::enable_if_t<std::is_same_v<bool, compare_result_t<Compare, T, U>>, + int> = 0> + bool operator()(const T& lhs, const U& rhs) const { // NOTE: if any of these assertions fail, then the comparator does not // establish a strict-weak-ordering (see // https://en.cppreference.com/w/cpp/named_req/Compare). @@ -249,10 +249,10 @@ template < typename T, typename U, - std::enable_if_t<std::is_convertible<compare_result_t<Compare, T, U>, - absl::weak_ordering>::value, - int> = 0> - absl::weak_ordering operator()(const T &lhs, const U &rhs) const { + std::enable_if_t<std::is_convertible_v<compare_result_t<Compare, T, U>, + absl::weak_ordering>, + int> = 0> + absl::weak_ordering operator()(const T& lhs, const U& rhs) const { // NOTE: if any of these assertions fail, then the comparator does not // establish a strict-weak-ordering (see // https://en.cppreference.com/w/cpp/named_req/Compare). @@ -273,7 +273,7 @@ } }; using type = std::conditional_t< - std::is_base_of<BtreeTestOnlyCheckedCompareOptOutBase, Compare>::value, + std::is_base_of_v<BtreeTestOnlyCheckedCompareOptOutBase, Compare>, Compare, checked_compare>; }; @@ -342,8 +342,8 @@ template <typename Compare, typename Key> constexpr bool compare_has_valid_result_type() { using compare_result_type = compare_result_t<Compare, Key, Key>; - return std::is_same<compare_result_type, bool>::value || - std::is_convertible<compare_result_type, absl::weak_ordering>::value; + return std::is_same_v<compare_result_type, bool> || + std::is_convertible_v<compare_result_type, absl::weak_ordering>; } template <typename original_key_compare, typename value_type> @@ -384,8 +384,8 @@ typename key_compare_adapter<Compare, Key>::type>; static constexpr bool kIsKeyCompareStringAdapted = - std::is_same<key_compare, StringBtreeDefaultLess>::value || - std::is_same<key_compare, StringBtreeDefaultGreater>::value; + std::is_same_v<key_compare, StringBtreeDefaultLess> || + std::is_same_v<key_compare, StringBtreeDefaultGreater>; static constexpr bool kIsKeyCompareTransparent = IsTransparent<original_key_compare>::value || kIsKeyCompareStringAdapted; @@ -423,9 +423,9 @@ // that we know has the same equivalence classes for all lookup types. template <typename LookupKey> constexpr static bool can_have_multiple_equivalent_keys() { - return IsMulti || (IsTransparent<key_compare>::value && - !std::is_same<LookupKey, Key>::value && - !kIsKeyCompareStringAdapted); + return IsMulti || + (IsTransparent<key_compare>::value && + !std::is_same_v<LookupKey, Key> && !kIsKeyCompareStringAdapted); } enum { @@ -519,15 +519,14 @@ // - Otherwise, choose binary. // TODO(ezb): Might make sense to add condition(s) based on node-size. using use_linear_search = std::integral_constant< - bool, has_linear_node_search_preference<original_key_compare>::value - ? prefers_linear_node_search<original_key_compare>::value - : has_linear_node_search_preference<key_type>::value - ? prefers_linear_node_search<key_type>::value - : std::is_arithmetic<key_type>::value && - (std::is_same<std::less<key_type>, - original_key_compare>::value || - std::is_same<std::greater<key_type>, - original_key_compare>::value)>; + bool, + has_linear_node_search_preference<original_key_compare>::value + ? prefers_linear_node_search<original_key_compare>::value + : has_linear_node_search_preference<key_type>::value + ? prefers_linear_node_search<key_type>::value + : std::is_arithmetic_v<key_type> && + (std::is_same_v<std::less<key_type>, original_key_compare> || + std::is_same_v<std::greater<key_type>, original_key_compare>)>; // This class is organized by absl::container_internal::Layout as if it had // the following structure: @@ -898,8 +897,7 @@ // the whole tree so that this is constant time. template <typename Compare> bool is_ordered_correctly(field_type i, const Compare &comp) const { - if (std::is_base_of<BtreeTestOnlyCheckedCompareOptOutBase, - Compare>::value || + if (std::is_base_of_v<BtreeTestOnlyCheckedCompareOptOutBase, Compare> || params_type::kIsKeyCompareStringAdapted) { return true; } @@ -1112,7 +1110,7 @@ using is_map_container = typename params_type::is_map_container; using node_type = Node; - using normal_node = typename std::remove_const<Node>::type; + using normal_node = std::remove_const_t<Node>; using const_node = const Node; using normal_pointer = typename params_type::pointer; using normal_reference = typename params_type::reference; @@ -1147,11 +1145,11 @@ // NOTE: this SFINAE allows for implicit conversions from iterator to // const_iterator, but it specifically avoids hiding the copy constructor so // that the trivial one will be used when possible. - template <typename N, typename R, typename P, - std::enable_if_t< - std::is_same<btree_iterator<N, R, P>, iterator>::value && - std::is_same<btree_iterator, const_iterator>::value, - int> = 0> + template < + typename N, typename R, typename P, + std::enable_if_t<std::is_same_v<btree_iterator<N, R, P>, iterator> && + std::is_same_v<btree_iterator, const_iterator>, + int> = 0> btree_iterator(const btree_iterator<N, R, P> other) // NOLINT : btree_iterator_generation_info(other), node_(other.node_), @@ -1259,12 +1257,12 @@ // non-const methods and the container owns the nodes. template <typename N, typename R, typename P, std::enable_if_t< - std::is_same<btree_iterator<N, R, P>, const_iterator>::value && - std::is_same<btree_iterator, iterator>::value, + std::is_same_v<btree_iterator<N, R, P>, const_iterator> && + std::is_same_v<btree_iterator, iterator>, int> = 0> explicit btree_iterator(const btree_iterator<N, R, P> other) : btree_iterator_generation_info(other.generation()), - node_(const_cast<node_type *>(other.node_)), + node_(const_cast<node_type*>(other.node_)), position_(other.position_) {} bool Equals(const const_iterator other) const { @@ -2288,9 +2286,9 @@ template <typename P> template <typename Btree> void btree<P>::copy_or_move_values_in_order(Btree &other) { - static_assert(std::is_same<btree, Btree>::value || - std::is_same<const btree, Btree>::value, - "Btree type must be same or const."); + static_assert( + std::is_same_v<btree, Btree> || std::is_same_v<const btree, Btree>, + "Btree type must be same or const."); assert(empty()); // We can avoid key comparisons because we know the order of the @@ -2308,11 +2306,11 @@ template <typename P> constexpr bool btree<P>::static_assert_validation() { - static_assert(std::is_nothrow_copy_constructible<key_compare>::value, + static_assert(std::is_nothrow_copy_constructible_v<key_compare>, "Key comparison must be nothrow copy constructible"); - static_assert(std::is_nothrow_copy_constructible<allocator_type>::value, + static_assert(std::is_nothrow_copy_constructible_v<allocator_type>, "Allocator must be nothrow copy constructible"); - static_assert(std::is_trivially_copyable<iterator>::value, + static_assert(std::is_trivially_copyable_v<iterator>, "iterator not trivially copyable."); // Note: We assert that kTargetValues, which is computed from
diff --git a/absl/container/internal/btree_container.h b/absl/container/internal/btree_container.h index d4ce523..2bd98c6 100644 --- a/absl/container/internal/btree_container.h +++ b/absl/container/internal/btree_container.h
@@ -88,14 +88,14 @@ btree_container(const btree_container &other, const allocator_type &alloc) : tree_(other.tree_, alloc) {} - btree_container(btree_container &&other) noexcept( - std::is_nothrow_move_constructible<Tree>::value) = default; + btree_container(btree_container&& other) noexcept( + std::is_nothrow_move_constructible_v<Tree>) = default; btree_container(btree_container &&other, const allocator_type &alloc) : tree_(std::move(other.tree_), alloc) {} btree_container &operator=(const btree_container &other) = default; - btree_container &operator=(btree_container &&other) noexcept( - std::is_nothrow_move_assignable<Tree>::value) = default; + btree_container& operator=(btree_container&& other) noexcept( + std::is_nothrow_move_assignable_v<Tree>) = default; // Iterator routines. iterator begin() ABSL_ATTRIBUTE_LIFETIME_BOUND { return tree_.begin(); } @@ -411,16 +411,15 @@ // Merge routines. // Moves elements from `src` into `this`. If the element already exists in // `this`, it is left unmodified in `src`. - template < - typename T, - typename std::enable_if_t< - std::conjunction< - std::is_same<value_type, typename T::value_type>, - std::is_same<allocator_type, typename T::allocator_type>, - std::is_same<typename params_type::is_map_container, - typename T::params_type::is_map_container>>::value, - int> = 0> - void merge(btree_container<T> &src) { // NOLINT + template <typename T, + typename std::enable_if_t< + std::conjunction_v< + std::is_same<value_type, typename T::value_type>, + std::is_same<allocator_type, typename T::allocator_type>, + std::is_same<typename params_type::is_map_container, + typename T::params_type::is_map_container>>, + int> = 0> + void merge(btree_container<T>& src) { // NOLINT for (auto src_it = src.begin(); src_it != src.end();) { if (insert(std::move(params_type::element(src_it.slot()))).second) { src_it = src.erase(src_it); @@ -430,16 +429,15 @@ } } - template < - typename T, - typename std::enable_if_t< - std::conjunction< - std::is_same<value_type, typename T::value_type>, - std::is_same<allocator_type, typename T::allocator_type>, - std::is_same<typename params_type::is_map_container, - typename T::params_type::is_map_container>>::value, - int> = 0> - void merge(btree_container<T> &&src) { + template <typename T, + typename std::enable_if_t< + std::conjunction_v< + std::is_same<value_type, typename T::value_type>, + std::is_same<allocator_type, typename T::allocator_type>, + std::is_same<typename params_type::is_map_container, + typename T::params_type::is_map_container>>, + int> = 0> + void merge(btree_container<T>&& src) { merge(src); } }; @@ -501,7 +499,7 @@ IfRRef<int KQual>::AddPtr<K>, \ IfRRef<int MQual>::AddPtr<M>>>()), \ ABSL_INTERNAL_SINGLE_ARG( \ - int &..., \ + int&..., \ decltype(EnableIf<LifetimeBoundKV<K, KValue, M, MValue>>()) = \ 0))> \ decltype(auto) Func( \ @@ -515,7 +513,7 @@ __VA_ARGS__ std::forward<decltype(k)>(k), \ std::forward<decltype(obj)>(obj)); \ } \ - friend struct std::enable_if<false> /* just to force a semicolon */ + static_assert(true, "this assertion forces a semicolon") // Insertion routines. // Note: the nullptr template arguments and extra `const M&` overloads allow // for supporting bitfield arguments. @@ -604,17 +602,16 @@ decltype(EnableIf<LifetimeBoundK< \ K, KValue, IfRRef<int KQual>::AddPtr<K>>>()) = 0, \ class... Args), \ - std::enable_if_t<!std::is_convertible<K, const_iterator>::value, int> = \ - 0> \ + std::enable_if_t<!std::is_convertible_v<K, const_iterator>, int> = 0> \ decltype(auto) Func( \ __VA_ARGS__ key_arg<K> KQual k ABSL_INTERNAL_IF_##KValue( \ ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)), \ - Args &&...args) ABSL_ATTRIBUTE_LIFETIME_BOUND { \ + Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { \ return ABSL_INTERNAL_IF_##KValue((this->template Func<K, 0>), Callee)( \ __VA_ARGS__ std::forward<decltype(k)>(k), \ std::forward<decltype(args)>(args)...); \ } \ - friend struct std::enable_if<false> /* just to force a semicolon */ + static_assert(true, "this assertion forces a semicolon") ABSL_INTERNAL_X(try_emplace, try_emplace_impl, const &, false); ABSL_INTERNAL_X(try_emplace, try_emplace_impl, const &, true); ABSL_INTERNAL_X(try_emplace, try_emplace_impl, &&, false); @@ -823,32 +820,30 @@ // Merge routines. // Moves all elements from `src` into `this`. - template < - typename T, - typename std::enable_if_t< - std::conjunction< - std::is_same<value_type, typename T::value_type>, - std::is_same<allocator_type, typename T::allocator_type>, - std::is_same<typename params_type::is_map_container, - typename T::params_type::is_map_container>>::value, - int> = 0> - void merge(btree_container<T> &src) { // NOLINT + template <typename T, + typename std::enable_if_t< + std::conjunction_v< + std::is_same<value_type, typename T::value_type>, + std::is_same<allocator_type, typename T::allocator_type>, + std::is_same<typename params_type::is_map_container, + typename T::params_type::is_map_container>>, + int> = 0> + void merge(btree_container<T>& src) { // NOLINT for (auto src_it = src.begin(), end = src.end(); src_it != end; ++src_it) { insert(std::move(params_type::element(src_it.slot()))); } src.clear(); } - template < - typename T, - typename std::enable_if_t< - std::conjunction< - std::is_same<value_type, typename T::value_type>, - std::is_same<allocator_type, typename T::allocator_type>, - std::is_same<typename params_type::is_map_container, - typename T::params_type::is_map_container>>::value, - int> = 0> - void merge(btree_container<T> &&src) { + template <typename T, + typename std::enable_if_t< + std::conjunction_v< + std::is_same<value_type, typename T::value_type>, + std::is_same<allocator_type, typename T::allocator_type>, + std::is_same<typename params_type::is_map_container, + typename T::params_type::is_map_container>>, + int> = 0> + void merge(btree_container<T>&& src) { merge(src); } };
diff --git a/absl/container/internal/common_policy_traits.h b/absl/container/internal/common_policy_traits.h index 3b0d505..0eb0542 100644 --- a/absl/container/internal/common_policy_traits.h +++ b/absl/container/internal/common_policy_traits.h
@@ -34,7 +34,7 @@ template <class Policy> struct policy_trait_element_is_owner< Policy, - std::enable_if_t<!std::is_void<typename Policy::element_is_owner>::value>> + std::enable_if_t<!std::is_void_v<typename Policy::element_is_owner>>> : Policy::element_is_owner {}; // Defines how slots are initialized/destroyed/moved. @@ -43,7 +43,7 @@ // The actual object stored in the container. using slot_type = typename Policy::slot_type; using reference = decltype(Policy::element(std::declval<slot_type*>())); - using value_type = typename std::remove_reference<reference>::type; + using value_type = std::remove_reference_t<reference>; // PRECONDITION: `slot` is UNINITIALIZED // POSTCONDITION: `slot` is INITIALIZED @@ -91,16 +91,16 @@ } static constexpr bool transfer_uses_memcpy() { - return std::is_same<decltype(transfer_impl<std::allocator<char>>( - nullptr, nullptr, nullptr, Rank2{})), - std::true_type>::value; + return std::is_same_v<decltype(transfer_impl<std::allocator<char>>( + nullptr, nullptr, nullptr, Rank2{})), + std::true_type>; } // Returns true if destroy is trivial and can be omitted. template <class Alloc> static constexpr bool destroy_is_trivial() { - return std::is_same<decltype(destroy<Alloc>(nullptr, nullptr)), - std::true_type>::value; + return std::is_same_v<decltype(destroy<Alloc>(nullptr, nullptr)), + std::true_type>; } private:
diff --git a/absl/container/internal/compressed_tuple.h b/absl/container/internal/compressed_tuple.h index 924172f..2e1c7ab 100644 --- a/absl/container/internal/compressed_tuple.h +++ b/absl/container/internal/compressed_tuple.h
@@ -67,8 +67,7 @@ template <typename T> constexpr bool ShouldUseBase() { - return std::is_class<T>::value && std::is_empty<T>::value && - !std::is_final<T>::value; + return std::is_class_v<T> && std::is_empty_v<T> && !std::is_final_v<T>; } // Tag type used to disambiguate Storage types for different CompresseedTuples. @@ -156,9 +155,8 @@ template <typename T, typename V> using TupleElementMoveConstructible = - typename std::conditional<std::is_reference<T>::value, - std::is_convertible<V, T>, - std::is_constructible<T, V&&>>::type; + std::conditional_t<std::is_reference_v<T>, std::is_convertible<V, T>, + std::is_constructible<T, V&&>>; template <bool SizeMatches, class T, class... Vs> struct TupleMoveConstructible : std::false_type {}; @@ -166,8 +164,8 @@ template <class... Ts, class... Vs> struct TupleMoveConstructible<true, CompressedTuple<Ts...>, Vs...> : std::integral_constant< - bool, std::conjunction< - TupleElementMoveConstructible<Ts, Vs&&>...>::value> {}; + bool, + std::conjunction_v<TupleElementMoveConstructible<Ts, Vs&&>...>> {}; template <typename T> struct compressed_tuple_size; @@ -228,12 +226,12 @@ template <typename First, typename... Vs, std::enable_if_t< - std::conjunction< + std::conjunction_v< // Ensure we are not hiding default copy/move constructors. std::negation<std::is_same<void(CompressedTuple), void(std::decay_t<First>)>>, internal_compressed_tuple::TupleItemsMoveConstructible< - CompressedTuple<Ts...>, First, Vs...>>::value, + CompressedTuple<Ts...>, First, Vs...>>, bool> = true> explicit constexpr CompressedTuple(First&& first, Vs&&... base) : CompressedTuple::CompressedTupleImpl(std::in_place,
diff --git a/absl/container/internal/compressed_tuple_test.cc b/absl/container/internal/compressed_tuple_test.cc index 96b3917..2331fc4 100644 --- a/absl/container/internal/compressed_tuple_test.cc +++ b/absl/container/internal/compressed_tuple_test.cc
@@ -302,14 +302,14 @@ EXPECT_EQ(4 * sizeof(char), sizeof(CompressedTuple<CompressedTuple<char, char>, CompressedTuple<char, char>>)); - EXPECT_TRUE((std::is_empty<CompressedTuple<Empty<0>, Empty<1>>>::value)); + EXPECT_TRUE((std::is_empty_v<CompressedTuple<Empty<0>, Empty<1>>>)); // Make sure everything still works when things are nested. struct CT_Empty : CompressedTuple<Empty<0>> {}; CompressedTuple<Empty<0>, CT_Empty> nested_empty; auto contained = nested_empty.get<0>(); auto nested = nested_empty.get<1>().get<0>(); - EXPECT_TRUE((std::is_same<decltype(contained), decltype(nested)>::value)); + EXPECT_TRUE((std::is_same_v<decltype(contained), decltype(nested)>)); } TEST(CompressedTupleTest, Reference) { @@ -332,7 +332,7 @@ TEST(CompressedTupleTest, NoElements) { CompressedTuple<> x; static_cast<void>(x); // Silence -Wunused-variable. - EXPECT_TRUE(std::is_empty<CompressedTuple<>>::value); + EXPECT_TRUE(std::is_empty_v<CompressedTuple<>>); } TEST(CompressedTupleTest, MoveOnlyElements) {
diff --git a/absl/container/internal/container_memory.h b/absl/container/internal/container_memory.h index 16a2e25..a30395b 100644 --- a/absl/container/internal/container_memory.h +++ b/absl/container/internal/container_memory.h
@@ -80,10 +80,10 @@ template <class Allocator, class ValueType> constexpr auto IsDestructionTrivial() { constexpr bool result = - std::is_trivially_destructible<ValueType>::value && - std::is_same<typename std::allocator_traits< - Allocator>::template rebind_alloc<char>, - std::allocator<char>>::value; + std::is_trivially_destructible_v<ValueType> && + std::is_same_v<typename std::allocator_traits< + Allocator>::template rebind_alloc<char>, + std::allocator<char>>; return std::integral_constant<bool, result>(); } @@ -144,12 +144,10 @@ template <class T> auto TupleRef(T&& t) -> decltype(TupleRefImpl( std::forward<T>(t), - std::make_index_sequence< - std::tuple_size<typename std::decay<T>::type>::value>())) { + std::make_index_sequence<std::tuple_size<std::decay_t<T>>::value>())) { return TupleRefImpl( std::forward<T>(t), - std::make_index_sequence< - std::tuple_size<typename std::decay<T>::type>::value>()); + std::make_index_sequence<std::tuple_size<std::decay_t<T>>::value>()); } template <class F, class K, class V> @@ -169,8 +167,7 @@ void ConstructFromTuple(Alloc* alloc, T* ptr, Tuple&& t) { memory_internal::ConstructFromTupleImpl( alloc, ptr, std::forward<Tuple>(t), - std::make_index_sequence< - std::tuple_size<typename std::decay<Tuple>::type>::value>()); + std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>()); } // Constructs T using the args specified in the tuple and calls F with the @@ -180,8 +177,7 @@ F&& f) { return memory_internal::WithConstructedImpl<T>( std::forward<Tuple>(t), - std::make_index_sequence< - std::tuple_size<typename std::decay<Tuple>::type>::value>(), + std::make_index_sequence<std::tuple_size<std::decay_t<Tuple>>::value>(), std::forward<F>(f)); }
diff --git a/absl/container/internal/container_memory_test.cc b/absl/container/internal/container_memory_test.cc index 946d1d3..9a8ba67 100644 --- a/absl/container/internal/container_memory_test.cc +++ b/absl/container/internal/container_memory_test.cc
@@ -270,9 +270,9 @@ { using slot_policy = map_slot_policy<int, float>; EXPECT_TRUE( - (std::is_same<decltype(slot_policy::transfer<std::allocator<char>>( - nullptr, nullptr, nullptr)), - std::true_type>::value)); + (std::is_same_v<decltype(slot_policy::transfer<std::allocator<char>>( + nullptr, nullptr, nullptr)), + std::true_type>)); } { struct NonRelocatable { @@ -285,9 +285,9 @@ EXPECT_FALSE(absl::is_trivially_relocatable<NonRelocatable>::value); using slot_policy = map_slot_policy<int, NonRelocatable>; EXPECT_TRUE( - (std::is_same<decltype(slot_policy::transfer<std::allocator<char>>( - nullptr, nullptr, nullptr)), - std::false_type>::value)); + (std::is_same_v<decltype(slot_policy::transfer<std::allocator<char>>( + nullptr, nullptr, nullptr)), + std::false_type>)); } } @@ -295,17 +295,17 @@ { using slot_policy = map_slot_policy<int, float>; EXPECT_TRUE( - (std::is_same<decltype(slot_policy::destroy<std::allocator<char>>( - nullptr, nullptr)), - std::true_type>::value)); + (std::is_same_v<decltype(slot_policy::destroy<std::allocator<char>>( + nullptr, nullptr)), + std::true_type>)); } { - EXPECT_FALSE(std::is_trivially_destructible<std::unique_ptr<int>>::value); + EXPECT_FALSE(std::is_trivially_destructible_v<std::unique_ptr<int>>); using slot_policy = map_slot_policy<int, std::unique_ptr<int>>; EXPECT_TRUE( - (std::is_same<decltype(slot_policy::destroy<std::allocator<char>>( - nullptr, nullptr)), - std::false_type>::value)); + (std::is_same_v<decltype(slot_policy::destroy<std::allocator<char>>( + nullptr, nullptr)), + std::false_type>)); } }
diff --git a/absl/container/internal/hash_function_defaults_test.cc b/absl/container/internal/hash_function_defaults_test.cc index 9a39b07..4a304a9 100644 --- a/absl/container/internal/hash_function_defaults_test.cc +++ b/absl/container/internal/hash_function_defaults_test.cc
@@ -606,7 +606,7 @@ template <int H> struct hash<Hashable<H>> { template <class E = Hashable<H>, - class = typename std::enable_if<E::HashableBy(kStd)>::type> + class = std::enable_if_t<E::HashableBy(kStd)>> size_t operator()(E) const { return kStd; }
diff --git a/absl/container/internal/hash_generator_testing.h b/absl/container/internal/hash_generator_testing.h index 1814678..79bff7c 100644 --- a/absl/container/internal/hash_generator_testing.h +++ b/absl/container/internal/hash_generator_testing.h
@@ -69,7 +69,7 @@ struct Generator; template <class T> -struct Generator<T, typename std::enable_if<std::is_integral<T>::value>::type> { +struct Generator<T, std::enable_if_t<std::is_integral_v<T>>> { T operator()() const { return dist(gen); } mutable absl::InsecureBitGen gen; mutable std::uniform_int_distribution<T> dist; @@ -79,18 +79,14 @@ struct Generator<Enum> { Enum operator()() const { return static_cast<Enum>(dist(gen)); } mutable absl::InsecureBitGen gen; - mutable std::uniform_int_distribution< - typename std::underlying_type<Enum>::type> - dist; + mutable std::uniform_int_distribution<std::underlying_type_t<Enum>> dist; }; template <> struct Generator<EnumClass> { EnumClass operator()() const { return static_cast<EnumClass>(dist(gen)); } mutable absl::InsecureBitGen gen; - mutable std::uniform_int_distribution< - typename std::underlying_type<EnumClass>::type> - dist; + mutable std::uniform_int_distribution<std::underlying_type_t<EnumClass>> dist; }; template <> @@ -113,15 +109,15 @@ template <class K, class V> struct Generator<std::pair<K, V>> { std::pair<K, V> operator()() const { - return std::pair<K, V>(Generator<typename std::decay<K>::type>()(), - Generator<typename std::decay<V>::type>()()); + return std::pair<K, V>(Generator<std::decay_t<K>>()(), + Generator<std::decay_t<V>>()()); } }; template <class... Ts> struct Generator<std::tuple<Ts...>> { std::tuple<Ts...> operator()() const { - return std::tuple<Ts...>(Generator<typename std::decay<Ts>::type>()()...); + return std::tuple<Ts...>(Generator<std::decay_t<Ts>>()()...); } }; @@ -135,16 +131,16 @@ template <class U> struct Generator<U, std::void_t<decltype(std::declval<U&>().key()), decltype(std::declval<U&>().value())>> - : Generator<std::pair< - typename std::decay<decltype(std::declval<U&>().key())>::type, - typename std::decay<decltype(std::declval<U&>().value())>::type>> {}; + : Generator<std::pair<std::decay_t<decltype(std::declval<U&>().key())>, + std::decay_t<decltype(std::declval<U&>().value())>>> { +}; template <class Container> using GeneratedType = - decltype(std::declval<const Generator<typename std::conditional< - generator_internal::IsMap<Container>::value, - typename Container::value_type, - typename Container::key_type>::type>&>()()); + decltype(std::declval<const Generator< + std::conditional_t<generator_internal::IsMap<Container>::value, + typename Container::value_type, + typename Container::key_type>>&>()()); // Naive wrapper that performs a linear search of previous values. // Beware this is O(SQR), which is reasonable for smaller kMaxValues.
diff --git a/absl/container/internal/hash_policy_testing.h b/absl/container/internal/hash_policy_testing.h index 86ea96a..5eea528 100644 --- a/absl/container/internal/hash_policy_testing.h +++ b/absl/container/internal/hash_policy_testing.h
@@ -158,9 +158,8 @@ } template <class Set> -auto keys(const Set& s) - -> std::vector<typename std::decay<typename Set::key_type>::type> { - std::vector<typename std::decay<typename Set::key_type>::type> res; +auto keys(const Set& s) -> std::vector<std::decay_t<typename Set::key_type>> { + std::vector<std::decay_t<typename Set::key_type>> res; res.reserve(s.size()); for (const auto& v : s) res.emplace_back(v); return res;
diff --git a/absl/container/internal/hash_policy_traits.h b/absl/container/internal/hash_policy_traits.h index f5b4a74..e469d71 100644 --- a/absl/container/internal/hash_policy_traits.h +++ b/absl/container/internal/hash_policy_traits.h
@@ -38,7 +38,7 @@ private: struct ReturnKey { template <class Key, - std::enable_if_t<std::is_lvalue_reference<Key>::value, int> = 0> + std::enable_if_t<std::is_lvalue_reference_v<Key>, int> = 0> static key_type& Impl(Key&& k, int) { return *std::launder( const_cast<key_type*>(std::addressof(std::forward<Key>(k)))); @@ -76,8 +76,8 @@ using init_type = typename Policy::init_type; using reference = decltype(Policy::element(std::declval<slot_type*>())); - using pointer = typename std::remove_reference<reference>::type*; - using value_type = typename std::remove_reference<reference>::type; + using pointer = std::remove_reference_t<reference>*; + using value_type = std::remove_reference_t<reference>; // Policies can set this variable to tell raw_hash_set that all iterators // should be constant, even `iterator`. This is useful for set-like
diff --git a/absl/container/internal/hashtable_control_bytes.h b/absl/container/internal/hashtable_control_bytes.h index 70016e1..f2b1efe 100644 --- a/absl/container/internal/hashtable_control_bytes.h +++ b/absl/container/internal/hashtable_control_bytes.h
@@ -125,7 +125,7 @@ bool NullifyBitsOnIteration = false> class BitMask : public NonIterableBitMask<T, SignificantBits, Shift> { using Base = NonIterableBitMask<T, SignificantBits, Shift>; - static_assert(std::is_unsigned<T>::value, ""); + static_assert(std::is_unsigned_v<T>, ""); static_assert(Shift == 0 || Shift == 3, ""); static_assert(!NullifyBitsOnIteration || Shift == 3, ""); @@ -263,7 +263,7 @@ // when using -funsigned-char under GCC. inline __m128i _mm_cmpgt_epi8_fixed(__m128i a, __m128i b) { #if defined(__GNUC__) && !defined(__clang__) - if (std::is_unsigned<char>::value) { + if (std::is_unsigned_v<char>) { const __m128i mask = _mm_set1_epi8(0x80); const __m128i diff = _mm_subs_epi8(b, a); return _mm_cmpeq_epi8(_mm_and_si128(diff, mask), mask);
diff --git a/absl/container/internal/hashtablez_sampler.cc b/absl/container/internal/hashtablez_sampler.cc index c761304..8942cc3 100644 --- a/absl/container/internal/hashtablez_sampler.cc +++ b/absl/container/internal/hashtablez_sampler.cc
@@ -167,7 +167,8 @@ g_hashtablez_sample_parameter.load(std::memory_order_relaxed)); next_sample.next_sample = next_stride; - const int64_t old_stride = exchange(next_sample.sample_stride, next_stride); + const int64_t old_stride = + std::exchange(next_sample.sample_stride, next_stride); // Small values of interval are equivalent to just sampling next time. ABSL_ASSERT(next_stride >= 1);
diff --git a/absl/container/internal/inlined_vector.h b/absl/container/internal/inlined_vector.h index 6bda9d5..4e9b87e 100644 --- a/absl/container/internal/inlined_vector.h +++ b/absl/container/internal/inlined_vector.h
@@ -78,10 +78,9 @@ template <typename A> using IsSwapOk = absl::type_traits_internal::IsSwappable<ValueType<A>>; -template <typename A, - bool IsTriviallyDestructible = - std::is_trivially_destructible<ValueType<A>>::value && - std::is_same<A, std::allocator<ValueType<A>>>::value> +template <typename A, bool IsTriviallyDestructible = + std::is_trivially_destructible_v<ValueType<A>> && + std::is_same_v<A, std::allocator<ValueType<A>>>> struct DestroyAdapter; template <typename A> @@ -295,9 +294,9 @@ // it's safe for us to simply adopt the contents of the storage for // `other` and remove its own reference to them. It's as if we had // individually move-assigned each value and then destroyed the original. - std::conjunction<std::is_trivially_move_assignable<ValueType<A>>, - std::is_trivially_destructible<ValueType<A>>, - std::is_same<A, std::allocator<ValueType<A>>>>::value, + std::conjunction_v<std::is_trivially_move_assignable<ValueType<A>>, + std::is_trivially_destructible<ValueType<A>>, + std::is_same<A, std::allocator<ValueType<A>>>>, MemcpyPolicy, // Otherwise we use move assignment if possible. If not, we simulate // move assignment using move construction. @@ -306,7 +305,7 @@ // which are themselves not move-assignable when their contained type is // not. std::conditional_t<IsMoveAssignOk<A>::value, ElementwiseAssignPolicy, - ElementwiseConstructPolicy>>; + ElementwiseConstructPolicy>>; // The policy to be used specifically when swapping inlined elements. using SwapInlinedElementsPolicy = std::conditional_t< @@ -316,11 +315,11 @@ // relocated the first vector's elements into temporary storage, // relocated the second's elements into the (now-empty) first's, // and then relocated from temporary storage into the second. - std::conjunction<absl::is_trivially_relocatable<ValueType<A>>, - std::is_same<A, std::allocator<ValueType<A>>>>::value, + std::conjunction_v<absl::is_trivially_relocatable<ValueType<A>>, + std::is_same<A, std::allocator<ValueType<A>>>>, MemcpyPolicy, std::conditional_t<IsSwapOk<A>::value, ElementwiseSwapPolicy, - ElementwiseConstructPolicy>>; + ElementwiseConstructPolicy>>; static SizeType<A> NextCapacity(SizeType<A> current_capacity) { return current_capacity * 2; @@ -349,8 +348,8 @@ // Fast path: if no destructors need to be run and we know the allocator // doesn't do anything fancy, then all we need to do is deallocate (and // maybe not even that). - if (std::is_trivially_destructible<ValueType<A>>::value && - std::is_same<A, std::allocator<ValueType<A>>>::value) { + if (std::is_trivially_destructible_v<ValueType<A>> && + std::is_same_v<A, std::allocator<ValueType<A>>>) { DeallocateIfAllocated(); return; } @@ -502,16 +501,16 @@ { using V = ValueType<A>; ABSL_ASSERT(other_storage.GetIsAllocated() || - (std::is_same<A, std::allocator<V>>::value && + (std::is_same_v<A, std::allocator<V>> && ( // First case above absl::is_trivially_relocatable<V>::value || // Second case above - (std::is_trivially_move_assignable<V>::value && - std::is_trivially_destructible<V>::value) || + (std::is_trivially_move_assignable_v<V> && + std::is_trivially_destructible_v<V>) || // Third case above - (std::is_trivially_copy_constructible<V>::value || - std::is_trivially_copy_assignable<V>::value)))); + (std::is_trivially_copy_constructible_v<V> || + std::is_trivially_copy_assignable_v<V>)))); } GetSizeAndIsAllocated() = other_storage.GetSizeAndIsAllocated(); @@ -596,8 +595,8 @@ // Fast path: if the value type is trivially copy constructible and we know // the allocator doesn't do anything fancy, then we know it is legal for us to // simply memcpy the other vector's elements. - if (std::is_trivially_copy_constructible<ValueType<A>>::value && - std::is_same<A, std::allocator<ValueType<A>>>::value) { + if (std::is_trivially_copy_constructible_v<ValueType<A>> && + std::is_same_v<A, std::allocator<ValueType<A>>>) { std::memcpy(reinterpret_cast<char*>(dst), reinterpret_cast<const char*>(src), n * sizeof(ValueType<A>)); } else { @@ -878,8 +877,8 @@ // simply destroy the elements in the "erasure window" (which cannot throw) // and then memcpy downward to close the window. if (absl::is_trivially_relocatable<ValueType<A>>::value && - std::is_nothrow_destructible<ValueType<A>>::value && - std::is_same<A, std::allocator<ValueType<A>>>::value) { + std::is_nothrow_destructible_v<ValueType<A>> && + std::is_same_v<A, std::allocator<ValueType<A>>>) { DestroyAdapter<A>::DestroyElements( GetAllocator(), storage_view.data + erase_index, erase_size); std::memmove(
diff --git a/absl/container/internal/layout.h b/absl/container/internal/layout.h index 442e208..fac7d81 100644 --- a/absl/container/internal/layout.h +++ b/absl/container/internal/layout.h
@@ -264,8 +264,7 @@ using Contains = std::disjunction<std::is_same<T, Ts>...>; template <class From, class To> -using CopyConst = - typename std::conditional<std::is_const<From>::value, const To, To>::type; +using CopyConst = std::conditional_t<std::is_const_v<From>, const To, To>; // Note: We're not qualifying this with absl:: because it doesn't compile under // MSVC. @@ -317,11 +316,12 @@ // Can `T` be a template argument of `Layout`? template <class T> -using IsLegalElementType = std::integral_constant< - bool, !std::is_reference<T>::value && !std::is_volatile<T>::value && - !std::is_reference<typename Type<T>::type>::value && - !std::is_volatile<typename Type<T>::type>::value && - adl_barrier::IsPow2(AlignOf<T>::value)>; +using IsLegalElementType = + std::integral_constant<bool, + !std::is_reference_v<T> && !std::is_volatile_v<T> && + !std::is_reference_v<typename Type<T>::type> && + !std::is_volatile_v<typename Type<T>::type> && + adl_barrier::IsPow2(AlignOf<T>::value)>; template <class Elements, class StaticSizeSeq, class RuntimeSizeSeq, class SizeSeq, class OffsetSeq> @@ -352,7 +352,7 @@ std::index_sequence<OffsetSeq...>> { private: static_assert(sizeof...(Elements) > 0, "At least one field is required"); - static_assert(std::conjunction<IsLegalElementType<Elements>...>::value, + static_assert(std::conjunction_v<IsLegalElementType<Elements>...>, "Invalid element type (see IsLegalElementType)"); static_assert(sizeof...(StaticSizeSeq) <= sizeof...(Elements), "Too many static sizes specified"); @@ -494,7 +494,7 @@ // Requires: `p` is aligned to `Alignment()`. template <size_t N, class Char> CopyConst<Char, ElementType<N>>* Pointer(Char* p) const { - using C = typename std::remove_const<Char>::type; + using C = std::remove_const_t<Char>; static_assert( std::is_same<C, char>() || std::is_same<C, unsigned char>() || std::is_same<C, signed char>(),
diff --git a/absl/container/internal/node_slot_policy.h b/absl/container/internal/node_slot_policy.h index 3f1874d..7213dda 100644 --- a/absl/container/internal/node_slot_policy.h +++ b/absl/container/internal/node_slot_policy.h
@@ -47,10 +47,9 @@ template <class Reference, class Policy> struct node_slot_policy { - static_assert(std::is_lvalue_reference<Reference>::value, ""); + static_assert(std::is_lvalue_reference_v<Reference>, ""); - using slot_type = typename std::remove_cv< - typename std::remove_reference<Reference>::type>::type*; + using slot_type = std::remove_cv_t<std::remove_reference_t<Reference>>*; template <class Alloc, class... Args> static void construct(Alloc* alloc, slot_type* slot, Args&&... args) {
diff --git a/absl/container/internal/raw_hash_map.h b/absl/container/internal/raw_hash_map.h index 309b767..e039753 100644 --- a/absl/container/internal/raw_hash_map.h +++ b/absl/container/internal/raw_hash_map.h
@@ -95,11 +95,11 @@ using key_type = typename Policy::key_type; using mapped_type = typename Policy::mapped_type; - static_assert(!std::is_reference<key_type>::value, ""); + static_assert(!std::is_reference_v<key_type>, ""); // TODO(b/187807849): Evaluate whether to support reference mapped_type and // remove this assertion if/when it is supported. - static_assert(!std::is_reference<mapped_type>::value, ""); + static_assert(!std::is_reference_v<mapped_type>, ""); using iterator = typename raw_hash_map::raw_hash_set::iterator; using const_iterator = typename raw_hash_map::raw_hash_set::const_iterator; @@ -215,20 +215,20 @@ // All `try_emplace()` overloads make the same guarantees regarding rvalue // arguments as `std::unordered_map::try_emplace()`, namely that these // functions will not move from rvalue arguments if insertions do not happen. - template <class K = key_type, int = EnableIf<LifetimeBoundK<K, false, K*>>(), - class... Args, - typename std::enable_if< - !std::is_convertible<K, const_iterator>::value, int>::type = 0> + template < + class K = key_type, int = EnableIf<LifetimeBoundK<K, false, K*>>(), + class... Args, + std::enable_if_t<!std::is_convertible_v<K, const_iterator>, int> = 0> std::pair<iterator, bool> try_emplace(key_arg<K>&& k, Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace_impl(std::forward<key_arg<K>>(k), std::forward<Args>(args)...); } - template <class K = key_type, class... Args, - EnableIf<LifetimeBoundK<K, true, K*>> = 0, - typename std::enable_if< - !std::is_convertible<K, const_iterator>::value, int>::type = 0> + template < + class K = key_type, class... Args, + EnableIf<LifetimeBoundK<K, true, K*>> = 0, + std::enable_if_t<!std::is_convertible_v<K, const_iterator>, int> = 0> std::pair<iterator, bool> try_emplace( key_arg<K>&& k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this), Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { @@ -236,18 +236,17 @@ std::forward<Args>(args)...); } - template <class K = key_type, int = EnableIf<LifetimeBoundK<K, false>>(), - class... Args, - typename std::enable_if< - !std::is_convertible<K, const_iterator>::value, int>::type = 0> + template < + class K = key_type, int = EnableIf<LifetimeBoundK<K, false>>(), + class... Args, + std::enable_if_t<!std::is_convertible_v<K, const_iterator>, int> = 0> std::pair<iterator, bool> try_emplace(const key_arg<K>& k, Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { return try_emplace_impl(k, std::forward<Args>(args)...); } - template <class K = key_type, class... Args, - EnableIf<LifetimeBoundK<K, true>> = 0, - typename std::enable_if< - !std::is_convertible<K, const_iterator>::value, int>::type = 0> + template < + class K = key_type, class... Args, EnableIf<LifetimeBoundK<K, true>> = 0, + std::enable_if_t<!std::is_convertible_v<K, const_iterator>, int> = 0> std::pair<iterator, bool> try_emplace( const key_arg<K>& k ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this), Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND {
diff --git a/absl/container/internal/raw_hash_set.cc b/absl/container/internal/raw_hash_set.cc index 6ab06e4..80efa1e 100644 --- a/absl/container/internal/raw_hash_set.cc +++ b/absl/container/internal/raw_hash_set.cc
@@ -14,6 +14,7 @@ #include "absl/container/internal/raw_hash_set.h" +#include <algorithm> #include <atomic> #include <cassert> #include <cstddef> @@ -279,8 +280,155 @@ "hash table was modified unexpectedly"); } +// NOTE: we don't use structure with bit fields for GrowthInfo because for +// correctness we rely on the lower bound being the most significant byte. + +// Returns the increment that needs to be added to the packed full growth info +// in order to increase lower bound by lower_bound_increment and increase +// overflow growth left by overflow_increment. +constexpr uint64_t GetPackedIncrement(uint64_t lower_bound_increment, + uint64_t overflow_increment) { + return (lower_bound_increment << GrowthInfoAccessor::kLowerBoundShift) + + overflow_increment; +} + +// Returns the increment that needs to be added to the packed full growth info +// in order to increase lower bound by overflow_to_lower_bound_size and +// decrease overflow growth left by overflow_to_lower_bound_size. +constexpr uint64_t GetRebalanceIncrement( + uint64_t overflow_to_lower_bound_size) { + return GetPackedIncrement(overflow_to_lower_bound_size, + 0u - overflow_to_lower_bound_size); +} + +// Returns the number of elements left to grow in the full growth info. +constexpr uint64_t GetOverflowGrowthLeftFromPacked( + uint64_t packed_full_growth_info) { + constexpr uint64_t kFullGrowthMask = + (uint64_t{1} << GrowthInfoAccessor::kLowerBoundShift) - 1; + return packed_full_growth_info & kFullGrowthMask; +} + +// Returns the GrowthInfoLowerBound object containing the information +// about minimum growth left. +constexpr GrowthInfoLowerBound GetGrowthInfoLowerBoundFromPacked( + uint64_t packed_full_growth_info) { + return GrowthInfoLowerBound(packed_full_growth_info >> + GrowthInfoAccessor::kLowerBoundShift); +} + +// Returns the number of elements left to grow in the lower bound. +constexpr uint64_t GetGrowthLeftLowerBoundFromPacked( + uint64_t packed_full_growth_info) { + return GetGrowthInfoLowerBoundFromPacked(packed_full_growth_info) + .GetGrowthLeft(); +} + +// Returns the total number of elements left to grow in the full growth info. +// Assumes that the table has capacity > kMaxGrowthLeftLowerBound. +uint64_t GetGrowthLeftTotalBigCapacity(void* full_growth_info) { + uint64_t packed_full_growth_left = little_endian::Load64(full_growth_info); + return GetOverflowGrowthLeftFromPacked(packed_full_growth_left) + + GetGrowthLeftLowerBoundFromPacked(packed_full_growth_left); +} + } // namespace +void CommonFields::AssertNotDebugCapacityImpl() const { + const HashtableCapacity cap = maybe_invalid_capacity(); + if (ABSL_PREDICT_TRUE(cap.IsValid())) { + return; + } + assert(!cap.IsReentrance() && + "Reentrant container access during element construction/destruction " + "is not allowed."); + if (cap.IsDestroyed()) { + ABSL_RAW_LOG(FATAL, "Use of destroyed hash table."); + } + if (SwisstableGenerationsEnabled() && ABSL_PREDICT_FALSE(cap.IsMovedFrom())) { + if (cap.IsSelfMovedFrom()) { + // If this log triggers, then a hash table was move-assigned to itself + // and then used again later without being reinitialized. + ABSL_RAW_LOG(FATAL, "Use of self-move-assigned hash table."); + } + ABSL_RAW_LOG(FATAL, "Use of moved-from hash table."); + } +} + +void GrowthInfoAccessor::InitGrowthLeftNoDeleted(size_t growth_left, + size_t capacity) { + if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound) { + *growth_info_lower_bound_ = static_cast<uint8_t>(growth_left); + } else { + uint64_t lower_bound = + (std::min)(uint64_t{growth_left}, + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + little_endian::Store64( + full_growth_info_ptr(), + GetPackedIncrement(lower_bound, growth_left - lower_bound)); + } +} + +GrowthInfoLowerBound GrowthInfoAccessor::RebalanceGrowthLeftLowerBound( + size_t capacity) { + auto growth_left_lower_bound = GetGrowthInfoLowerBound(); + if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound || + // For tables with deleted slots, we often call rebalance even if + // we have growth left in the lower bound. + growth_left_lower_bound.HasDeletedAndGrowthLeft()) { + return growth_left_lower_bound; + } else { + return RebalanceGrowthLeftLowerBoundLargeCapacity(); + } +} + +size_t GrowthInfoAccessor::GetGrowthLeftTotalSlow(size_t capacity) const { + if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound) { + return GetGrowthLeftLowerBound(); + } else { + return static_cast<size_t>( + GetGrowthLeftTotalBigCapacity(full_growth_info_ptr())); + } +} + +ABSL_ATTRIBUTE_NOINLINE GrowthInfoLowerBound +GrowthInfoAccessor::RebalanceGrowthLeftLowerBoundLargeCapacity() { + void* full_growth_info = full_growth_info_ptr(); + uint64_t packed_full_growth_info = little_endian::Load64(full_growth_info); + uint64_t overflow_growth_left = + GetOverflowGrowthLeftFromPacked(packed_full_growth_info); + uint64_t lower_bound_growth_left = + GetGrowthLeftLowerBoundFromPacked(packed_full_growth_info); + uint64_t overflow_to_lower_bound_size = + (std::min)(overflow_growth_left, + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound - + lower_bound_growth_left); + packed_full_growth_info += + GetRebalanceIncrement(overflow_to_lower_bound_size); + little_endian::Store64(full_growth_info, packed_full_growth_info); + auto result = GetGrowthInfoLowerBoundFromPacked(packed_full_growth_info); + ABSL_SWISSTABLE_ASSERT(result.HasNoDeleted() == + GetGrowthInfoLowerBound().HasNoDeleted()); + ABSL_SWISSTABLE_ASSERT( + (result.GetGrowthLeft() > 0 || + GetGrowthLeftTotalBigCapacity(full_growth_info_ptr()) == 0) && + "rebalance may return 0 only if we have absolutely no growth left"); + return result; +} + +void GrowthInfoAccessor::OverwriteFullAsEmpty() { + if (GetGrowthLeftLowerBound() < + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound) { + ++(*growth_info_lower_bound_); + } else { + constexpr uint64_t kIncrement = GetPackedIncrement( + /*lower_bound_increment=*/0, /*overflow_increment=*/1); + void* const full_growth_info = full_growth_info_ptr(); + little_endian::Store64( + full_growth_info, little_endian::Load64(full_growth_info) + kIncrement); + } +} + void ConvertDeletedToEmptyAndFullToDeleted(ctrl_t* ctrl, size_t capacity) { ABSL_SWISSTABLE_ASSERT(ctrl[capacity] == ctrl_t::kSentinel); ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity)); @@ -299,12 +447,10 @@ namespace { -void ResetGrowthLeft(GrowthInfo& growth_info, size_t capacity, size_t size) { - growth_info.InitGrowthLeftNoDeleted(CapacityToGrowth(capacity) - size); -} - -void ResetGrowthLeft(CommonFields& common) { - ResetGrowthLeft(common.growth_info(), common.capacity(), common.size()); +void ResetGrowthLeft(GrowthInfoAccessor growth_info, size_t capacity, + size_t occupied_elements) { + growth_info.InitGrowthLeftNoDeleted( + CapacityToGrowth(capacity) - occupied_elements, capacity); } // Finds guaranteed to exists empty slot from the given position. @@ -367,6 +513,23 @@ SetCtrl(c, i, static_cast<ctrl_t>(h), slot_size); } +inline void SetCtrlInSingleGroupTableNoSanitizeImpl(const CommonFields& c, + size_t i, ctrl_t h) { + ABSL_SWISSTABLE_ASSERT(!c.is_small()); + ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity())); + ctrl_t* ctrl = c.control(); + ctrl[i] = h; + ctrl[i + c.capacity() + 1] = h; +} + +// Sets `ctrl[i]` to `ctrl_t::kSentinel` in single group table. +// +// Unlike setting it directly, this function will perform bounds checks and +// mirror the value to the cloned tail if necessary. +inline void BlockCtrlInSingleGroupTable(const CommonFields& c, size_t i) { + SetCtrlInSingleGroupTableNoSanitizeImpl(c, i, ctrl_t::kSentinel); +} + // Like SetCtrl, but in a single group table, we can save some operations when // setting the cloned control byte. inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, ctrl_t h, @@ -374,9 +537,7 @@ ABSL_SWISSTABLE_ASSERT(!c.is_small()); ABSL_SWISSTABLE_ASSERT(is_single_group(c.capacity())); DoSanitizeOnSetCtrl(c, i, h, slot_size); - ctrl_t* ctrl = c.control(); - ctrl[i] = h; - ctrl[i + c.capacity() + 1] = h; + SetCtrlInSingleGroupTableNoSanitizeImpl(c, i, h); } // Overload for setting to an occupied `h2_t` rather than a special `ctrl_t`. inline void SetCtrlInSingleGroupTable(const CommonFields& c, size_t i, h2_t h, @@ -502,7 +663,8 @@ } // Prepare insert for the new element. PrepareInsertCommon(common); - ResetGrowthLeft(common); + ABSL_SWISSTABLE_ASSERT(common.blocked_element_count() == 0); + ResetGrowthLeft(common.growth_info(), capacity, common.size()); FindInfo find_info = find_first_non_full(common, new_hash); SetCtrlInLargeTable(common, find_info.offset, H2(new_hash), slot_size); common.infoz().RecordInsertMiss(new_hash, find_info.probe_length); @@ -528,8 +690,13 @@ } // Updates the control bytes to indicate a completely empty table such that all -// control bytes are kEmpty except for the kSentinel byte. -void ResetCtrl(CommonFields& common, size_t slot_size) { +// control bytes are kEmpty except for the kSentinel bytes. +// If the table has blocked elements, last `blocked_element_count` are set to +// kSentinel. +void ResetCtrl(CommonFields& common, size_t slot_size, + size_t blocked_element_count) { + ABSL_SWISSTABLE_ASSERT(IsCapacityValidForBlockedElements(common.capacity()) || + blocked_element_count == 0); const size_t capacity = common.capacity(); ctrl_t* ctrl = common.control(); static constexpr size_t kTwoGroupCapacity = 2 * Group::kWidth - 1; @@ -547,7 +714,12 @@ capacity + 1 + NumClonedBytes()); } ctrl[capacity] = ctrl_t::kSentinel; - SanitizerPoisonMemoryRegion(common.slot_array(), slot_size * capacity); + SanitizerPoisonMemoryRegion(common.slot_array(), + slot_size * (capacity - blocked_element_count)); + while (blocked_element_count > 0) { + BlockCtrlInSingleGroupTable(common, capacity - blocked_element_count); + --blocked_element_count; + } } // Initializes control bytes for growing from capacity 1 to 3. @@ -629,11 +801,26 @@ c.infoz().RecordStorageChanged(0, policy.soo_capacity()); c.infoz().Unregister(); (*policy.dealloc)(alloc, c.capacity(), c.control(), policy.slot_size, - policy.slot_align, c.has_infoz()); + policy.slot_align, c.has_infoz(), + c.blocked_element_count()); c = policy.soo_enabled ? CommonFields{soo_tag_t{}} : CommonFields{non_soo_tag_t{}}; } +template <bool kSooEnabled> +void* SingleSlotAddress(CommonFields& c) { + return kSooEnabled ? c.soo_data() : c.slot_array(); +} + +template <bool kSooEnabled> +void DecrementSmallSize(CommonFields& c) { + if constexpr (kSooEnabled) { + c.set_empty_soo(); + } else { + c.decrement_size(); + } +} + } // namespace void EraseMetaOnlySmall(CommonFields& c, bool soo_enabled, size_t slot_size) { @@ -670,21 +857,111 @@ bool reuse) { ABSL_SWISSTABLE_ASSERT(c.capacity() > MaxSmallCapacity()); if (reuse) { + size_t blocked_element_count = c.blocked_element_count(); c.set_size_to_zero(); - ResetCtrl(c, policy.slot_size); - ResetGrowthLeft(c); + ABSL_SWISSTABLE_ASSERT(c.capacity() > policy.soo_capacity()); + ResetCtrl(c, policy.slot_size, blocked_element_count); + ResetGrowthLeft(c.growth_info(), c.capacity(), blocked_element_count); + ABSL_SWISSTABLE_ASSERT(c.blocked_element_count() == blocked_element_count); c.infoz().RecordStorageChanged(0, c.capacity()); } else { ClearBackingArrayNoReuse(c, policy, alloc); } } -namespace { +void DestroySlots(CommonFields& c, size_t slot_size, + DestroySlotFn destroy_slot) { + ABSL_SWISSTABLE_ASSERT(!c.is_small()); + ABSL_SWISSTABLE_ASSERT(destroy_slot != nullptr); + auto destroy_slot_wrapper = [&](const ctrl_t*, void* slot) { + destroy_slot(&c, slot); + }; + if constexpr (SwisstableGenerationsOrDebugEnabled()) { + CommonFields common_copy(non_soo_tag_t{}, c); + c.set_capacity(HashtableCapacity::CreateDestroyed()); + IterateOverFullSlotsImpl(common_copy, slot_size, destroy_slot_wrapper); + c.set_capacity(common_copy.capacity()); + } else { + IterateOverFullSlotsImpl(c, slot_size, destroy_slot_wrapper); + } +} -enum class ResizeNonSooMode { - kGuaranteedEmpty, - kGuaranteedAllocated, -}; +void DeallocBackingArray(CommonFields& c, size_t slot_size, size_t slot_align, + DeallocBackingArrayFn dealloc, void* alloc) { + const size_t cap = c.capacity(); + c.infoz().Unregister(); + dealloc(alloc, cap, c.control(), slot_size, slot_align, c.has_infoz(), + c.blocked_element_count()); +} + +template <bool kSooEnabled> +void Clear(CommonFields& c, const PolicyFunctions& __restrict policy, + DestroySlotFn destroy_slot, void* alloc) { + if (SwisstableGenerationsEnabled() && + c.maybe_invalid_capacity().IsMovedFrom()) { + c.set_capacity(policy.soo_capacity()); + } + c.AssertNotDebugCapacity(); + const size_t cap = c.capacity(); + if constexpr (kSooEnabled) { + ABSL_ASSUME(cap > 0); + } + if (c.is_small()) { + if (!c.empty()) { + if (destroy_slot != nullptr) { + destroy_slot(&c, SingleSlotAddress<kSooEnabled>(c)); + } + DecrementSmallSize<kSooEnabled>(c); + } + } else { + if (destroy_slot != nullptr) { + DestroySlots(c, policy.slot_size, destroy_slot); + } + // Iterating over this container is O(bucket_count()). When bucket_count() + // is much greater than size(), iteration becomes prohibitively expensive. + // For clear() it is more important to reuse the allocated array when the + // container is small because allocation takes comparatively long time + // compared to destruction of the elements of the container. So we pick the + // largest bucket_count() threshold for which iteration is still fast and + // past that we simply deallocate the array. + ClearBackingArray(c, policy, alloc, /*reuse=*/cap < 128); + } + c.set_reserved_growth(0); + c.set_reservation_size(0); +} + +void DestructSoo(CommonFields& c, size_t slot_size, size_t slot_align, + DestroySlotFn destroy_slot, DeallocBackingArrayFn dealloc, + void* alloc) { + ABSL_SWISSTABLE_ASSERT(!c.is_small() || !c.empty()); + if (c.is_small()) { + ABSL_SWISSTABLE_ASSERT(destroy_slot != nullptr); + destroy_slot(&c, c.soo_data()); + return; + } + if (destroy_slot != nullptr) { + DestroySlots(c, slot_size, destroy_slot); + } + DeallocBackingArray(c, slot_size, slot_align, dealloc, alloc); +} + +void DestructNonSoo(CommonFields& c, size_t slot_size, size_t slot_align, + DestroySlotFn destroy_slot, DeallocBackingArrayFn dealloc, + void* alloc) { + ABSL_SWISSTABLE_ASSERT(c.capacity() > 0); + if (destroy_slot != nullptr) { + if (c.is_small()) { + if (!c.empty()) { + destroy_slot(&c, c.slot_array()); + } + } else { + DestroySlots(c, slot_size, destroy_slot); + } + } + DeallocBackingArray(c, slot_size, slot_align, dealloc, alloc); +} + +namespace { // Iterates over full slots in old table, finds new positions for them and // transfers the slots. @@ -773,9 +1050,9 @@ BackingArrayPtrs AllocBackingArray(CommonFields& common, const PolicyFunctions& __restrict policy, size_t new_capacity, bool has_infoz, - void* alloc) { + void* alloc, size_t blocked_element_count) { RawHashSetLayout layout(new_capacity, policy.slot_size, policy.slot_align, - has_infoz); + has_infoz, blocked_element_count); // Perform a direct call in the common case to allow for profile-guided // heap optimization (PGHO) to understand which allocation function is used. constexpr size_t kDefaultAlignment = BackingArrayAlignment(alignof(size_t)); @@ -795,67 +1072,15 @@ mem + layout.slot_offset()}; } -template <ResizeNonSooMode kMode> -void ResizeNonSooImpl(CommonFields& common, - const PolicyFunctions& __restrict policy, - size_t new_capacity, HashtablezInfoHandle infoz) { - ABSL_SWISSTABLE_ASSERT(IsValidCapacity(new_capacity)); - ABSL_SWISSTABLE_ASSERT(new_capacity > policy.soo_capacity()); - - [[maybe_unused]] const size_t old_capacity = common.capacity(); - [[maybe_unused]] ctrl_t* old_ctrl; - [[maybe_unused]] void* old_slots; - if constexpr (kMode == ResizeNonSooMode::kGuaranteedAllocated) { - old_ctrl = common.control(); - old_slots = common.slot_array(); - } - - const size_t slot_size = policy.slot_size; - [[maybe_unused]] const size_t slot_align = policy.slot_align; - const bool has_infoz = infoz.IsSampled(); - void* alloc = policy.get_char_alloc(common); - - common.set_capacity(new_capacity); - const auto [new_ctrl, new_slots] = - AllocBackingArray(common, policy, new_capacity, has_infoz, alloc); - common.set_control(new_ctrl); - common.set_slots(new_slots); - common.generate_new_seed(has_infoz); - - size_t total_probe_length = 0; - ResetCtrl(common, slot_size); - ABSL_SWISSTABLE_ASSERT(kMode != ResizeNonSooMode::kGuaranteedEmpty || - old_capacity == policy.soo_capacity()); - ABSL_SWISSTABLE_ASSERT(kMode != ResizeNonSooMode::kGuaranteedAllocated || - old_capacity > 0); - if constexpr (kMode == ResizeNonSooMode::kGuaranteedAllocated) { - total_probe_length = FindNewPositionsAndTransferSlots( - common, policy, old_ctrl, old_slots, old_capacity); - (*policy.dealloc)(alloc, old_capacity, old_ctrl, slot_size, slot_align, - has_infoz); - if (HasGrowthInfoForCapacity(new_capacity)) { - ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity, - common.size()); - } - } else { - if (HasGrowthInfoForCapacity(new_capacity)) { - GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted( - CapacityToGrowth(new_capacity)); - } - } - - if (ABSL_PREDICT_FALSE(has_infoz)) { - ReportResizeToInfoz(common, infoz, total_probe_length); - } -} - void ResizeEmptyNonAllocatedTableImpl(CommonFields& common, const PolicyFunctions& __restrict policy, - size_t new_capacity, bool force_infoz) { + size_t new_capacity, + size_t blocked_element_count, + bool force_infoz) { ABSL_SWISSTABLE_ASSERT(IsValidCapacity(new_capacity)); ABSL_SWISSTABLE_ASSERT(new_capacity > policy.soo_capacity()); ABSL_SWISSTABLE_ASSERT(!force_infoz || policy.soo_enabled); - ABSL_SWISSTABLE_ASSERT(common.capacity() <= policy.soo_capacity()); + ABSL_SWISSTABLE_ASSERT(common.capacity() == policy.soo_capacity()); ABSL_SWISSTABLE_ASSERT(common.empty()); const size_t slot_size = policy.slot_size; HashtablezInfoHandle infoz; @@ -865,8 +1090,25 @@ infoz = ForcedTrySample(slot_size, policy.key_size, policy.value_size, policy.soo_capacity()); } - ResizeNonSooImpl<ResizeNonSooMode::kGuaranteedEmpty>(common, policy, - new_capacity, infoz); + const bool has_infoz = infoz.IsSampled(); + void* alloc = policy.get_char_alloc(common); + + common.set_capacity(new_capacity); + const auto [new_ctrl, new_slots] = AllocBackingArray( + common, policy, new_capacity, has_infoz, alloc, blocked_element_count); + common.set_control(new_ctrl); + common.set_slots(new_slots); + common.generate_new_seed(has_infoz); + + ResetCtrl(common, slot_size, blocked_element_count); + if (GrowthInfoSizeForCapacity(new_capacity) > 0) { + ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity, + blocked_element_count); + } + + if (ABSL_PREDICT_FALSE(has_infoz)) { + ReportResizeToInfoz(common, infoz, 0); + } } // If the table was SOO, initializes new control bytes and transfers slot. @@ -892,7 +1134,7 @@ policy.transfer_n(&c, target_slot, c.soo_data(), 1); c.set_control(new_ctrl); c.set_slots(new_slots); - ResetCtrl(c, policy.slot_size); + ResetCtrl(c, policy.slot_size, /*blocked_element_count=*/0); SetCtrl(c, offset, H2(soo_slot_hash), policy.slot_size); } @@ -903,12 +1145,12 @@ }; void AssertSoo([[maybe_unused]] CommonFields& common, - [[maybe_unused]] const PolicyFunctions& policy) { + [[maybe_unused]] const PolicyFunctions& __restrict policy) { ABSL_SWISSTABLE_ASSERT(policy.soo_enabled); ABSL_SWISSTABLE_ASSERT(common.capacity() == policy.soo_capacity()); } void AssertFullSoo([[maybe_unused]] CommonFields& common, - [[maybe_unused]] const PolicyFunctions& policy) { + [[maybe_unused]] const PolicyFunctions& __restrict policy) { AssertSoo(common, policy); ABSL_SWISSTABLE_ASSERT(common.size() == policy.soo_capacity()); } @@ -920,6 +1162,7 @@ AssertFullSoo(common, policy); const size_t slot_size = policy.slot_size; void* alloc = policy.get_char_alloc(common); + constexpr size_t kTableSize = 1; HashtablezInfoHandle infoz; bool has_infoz = false; @@ -939,20 +1182,22 @@ // We do not set control and slots in CommonFields yet to avoid overriding // SOO data. const auto [new_ctrl, new_slots] = - AllocBackingArray(common, policy, new_capacity, has_infoz, alloc); + AllocBackingArray(common, policy, new_capacity, has_infoz, alloc, + /*blocked_element_count=*/0); InsertOldSooSlotAndInitializeControlBytes(common, policy, new_ctrl, new_slots, has_infoz); - ResetGrowthLeft(common); + ResetGrowthLeft(common.growth_info(), new_capacity, kTableSize); if (has_infoz) { common.set_has_infoz(); common.set_infoz(infoz); - infoz.RecordStorageChanged(common.size(), new_capacity); + infoz.RecordStorageChanged(kTableSize, new_capacity); } } void GrowIntoSingleGroupShuffleControlBytes(ctrl_t* __restrict old_ctrl, size_t old_capacity, + size_t old_blocked_element_count, ctrl_t* __restrict new_ctrl, size_t new_capacity) { ABSL_SWISSTABLE_ASSERT(is_single_group(new_capacity)); @@ -972,6 +1217,9 @@ // Example: // old_ctrl = 012S012EEEEEEEEE... // copied_bytes = S012EEEE + // Example with blocked elements: + // old_ctrl = 01SS01SEEEEEEEEE... + // copied_bytes = S01SEEEE uint64_t copied_bytes = absl::little_endian::Load64(old_ctrl + old_capacity); // We change the sentinel byte to kEmpty before storing to both the start of @@ -991,6 +1239,22 @@ // after = E012EEEE copied_bytes ^= kEmptyXorSentinel; + if (ABSL_PREDICT_FALSE(old_blocked_element_count > 0)) { + // Replacing blocked sentinel elements with kEmpty. + static constexpr uint64_t kAllBytesEmptyXorSentinel = + kEmptyXorSentinel * uint64_t{0x0101010101010101}; + uint64_t blocked_mask = kAllBytesEmptyXorSentinel; + // Keep old_blocked_element_count bytes in the mask. + blocked_mask >>= 64 - old_blocked_element_count * 8; + // Shift the mask to the start of the blocked elements bytes. + blocked_mask <<= (old_capacity - old_blocked_element_count + 1) * 8; + // Example with blocked elements: + // old_ctrl = 0SSS0SSEEEEEEEEE... + // before = E0SSEEEE + // after = E0EEEEEE + copied_bytes ^= blocked_mask; + } + if (Group::kWidth == 8) { // With group size 8, we can grow with two write operations. ABSL_SWISSTABLE_ASSERT(old_capacity < 8 && @@ -1229,9 +1493,13 @@ } ProbedItem* OverflowBufferStart() const { + ABSL_SWISSTABLE_ASSERT(!kGuaranteedFitToBuffer && + "OverflowBufferStart should not be called when " + "kGuaranteedFitToBuffer is true."); // We reuse GrowthInfo memory as well. - return AlignToNextItem(control_ - ControlOffset(/*has_infoz=*/false, - /*has_growth_info=*/true)); + return AlignToNextItem( + control_ - ControlOffset(/*has_infoz=*/false, + NextCapacity(kMaxLocalBufferOldCapacity))); } // Encodes item when previously allocated buffer is full. @@ -1418,6 +1686,8 @@ ABSL_SWISSTABLE_ASSERT(common.capacity() == 1); ABSL_SWISSTABLE_ASSERT(!common.empty()); ABSL_SWISSTABLE_ASSERT(!policy.soo_enabled); + // 1-element tables can't have any blocked elements. + ABSL_SWISSTABLE_ASSERT(common.blocked_element_count() == 0); constexpr size_t kOldCapacity = 1; constexpr size_t kNewCapacity = NextCapacity(kOldCapacity); ctrl_t* old_ctrl = common.control(); @@ -1431,7 +1701,8 @@ common.set_capacity(kNewCapacity); const auto [new_ctrl, new_slots] = - AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc); + AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc, + /*blocked_element_count=*/0); common.set_control(new_ctrl); common.set_slots(new_slots); SanitizerPoisonMemoryRegion(new_slots, kNewCapacity * slot_size); @@ -1455,10 +1726,12 @@ SanitizerUnpoisonMemoryRegion(new_element_target_slot, slot_size); policy.dealloc(alloc, kOldCapacity, old_ctrl, slot_size, slot_align, - has_infoz); + has_infoz, + /*blocked_element_count=*/0); PrepareInsertCommon(common); ABSL_SWISSTABLE_ASSERT(common.size() == 2); - GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted(kNewCapacity - 2); + GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted(kNewCapacity - 2, + kNewCapacity); if (ABSL_PREDICT_FALSE(has_infoz)) { ReportSingleGroupTableGrowthToInfoz(common, infoz, new_hash); @@ -1471,14 +1744,16 @@ size_t GrowToNextCapacityAndPrepareInsert( CommonFields& common, const PolicyFunctions& __restrict policy, size_t new_hash) { - ABSL_SWISSTABLE_ASSERT(common.growth_left() == 0); const size_t old_capacity = common.capacity(); + ABSL_SWISSTABLE_ASSERT( + common.growth_info().GetGrowthLeftTotalSlow(old_capacity) == 0); ABSL_SWISSTABLE_ASSERT(old_capacity > policy.soo_capacity()); ABSL_SWISSTABLE_ASSERT(!IsSmallCapacity(old_capacity)); const size_t new_capacity = NextCapacity(old_capacity); ctrl_t* old_ctrl = common.control(); void* old_slots = common.slot_array(); + size_t old_blocked_element_count = common.blocked_element_count(); common.set_capacity(new_capacity); const size_t slot_size = policy.slot_size; @@ -1488,7 +1763,8 @@ const bool has_infoz = infoz.IsSampled(); const auto [new_ctrl, new_slots] = - AllocBackingArray(common, policy, new_capacity, has_infoz, alloc); + AllocBackingArray(common, policy, new_capacity, has_infoz, alloc, + /*blocked_element_count=*/0); common.set_control(new_ctrl); common.set_slots(new_slots); SanitizerPoisonMemoryRegion(new_slots, new_capacity * slot_size); @@ -1498,7 +1774,9 @@ FindInfo find_info; if (ABSL_PREDICT_TRUE(is_single_group(new_capacity))) { size_t offset; - GrowIntoSingleGroupShuffleControlBytes(old_ctrl, old_capacity, new_ctrl, + const size_t old_size = common.size(); + GrowIntoSingleGroupShuffleControlBytes(old_ctrl, old_capacity, + old_blocked_element_count, new_ctrl, new_capacity); // We put the new element either at the beginning or at the end of the // table with approximately equal probability. @@ -1510,10 +1788,11 @@ find_info = FindInfo{offset, 0}; // Single group tables have all slots full on resize. So we can transfer // all slots without checking the control bytes. - ABSL_SWISSTABLE_ASSERT(common.size() == old_capacity); + ABSL_SWISSTABLE_ASSERT(common.size() + old_blocked_element_count == + old_capacity); void* target = NextSlot(new_slots, slot_size); - SanitizerUnpoisonMemoryRegion(target, old_capacity * slot_size); - policy.transfer_n(&common, target, old_slots, old_capacity); + SanitizerUnpoisonMemoryRegion(target, old_size * slot_size); + policy.transfer_n(&common, target, old_slots, old_size); } else { total_probe_length = GrowToNextCapacityDispatch(common, policy, old_ctrl, old_slots); @@ -1522,7 +1801,7 @@ } ABSL_SWISSTABLE_ASSERT(old_capacity > policy.soo_capacity()); (*policy.dealloc)(alloc, old_capacity, old_ctrl, slot_size, slot_align, - has_infoz); + has_infoz, old_blocked_element_count); PrepareInsertCommon(common); ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity, common.size()); @@ -1570,7 +1849,8 @@ void* alloc = policy.get_char_alloc(common); const auto [new_ctrl, new_slots] = - AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc); + AllocBackingArray(common, policy, kNewCapacity, has_infoz, alloc, + /*blocked_element_count=*/0); common.set_control(new_ctrl); common.set_slots(new_slots); @@ -1648,25 +1928,31 @@ // Slow path for PrepareInsertLarge that is called when the table has deleted // slots or need to be resized or rehashed. +ABSL_ATTRIBUTE_NOINLINE size_t PrepareInsertLargeSlow(CommonFields& common, const PolicyFunctions& __restrict policy, size_t hash) { - const GrowthInfo growth_info = common.growth_info(); - ABSL_SWISSTABLE_ASSERT(!growth_info.HasNoDeletedAndGrowthLeft()); - if (ABSL_PREDICT_TRUE(growth_info.HasNoGrowthLeftAndNoDeleted())) { + GrowthInfoAccessor growth_info = common.growth_info(); + const size_t cap = common.capacity(); + GrowthInfoLowerBound growth_info_lower_bound = + growth_info.RebalanceGrowthLeftLowerBound(cap); + if (ABSL_PREDICT_TRUE( + growth_info_lower_bound.HasNoGrowthLeftAndNoDeleted())) { // Table without deleted slots (>95% cases) that needs to be resized. - ABSL_SWISSTABLE_ASSERT(growth_info.HasNoDeleted() && - growth_info.GetGrowthLeft() == 0); return GrowToNextCapacityAndPrepareInsert(common, policy, hash); } - if (ABSL_PREDICT_FALSE(growth_info.HasNoGrowthLeftAssumingMayHaveDeleted())) { + if (ABSL_PREDICT_FALSE( + growth_info_lower_bound.HasNoGrowthLeftAndHaveDeleted())) { // Table with deleted slots that needs to be rehashed or resized. return RehashOrGrowToNextCapacityAndPrepareInsert(common, policy, hash); } - // Table with deleted slots that has space for the inserting element. + // Covers two cases: + // 1. Table with deleted slots that has space for the inserting element. + // 2. Table without deleted slots that has space and GrowthInfoView was + // rebalanced. FindInfo target = find_first_non_full(common, hash); PrepareInsertCommon(common); - common.growth_info().OverwriteControlAsFull(common.control()[target.offset]); + growth_info.OverwriteControlAsFull(common.control()[target.offset]); SetCtrlInLargeTable(common, target.offset, H2(hash), policy.slot_size); common.infoz().RecordInsertMiss(hash, target.probe_length); return target.offset; @@ -1683,6 +1969,7 @@ CommonFields& common, const PolicyFunctions& __restrict policy, absl::FunctionRef<size_t(size_t)> get_hash) { ResizeEmptyNonAllocatedTableImpl(common, policy, NextCapacity(SooCapacity()), + /*blocked_element_count=*/0, /*force_infoz=*/true); PrepareInsertCommon(common); common.growth_info().OverwriteEmptyAsFull(); @@ -1693,6 +1980,16 @@ return SooSlotIndex(); } +// Returns the number of elements to block for the given capacity and reserved +// size. +size_t BlockedElementCount(size_t capacity, size_t reserved_size) { + if (!IsCapacityValidForBlockedElements(capacity)) { + return 0; + } + ABSL_SWISSTABLE_ASSERT(is_single_group(capacity)); + return CapacityToGrowth(capacity) - reserved_size; +} + // Resizes empty non-allocated table to the capacity to fit new_size elements. // Requires: // 1. `c.capacity() == policy.soo_capacity()`. @@ -1704,7 +2001,9 @@ size_t new_size) { ValidateMaxSize(new_size, policy.key_size, policy.slot_size); ABSL_ASSUME(new_size > 0); - ResizeEmptyNonAllocatedTableImpl(common, policy, SizeToCapacity(new_size), + const size_t new_capacity = SizeToCapacity(new_size); + ResizeEmptyNonAllocatedTableImpl(common, policy, new_capacity, + BlockedElementCount(new_capacity, new_size), /*force_infoz=*/false); // This is after resize, to ensure that we have completed the allocation // and have potentially sampled the hashtable. @@ -1760,8 +2059,43 @@ void ResizeAllocatedTableWithSeedChange( CommonFields& common, const PolicyFunctions& __restrict policy, size_t new_capacity) { - ResizeNonSooImpl<ResizeNonSooMode::kGuaranteedAllocated>( - common, policy, new_capacity, common.infoz()); + ABSL_SWISSTABLE_ASSERT(IsValidCapacity(new_capacity)); + ABSL_SWISSTABLE_ASSERT(new_capacity > policy.soo_capacity()); + + const size_t old_capacity = common.capacity(); + ctrl_t* const old_ctrl = common.control(); + void* const old_slots = common.slot_array(); + const size_t old_blocked_element_count = common.blocked_element_count(); + + const size_t slot_size = policy.slot_size; + const size_t slot_align = policy.slot_align; + HashtablezInfoHandle infoz = common.infoz(); + const bool has_infoz = infoz.IsSampled(); + void* alloc = policy.get_char_alloc(common); + + common.set_capacity(new_capacity); + const auto [new_ctrl, new_slots] = + AllocBackingArray(common, policy, new_capacity, has_infoz, alloc, + /*blocked_element_count=*/0); + common.set_control(new_ctrl); + common.set_slots(new_slots); + common.generate_new_seed(has_infoz); + + size_t total_probe_length = 0; + ResetCtrl(common, slot_size, /*blocked_element_count=*/0); + ABSL_SWISSTABLE_ASSERT(old_capacity > 0); + total_probe_length = FindNewPositionsAndTransferSlots( + common, policy, old_ctrl, old_slots, old_capacity); + (*policy.dealloc)(alloc, old_capacity, old_ctrl, slot_size, slot_align, + has_infoz, old_blocked_element_count); + if (GrowthInfoSizeForCapacity(new_capacity) > 0) { + ResetGrowthLeft(GetGrowthInfoFromControl(new_ctrl), new_capacity, + common.size()); + } + + if (ABSL_PREDICT_FALSE(has_infoz)) { + ReportResizeToInfoz(common, infoz, total_probe_length); + } } void ReserveEmptyNonAllocatedTableToFitBucketCount( @@ -1770,6 +2104,7 @@ size_t new_capacity = NormalizeCapacity(bucket_count); ValidateMaxCapacity(new_capacity, policy.key_size, policy.slot_size); ResizeEmptyNonAllocatedTableImpl(common, policy, new_capacity, + /*blocked_element_count=*/0, /*force_infoz=*/false); } @@ -1796,11 +2131,13 @@ // We do not set control and slots in CommonFields yet to avoid overriding // SOO data. const auto [new_ctrl, new_slots] = AllocBackingArray( - common, policy, kNewCapacity, /*has_infoz=*/false, alloc); + common, policy, kNewCapacity, /*has_infoz=*/false, alloc, + /*blocked_element_count=*/0); PrepareInsertCommon(common); ABSL_SWISSTABLE_ASSERT(common.size() == 2); - GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted(kNewCapacity - 2); + GetGrowthInfoFromControl(new_ctrl).InitGrowthLeftNoDeleted(kNewCapacity - 2, + kNewCapacity); common.generate_new_seed(/*has_infoz=*/false); const h2_t soo_slot_h2 = H2(policy.hash_slot( policy.hash_fn(common), common.soo_data(), common.seed().seed())); @@ -1894,6 +2231,7 @@ if (cap == policy.soo_capacity()) { if (common.empty()) { ResizeEmptyNonAllocatedTableImpl(common, policy, new_capacity, + /*blocked_element_count=*/0, /*force_infoz=*/false); } else { ResizeFullSooTable(common, policy, new_capacity, @@ -1937,6 +2275,7 @@ } ReserveTableToFitNewSize(common, policy, size); + const size_t blocked_element_count = common.blocked_element_count(); auto infoz = common.infoz(); ABSL_SWISSTABLE_ASSERT(other.capacity() > soo_capacity); const size_t cap = common.capacity(); @@ -1958,7 +2297,7 @@ common.maybe_increment_generation_on_insert(); }); common.increment_size(size); - common.growth_info().OverwriteManyEmptyAsFull(size); + ResetGrowthLeft(common.growth_info(), cap, size + blocked_element_count); } void ReserveTableToFitNewSize(CommonFields& common, @@ -1975,7 +2314,9 @@ ABSL_SWISSTABLE_ASSERT(!common.empty() || cap > policy.soo_capacity()); ABSL_SWISSTABLE_ASSERT(cap > 0); const size_t max_size_before_growth = - IsSmallCapacity(cap) ? cap : common.size() + common.growth_left(); + IsSmallCapacity(cap) + ? cap + : common.size() + common.growth_info().GetGrowthLeftTotalSlow(cap); if (new_size <= max_size_before_growth) { return; } @@ -1989,15 +2330,16 @@ Group::NonIterableBitMaskType mask_empty, FindInfo target_group) { ABSL_SWISSTABLE_ASSERT(!common.is_small()); - const GrowthInfo growth_info = common.growth_info(); + GrowthInfoAccessor growth_info = common.growth_info(); // When there are no deleted slots in the table // and growth_left is positive, we can insert at the first // empty slot in the probe sequence (target). - if (ABSL_PREDICT_FALSE(!growth_info.HasNoDeletedAndGrowthLeft())) { + if (ABSL_PREDICT_FALSE( + !growth_info.GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft())) { return PrepareInsertLargeSlow(common, policy, hash); } PrepareInsertCommon(common); - common.growth_info().OverwriteEmptyAsFull(); + growth_info.OverwriteEmptyAsFull(); target_group.offset += mask_empty.LowestBitSet(); target_group.offset &= common.capacity(); SetCtrl(common, target_group.offset, H2(hash), policy.slot_size); @@ -2016,16 +2358,18 @@ } size_t PrepareInsertLargeGenerationsEnabled( - CommonFields& common, const PolicyFunctions& policy, size_t hash, + CommonFields& common, const PolicyFunctions& __restrict policy, size_t hash, Group::NonIterableBitMaskType mask_empty, FindInfo target_group, absl::FunctionRef<size_t(size_t)> recompute_hash) { // NOLINTNEXTLINE(misc-static-assert) ABSL_SWISSTABLE_ASSERT(SwisstableGenerationsEnabled()); - if (common.should_rehash_for_bug_detection_on_insert()) { + const size_t cap = common.capacity(); + const size_t growth_left = common.growth_info().GetGrowthLeftTotalSlow(cap); + // As an optimization, we avoid calling ShouldRehashForBugDetection if we + // will end up rehashing anyways. + if (growth_left > 0 && common.should_rehash_for_bug_detection_on_insert()) { // Move to a different heap allocation in order to detect bugs. - const size_t cap = common.capacity(); - ResizeAllocatedTableWithSeedChange( - common, policy, common.growth_left() > 0 ? cap : NextCapacity(cap)); + ResizeAllocatedTableWithSeedChange(common, policy, cap); hash = recompute_hash(common.seed().seed()); std::tie(target_group, mask_empty) = find_first_non_full_group(common, hash); @@ -2103,7 +2447,12 @@ template void DeallocateBackingArray<BackingArrayAlignment(alignof(size_t)), std::allocator<char>>( void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size, - size_t slot_align, bool had_infoz); + size_t slot_align, bool had_infoz, size_t blocked_element_count); + +template void Clear<true>(CommonFields& c, const PolicyFunctions& policy, + DestroySlotFn destroy_slot, void* alloc); +template void Clear<false>(CommonFields& c, const PolicyFunctions& policy, + DestroySlotFn destroy_slot, void* alloc); } // namespace container_internal ABSL_NAMESPACE_END
diff --git a/absl/container/internal/raw_hash_set.h b/absl/container/internal/raw_hash_set.h index a50a488..b99d987 100644 --- a/absl/container/internal/raw_hash_set.h +++ b/absl/container/internal/raw_hash_set.h
@@ -13,6 +13,7 @@ // limitations under the License. // // An open-addressing +// [https://en.wikipedia.org/wiki/Open_addressing] // hashtable with quadratic probing. // // This is a low level hashtable on top of which different interfaces can be @@ -58,9 +59,13 @@ // struct BackingArray { // // Sampling handler. This field isn't present when the sampling is // // disabled or this allocation hasn't been selected for sampling. -// HashtablezInfoHandle infoz_; -// // The number of elements we can insert before growing the capacity. -// size_t growth_left; +// HashtablezInfoHandle infoz_; // optional +// // Additional number that can be added to growth_left_lower_bound. +// // Only stored for tables with large capacities. +// uint8_t growth_left_overflow[7]; // optional +// // The minimum number of elements we can insert before growing the +// // capacity. +// uint8_t growth_left_lower_bound; // // Control bytes for the "real" slots. // ctrl_t ctrl[capacity]; // // Always `ctrl_t::kSentinel`. This is used by iterators to find when to @@ -275,9 +280,7 @@ constexpr size_t NumGenerationBytes() { return 0; } #endif -// Returns true if we should assert that the table is not accessed after it has -// been destroyed or during the destruction of the table. -constexpr bool SwisstableAssertAccessToDestroyedTable() { +constexpr bool SwisstableGenerationsOrDebugEnabled() { #ifndef NDEBUG return true; #endif @@ -364,6 +367,10 @@ constexpr size_t SooCapacity() { return 1; } // Maximum capacity of a table where we don't need to hash any keys. constexpr size_t MaxSmallCapacity() { return 1; } +// Maximum capacity of a table where we can use blocked elements. +constexpr size_t MaxCapacityWithBlockedElements() { + return Group::kWidth - 1; +} // Sentinel type to indicate SOO CommonFields construction. struct soo_tag_t {}; // Sentinel type to indicate SOO CommonFields construction with full size. @@ -385,6 +392,18 @@ return capacity <= MaxSmallCapacity(); } +// Whether a table fits entirely into a probing group. +// Arbitrary order of elements in such tables is correct. +constexpr bool is_single_group(size_t capacity) { + return capacity <= Group::kWidth; +} + +// Whether `cap` is a valid capacity for a table that can store blocked +// elements. +constexpr bool IsCapacityValidForBlockedElements(size_t cap) { + return !IsSmallCapacity(cap) && cap <= MaxCapacityWithBlockedElements(); +} + // Converts `n` into the next valid capacity, per `IsValidCapacity`. constexpr size_t NormalizeCapacity(size_t n) { return n ? ~size_t{} >> countl_zero(n) : 1; @@ -904,78 +923,149 @@ // which will recompute this value as a side-effect. // // See also `CapacityToGrowth()`. -class GrowthInfo { +// +// GrowthInfo is stored as 1 or 8 bytes at the beginning of the backing array. +// For capacity <= kMaxGrowthLeftLowerBound we store single byte, otherwise we +// store 8 bytes. Byte before the first control byte for all tables is always +// used to store GrowthInfoLowerBound. That helps to avoid any branching in the +// hottest code accessing GrowthInfo. GrowthInfoLowerBound has 7 bits to store +// the growth left and 1 bit to store whether the table has any deleted slots. +// For capacity > kMaxGrowthLeftLowerBound we use another 7 bytes to store the +// full GrowthInfo. GrowthInfo for capacity > kMaxGrowthLeftLowerBound is stored +// as uint64_t in little endian encoding. Most significant 8 bits (last byte in +// little endian encoding) contains GrowthInfoLowerBound. +class GrowthInfoAccessor; + +// One byte encoding of lower bound GrowthInfo. +// It encodes number of growth left from 0 to kMaxGrowthLeftLowerBound and +// whether the table has any deleted slots. +class GrowthInfoLowerBound { public: - // Leaves data member uninitialized. - GrowthInfo() = default; + static constexpr uint8_t kGrowthLeftMask = 0x7Fu; + static constexpr uint8_t kDeletedBit = 0x80u; + static constexpr uint64_t kMaxGrowthLeftLowerBound = 127; + static_assert(kMaxGrowthLeftLowerBound == kGrowthLeftMask); - // Initializes the GrowthInfo assuming we can grow `growth_left` elements - // and there are no kDeleted slots in the table. - void InitGrowthLeftNoDeleted(size_t growth_left) { - growth_left_info_ = growth_left; - } - - // Overwrites single full slot with an empty slot. - void OverwriteFullAsEmpty() { ++growth_left_info_; } - - // Overwrites single empty slot with a full slot. - void OverwriteEmptyAsFull() { - ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() > 0); - --growth_left_info_; - } - - // Overwrites several empty slots with full slots. - void OverwriteManyEmptyAsFull(size_t count) { - ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >= count); - growth_left_info_ -= count; - } - - // Overwrites specified control element with full slot. - void OverwriteControlAsFull(ctrl_t ctrl) { - ABSL_SWISSTABLE_ASSERT(GetGrowthLeft() >= - static_cast<size_t>(IsEmpty(ctrl))); - growth_left_info_ -= static_cast<size_t>(IsEmpty(ctrl)); - } - - // Overwrites single full slot with a deleted slot. - void OverwriteFullAsDeleted() { growth_left_info_ |= kDeletedBit; } + explicit constexpr GrowthInfoLowerBound(uint8_t growth_left) + : growth_left_(growth_left) {} // Returns true if table satisfies two properties: // 1. Guaranteed to have no kDeleted slots. // 2. There is a place for at least one element to grow. - bool HasNoDeletedAndGrowthLeft() const { - return static_cast<std::make_signed_t<size_t>>(growth_left_info_) > 0; + constexpr bool HasNoDeletedAndGrowthLeft() const { + return static_cast<int8_t>(growth_left_) > 0; + } + + // Returns true if table satisfies two properties: + // 1. May have kDeleted slots (kDeletedBit == 1). + // 2. There is a place for at least one element to grow. + constexpr bool HasDeletedAndGrowthLeft() const { + return growth_left_ > kDeletedBit; } // Returns true if the table satisfies two properties: // 1. Guaranteed to have no kDeleted slots. // 2. There is no growth left. - bool HasNoGrowthLeftAndNoDeleted() const { return growth_left_info_ == 0; } + constexpr bool HasNoGrowthLeftAndNoDeleted() const { + return growth_left_ == 0; + } - // Returns true if GetGrowthLeft() == 0, but must be called only if - // HasNoDeleted() is false. It is slightly more efficient. - bool HasNoGrowthLeftAssumingMayHaveDeleted() const { - ABSL_SWISSTABLE_ASSERT(!HasNoDeleted()); - return growth_left_info_ == kDeletedBit; + // Returns true if GetGrowthLeft() == 0 and HasNoDeleted() is false. + // It is slightly more efficient. + constexpr bool HasNoGrowthLeftAndHaveDeleted() const { + return growth_left_ == kDeletedBit; } // Returns true if table guaranteed to have no kDeleted slots. - bool HasNoDeleted() const { - return static_cast<std::make_signed_t<size_t>>(growth_left_info_) >= 0; + constexpr bool HasNoDeleted() const { + return (growth_left_ & kDeletedBit) == 0; } - // Returns the number of elements left to grow. - size_t GetGrowthLeft() const { return growth_left_info_ & kGrowthLeftMask; } + // Returns the minimum number of elements left to grow. + // Use GrowthInfoView::GetGrowthLeftTotal() to get the total number of + // elements left to grow. For tables with capacity <= + // kMaxGrowthLeftLowerBound, this is the same as GetGrowthLeftTotal(). + constexpr uint8_t GetGrowthLeft() const { + return growth_left_ & kGrowthLeftMask; + } private: - static constexpr size_t kGrowthLeftMask = ((~size_t{}) >> 1); - static constexpr size_t kDeletedBit = ~kGrowthLeftMask; - // Topmost bit signal whenever there are deleted slots. - size_t growth_left_info_; + uint8_t growth_left_; }; -static_assert(sizeof(GrowthInfo) == sizeof(size_t), ""); -static_assert(alignof(GrowthInfo) == alignof(size_t), ""); +// GrowthInfo is stored in the backing array, and this class provides a simple +// interface to access and modify it. +class GrowthInfoAccessor { + public: + // GrowthInfoLowerBound is stored in the most significant 8 bits of the + // full growth info. + static constexpr uint64_t kLowerBoundShift = 64 - 8; + + explicit GrowthInfoAccessor(void* control) + : growth_info_lower_bound_(reinterpret_cast<uint8_t*>(control) - 1) {} + + // Initializes the GrowthInfo assuming we can grow `growth_left` elements + // and there are no kDeleted slots in the table. + void InitGrowthLeftNoDeleted(size_t growth_left, size_t capacity); + + // Returns a GrowthInfoLowerBound object containing the information + // about minimum growth left. + // It guarantees that GetGrowthLeft() will be > 0 if GetGrowthLeftTotal() > 0. + // It may optionally borrow some growth left from the full_growth_info. + GrowthInfoLowerBound RebalanceGrowthLeftLowerBound(size_t capacity); + + // Overwrites single full slot with an empty slot. + void OverwriteFullAsEmpty(); + + // Overwrites single empty slot with a full slot. + // Must be called when GetGrowthLeftLowerBound() > 0. + void OverwriteEmptyAsFull() { + ABSL_SWISSTABLE_ASSERT(GetGrowthLeftLowerBound() > 0); + --(*growth_info_lower_bound_); + } + + // Overwrites specified control element with full slot. + // Must be called when GetGrowthLeftLowerBound() >= IsEmpty(ctrl). + void OverwriteControlAsFull(ctrl_t ctrl) { + ABSL_SWISSTABLE_ASSERT(GetGrowthLeftLowerBound() >= + static_cast<size_t>(IsEmpty(ctrl))); + *growth_info_lower_bound_ -= static_cast<size_t>(IsEmpty(ctrl)); + } + + // Overwrites single full slot with a deleted slot. + void OverwriteFullAsDeleted() { + *growth_info_lower_bound_ |= GrowthInfoLowerBound::kDeletedBit; + } + + // Returns a GrowthInfoLowerBound object containing the information + // about minimum growth left. + GrowthInfoLowerBound GetGrowthInfoLowerBound() const { + return GrowthInfoLowerBound(*growth_info_lower_bound_); + } + + // Returns the minimum number of elements left to grow. + size_t GetGrowthLeftLowerBound() const { + return GetGrowthInfoLowerBound().GetGrowthLeft(); + } + + // The number of slots we can still fill without needing to rehash. + // Hot code paths should try to work with + // growth_info().GetGrowthLeftLowerBound() instead. + size_t GetGrowthLeftTotalSlow(size_t capacity) const; + + private: + void* full_growth_info_ptr() const { return growth_info_lower_bound_ - 7; } + + GrowthInfoLowerBound RebalanceGrowthLeftLowerBoundLargeCapacity(); + + // Pointer to the GrowthInfoLowerBound data. + // For large capacities, 7 bytes before this pointer is used to store + // the full growth info. + // NOTE: using a pointer here can result in the compiler being forced to + // assume aliasing can happen. So in hot code paths, we try to work with + // GrowthInfoLowerBound directly + uint8_t* growth_info_lower_bound_; +}; // Returns the number of "cloned control bytes". // @@ -989,20 +1079,26 @@ return IsSmallCapacity(capacity) ? 0 : capacity + 1 + NumClonedBytes(); } -// Returns whether table with the given capacity has a GrowthInfo. -constexpr bool HasGrowthInfoForCapacity(size_t capacity) { - return !IsSmallCapacity(capacity); +// Returns the size in bytes table with given capacity use to store GrowthInfo. +// Returns 0 for small tables that doesn't store GrowthInfo. +constexpr size_t GrowthInfoSizeForCapacity(size_t capacity) { + if (IsSmallCapacity(capacity)) { + return 0; + } + return capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound + ? sizeof(uint8_t) + : sizeof(uint64_t); } // Computes the offset from the start of the backing allocation of control. // infoz and growth_info are stored at the beginning of the backing array. -constexpr size_t ControlOffset(bool has_infoz, bool has_growth_info) { +constexpr size_t ControlOffset(bool has_infoz, size_t capacity) { if (ABSL_PREDICT_FALSE(has_infoz)) { - // We always allocate GrowthInfo for sampled tables to allow branchless - // access to infoz pointer. - return sizeof(HashtablezInfoHandle) + sizeof(GrowthInfo); + // We always allocate 8 bytes of growth info for sampled tables to allow + // branchless access to infoz pointer. + return sizeof(HashtablezInfoHandle) + sizeof(uint64_t); } - return has_growth_info ? sizeof(GrowthInfo) : 0; + return GrowthInfoSizeForCapacity(capacity); } // Returns the offset of the next item after `offset` that is aligned to `align` @@ -1015,13 +1111,14 @@ class RawHashSetLayout { public: explicit RawHashSetLayout(size_t capacity, size_t slot_size, - size_t slot_align, bool has_infoz) - : control_offset_( - ControlOffset(has_infoz, HasGrowthInfoForCapacity(capacity))), + size_t slot_align, bool has_infoz, + size_t blocked_element_count) + : control_offset_(ControlOffset(has_infoz, capacity)), generation_offset_(control_offset_ + NumControlBytes(capacity)), slot_offset_( AlignUpTo(generation_offset_ + NumGenerationBytes(), slot_align)), - alloc_size_(slot_offset_ + capacity * slot_size) { + alloc_size_(slot_offset_ + + (capacity - blocked_element_count) * slot_size) { ABSL_SWISSTABLE_ASSERT(IsValidCapacity(capacity)); ABSL_SWISSTABLE_ASSERT( slot_size <= @@ -1110,11 +1207,8 @@ // Returns a reference to the GrowthInfo object stored immediately before // `control`. -inline GrowthInfo& GetGrowthInfoFromControl(ctrl_t* control) { - auto* gl_ptr = reinterpret_cast<GrowthInfo*>(control) - 1; - ABSL_SWISSTABLE_ASSERT( - reinterpret_cast<uintptr_t>(gl_ptr) % alignof(GrowthInfo) == 0); - return *gl_ptr; +inline GrowthInfoAccessor GetGrowthInfoFromControl(ctrl_t* control) { + return GrowthInfoAccessor(control); } // CommonFields hold the fields in raw_hash_set that do not depend @@ -1241,19 +1335,10 @@ } bool is_small() const { return inline_data_.is_small(); } - // The number of slots we can still fill without needing to rehash. - // This is stored in the heap allocation before the control bytes. - // TODO(b/289225379): experiment with moving growth_info back inline to - // increase room for SOO. - size_t growth_left() const { return growth_info().GetGrowthLeft(); } - - GrowthInfo& growth_info() { - ABSL_SWISSTABLE_ASSERT(HasGrowthInfoForCapacity(capacity())); + GrowthInfoAccessor growth_info() const { + ABSL_SWISSTABLE_ASSERT(GrowthInfoSizeForCapacity(capacity()) > 0); return GetGrowthInfoFromControl(control()); } - GrowthInfo growth_info() const { - return const_cast<CommonFields*>(this)->growth_info(); - } bool has_infoz() const { return inline_data_.has_infoz(); } void set_has_infoz() { @@ -1267,8 +1352,7 @@ reinterpret_cast<uintptr_t>(control()) % alignof(size_t) == 0); ABSL_SWISSTABLE_ASSERT(has_infoz()); return reinterpret_cast<HashtablezInfoHandle*>( - control() - ControlOffset(/*has_infoz=*/true, - HasGrowthInfoForCapacity(capacity()))); + control() - ControlOffset(/*has_infoz=*/true, capacity())); } HashtablezInfoHandle infoz() { @@ -1283,9 +1367,6 @@ if constexpr (!SwisstableGenerationsEnabled()) { return false; } - // As an optimization, we avoid calling ShouldRehashForBugDetection if we - // will end up rehashing anyways. - if (growth_left() == 0) return false; return CommonFieldsGenerationInfo:: should_rehash_for_bug_detection_on_insert(capacity()); } @@ -1297,9 +1378,30 @@ CommonFieldsGenerationInfo::reset_reserved_growth(reservation, size()); } + // Returns the number of blocked elements in the table. + // Blocked elements are located at the end of the table and do not have + // corresponding slots. + // Control bytes are set to kSentinel for blocked elements. + size_t blocked_element_count() const { + size_t cap = capacity(); + if (!IsCapacityValidForBlockedElements(cap)) { + return 0; + } + ABSL_SWISSTABLE_ASSERT(is_single_group(cap)); + // Formula is valid because MaxCapacityWithBlockedElements is less than + // group width. On erase for single group tables, we always increment the + // growth left. + ABSL_SWISSTABLE_ASSERT(cap <= + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + return CapacityToGrowth(cap) - size() - + // We can use lower bound here because capacity is small. + growth_info().GetGrowthLeftLowerBound(); + } + // The size of the backing array allocation. size_t alloc_size(size_t slot_size, size_t slot_align) const { - return RawHashSetLayout(capacity(), slot_size, slot_align, has_infoz()) + return RawHashSetLayout(capacity(), slot_size, slot_align, has_infoz(), + blocked_element_count()) .alloc_size(); } @@ -1330,6 +1432,14 @@ set_capacity(cap); } + // Asserts that the capacity is not a sentinel invalid value. + void AssertNotDebugCapacity() const { + if (!SwisstableGenerationsOrDebugEnabled()) { + return; + } + AssertNotDebugCapacityImpl(); + } + private: // We store the has_infoz bit in the lowest bit of size_. static constexpr size_t HasInfozShift() { return 1; } @@ -1344,6 +1454,8 @@ ABSL_SWISSTABLE_ASSERT(!has_infoz()); } + void AssertNotDebugCapacityImpl() const; + // TODO(b/289225379): we could put size_ into HeapOrSoo and make capacity_ // encode the size in SOO case. We would be making size()/capacity() more // expensive in order to have more SOO space. @@ -1566,12 +1678,6 @@ size_t probe_length; }; -// Whether a table fits entirely into a probing group. -// Arbitrary order of elements in such tables is correct. -constexpr bool is_single_group(size_t capacity) { - return capacity <= Group::kWidth; -} - // The state for a probe sequence. // // Currently, the sequence is a triangular progression of the form @@ -1695,9 +1801,12 @@ ctrl_t* new_ctrl, size_t new_capacity); -// growth_info (which is a size_t) is stored with the backing array. +// The HashtablezInfoHandle is stored before the control bytes. +// NOTE: The growth_info is also stored before the backing array, but it doesn't +// have alignment requirements. For small tables it is 1 byte, for larger tables +// it is 8 bytes, but we use unaligned load. constexpr size_t BackingArrayAlignment(size_t align_of_slot) { - return (std::max)(align_of_slot, alignof(GrowthInfo)); + return (std::max)(align_of_slot, alignof(HashtablezInfoHandle)); } // Iterates over all full slots and calls `cb(const ctrl_t*, void*)`. @@ -1723,13 +1832,12 @@ return Allocate<AlignOfBackingArray>(static_cast<Alloc*>(alloc), n); } -// Note: we mark this function as ABSL_ATTRIBUTE_NOINLINE because we don't want -// it to be inlined into e.g. the destructor to save code size. template <size_t AlignOfBackingArray, typename Alloc> -ABSL_ATTRIBUTE_NOINLINE void DeallocateBackingArray( - void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size, - size_t slot_align, bool had_infoz) { - RawHashSetLayout layout(capacity, slot_size, slot_align, had_infoz); +void DeallocateBackingArray(void* alloc, size_t capacity, ctrl_t* ctrl, + size_t slot_size, size_t slot_align, bool had_infoz, + size_t blocked_element_count) { + RawHashSetLayout layout(capacity, slot_size, slot_align, had_infoz, + blocked_element_count); void* backing_array = ctrl - layout.control_offset(); // Unpoison before returning the memory to the allocator. SanitizerUnpoisonMemoryRegion(backing_array, layout.alloc_size()); @@ -1737,6 +1845,9 @@ layout.alloc_size()); } +using DeallocBackingArrayFn = + decltype(&DeallocateBackingArray<8, std::allocator<char>>); + // PolicyFunctions bundles together some information for a particular // raw_hash_set<T, ...> instantiation. This information is passed to // type-erased functions that want to do small amounts of type-specific @@ -1766,8 +1877,7 @@ void* (*alloc)(void* alloc, size_t n); // Deallocates the backing store from common. - void (*dealloc)(void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size, - size_t slot_align, bool had_infoz); + DeallocBackingArrayFn dealloc; // Implementation detail of GrowToNextCapacity. // Iterates over all full slots and transfers unprobed elements. @@ -1942,6 +2052,42 @@ void ClearBackingArray(CommonFields& c, const PolicyFunctions& policy, void* alloc, bool reuse); +using DestroySlotFn = void (*)(void* set, void* slot); + +// Destroys all full slots in the backing array. +// REQUIRES: !is_small(c.capacity()). +// REQUIRES: destroy_slot != nullptr. +void DestroySlots(CommonFields& c, size_t slot_size, + DestroySlotFn destroy_slot); + +// Deallocates the backing array and unregister infoz if necessary. +// REQUIRES: c.capacity > raw_hash_set::DefaultCapacity(). +void DeallocBackingArray(CommonFields& c, size_t slot_size, size_t slot_align, + DeallocBackingArrayFn dealloc, void* alloc); + +// Type erased version of raw_hash_set::clear. +template <bool kSooEnabled> +void Clear(CommonFields& c, const PolicyFunctions& policy, + DestroySlotFn destroy_slot, void* alloc); + +// NOTE: Destruct* functions couldn't use PolicyFunctions in order to support +// incomplete types. +// TODO(b/515666499): try to use PolicyFunctions since it makes code simpler and +// binary size smaller. + +// Destructs all elements and deallocates the backing array for SOO tables. +// REQUIRES: !c.is_small || !c.empty() +// REQUIRES: !c.is_small || destroy_slot != nullptr +void DestructSoo(CommonFields& c, size_t slot_size, size_t slot_align, + DestroySlotFn destroy_slot, DeallocBackingArrayFn dealloc, + void* alloc); + +// Destructs all elements and deallocates the backing array for non-SOO tables. +// REQUIRES: c.capacity > 0. +void DestructNonSoo(CommonFields& c, size_t slot_size, size_t slot_align, + DestroySlotFn destroy_slot, DeallocBackingArrayFn dealloc, + void* alloc); + // Type-erased versions of raw_hash_set::erase_meta_only_{small,large}. void EraseMetaOnlySmall(CommonFields& c, bool soo_enabled, size_t slot_size); void EraseMetaOnlyLarge(CommonFields& c, const ctrl_t* ctrl, size_t slot_size); @@ -2138,7 +2284,7 @@ using SlotAllocTraits = typename std::allocator_traits< allocator_type>::template rebind_traits<slot_type>; - static_assert(std::is_lvalue_reference<reference>::value, + static_assert(std::is_lvalue_reference_v<reference>, "Policy::element() must return a reference"); // An enabler for insert(T&&): T must be convertible to init_type or be the @@ -2153,8 +2299,7 @@ // RequiresNotInit is a workaround for gcc prior to 7.1. // See https://godbolt.org/g/Y4xsUh. template <class T> - using RequiresNotInit = - typename std::enable_if<!std::is_same<T, init_type>::value, int>::type; + using RequiresNotInit = std::enable_if_t<!std::is_same_v<T, init_type>, int>; template <class... Ts> using IsDecomposable = IsDecomposable<void, PolicyTraits, Hash, Eq, Ts...>; @@ -2171,9 +2316,9 @@ type_traits_internal::IsLifetimeBoundAssignment<init_type, U>>; public: - static_assert(std::is_same<pointer, value_type*>::value, + static_assert(std::is_same_v<pointer, value_type*>, "Allocators with custom pointer types are not supported"); - static_assert(std::is_same<const_pointer, const value_type*>::value, + static_assert(std::is_same_v<const_pointer, const value_type*>, "Allocators with custom pointer types are not supported"); class iterator : private HashSetIteratorGenerationInfo { @@ -2347,9 +2492,9 @@ // Note: can't use `= default` due to non-default noexcept (causes // problems for some compilers). NOLINTNEXTLINE raw_hash_set() noexcept( - std::is_nothrow_default_constructible<hasher>::value && - std::is_nothrow_default_constructible<key_equal>::value && - std::is_nothrow_default_constructible<allocator_type>::value) {} + std::is_nothrow_default_constructible_v<hasher> && + std::is_nothrow_default_constructible_v<key_equal> && + std::is_nothrow_default_constructible_v<allocator_type>) {} explicit raw_hash_set( size_t bucket_count, const hasher& hash = hasher(), @@ -2500,9 +2645,9 @@ } ABSL_ATTRIBUTE_NOINLINE raw_hash_set(raw_hash_set&& that) noexcept( - std::is_nothrow_copy_constructible<hasher>::value && - std::is_nothrow_copy_constructible<key_equal>::value && - std::is_nothrow_copy_constructible<allocator_type>::value) + std::is_nothrow_copy_constructible_v<hasher> && + std::is_nothrow_copy_constructible_v<key_equal> && + std::is_nothrow_copy_constructible_v<allocator_type>) : // Hash, equality and allocator are copied instead of moved because // `that` must be left valid. If Hash is std::function<Key>, moving it // would create a nullptr functor that cannot be called. @@ -2548,8 +2693,8 @@ raw_hash_set& operator=(raw_hash_set&& that) noexcept( AllocTraits::is_always_equal::value && - std::is_nothrow_move_assignable<hasher>::value && - std::is_nothrow_move_assignable<key_equal>::value) { + std::is_nothrow_move_assignable_v<hasher> && + std::is_nothrow_move_assignable_v<key_equal>) { // TODO(sbenza): We should only use the operations from the noexcept clause // to make sure we actually adhere to that contract. // NOLINTNEXTLINE: not returning *this for performance. @@ -2560,7 +2705,7 @@ ~raw_hash_set() { destructor_impl(); - if constexpr (SwisstableAssertAccessToDestroyedTable()) { + if constexpr (SwisstableGenerationsOrDebugEnabled()) { common().set_capacity(HashtableCapacity::CreateDestroyed()); } } @@ -2612,32 +2757,8 @@ size_t max_size() const { return MaxValidSize(); } ABSL_ATTRIBUTE_REINITIALIZES void clear() { - if (SwisstableGenerationsEnabled() && - maybe_invalid_capacity().IsMovedFrom()) { - common().set_capacity(DefaultCapacity()); - } - AssertNotDebugCapacity(); - // Iterating over this container is O(bucket_count()). When bucket_count() - // is much greater than size(), iteration becomes prohibitively expensive. - // For clear() it is more important to reuse the allocated array when the - // container is small because allocation takes comparatively long time - // compared to destruction of the elements of the container. So we pick the - // largest bucket_count() threshold for which iteration is still fast and - // past that we simply deallocate the array. - const size_t cap = capacity(); - if (cap == 0) { - // Already guaranteed to be empty; so nothing to do. - } else if (is_small()) { - if (!empty()) { - destroy(single_slot()); - decrement_small_size(); - } - } else { - destroy_slots(); - clear_backing_array(/*reuse=*/cap < 128); - } - common().set_reserved_growth(0); - common().set_reservation_size(0); + Clear<SooEnabled()>(common(), GetPolicyFunctions(), get_destroy_slot_fn(), + &char_alloc_ref()); } // This overload kicks in when the argument is an rvalue of insertable and @@ -2914,6 +3035,7 @@ erase_meta_only(it); } + // TODO(b/515666499): Type erase entire function or begin/end case. iterator erase(const_iterator first, const_iterator last) ABSL_ATTRIBUTE_LIFETIME_BOUND { AssertNotDebugCapacity(); @@ -2989,7 +3111,7 @@ } template <class K = key_type, - std::enable_if_t<!std::is_same<K, iterator>::value, int> = 0> + std::enable_if_t<!std::is_same_v<K, iterator>, int> = 0> node_type extract(const key_arg<K>& key) { auto it = find(key); return it == end() ? node_type() : extract(const_iterator{it}); @@ -2997,8 +3119,8 @@ void swap(raw_hash_set& that) noexcept( AllocTraits::is_always_equal::value && - std::is_nothrow_swappable<hasher>::value && - std::is_nothrow_swappable<key_equal>::value) { + std::is_nothrow_swappable_v<hasher> && + std::is_nothrow_swappable_v<key_equal>) { AssertNotDebugCapacity(); that.AssertNotDebugCapacity(); using std::swap; @@ -3133,8 +3255,8 @@ // mapped_types could be unequal in a map or even in a set, key_equal // could ignore some fields that aren't ignored by operator==. static constexpr bool kKeyEqIsValueEq = - std::is_same<key_type, value_type>::value && - std::is_same<key_equal, hash_default_eq<key_type>>::value; + std::is_same_v<key_type, value_type> && + std::is_same_v<key_equal, hash_default_eq<key_type>>; if (!kKeyEqIsValueEq && !(*it == elem)) return false; } return true; @@ -3145,8 +3267,7 @@ } template <typename H> - friend typename std::enable_if<H::template is_hashable<value_type>::value, - H>::type + friend std::enable_if_t<H::template is_hashable<value_type>::value, H> AbslHashValue(H h, const raw_hash_set& s) { return H::combine(H::combine_unordered(std::move(h), s.begin(), s.end()), hash_internal::WeaklyMixedInteger{s.size()}); @@ -3202,19 +3323,19 @@ }; template <typename... Args> - inline void construct(slot_type* slot, Args&&... args) { + void construct(slot_type* slot, Args&&... args) { common().RunWithReentrancyGuard([&] { allocator_type alloc(char_alloc_ref()); PolicyTraits::construct(&alloc, slot, std::forward<Args>(args)...); }); } - inline void destroy(slot_type* slot) { + void destroy(slot_type* slot) { common().RunWithReentrancyGuard([&] { allocator_type alloc(char_alloc_ref()); PolicyTraits::destroy(&alloc, slot); }); } - inline void transfer(slot_type* to, slot_type* from) { + void transfer(slot_type* to, slot_type* from) { common().RunWithReentrancyGuard([&] { allocator_type alloc(char_alloc_ref()); PolicyTraits::transfer(&alloc, to, from); @@ -3280,28 +3401,13 @@ void destroy_slots() { ABSL_SWISSTABLE_ASSERT(!is_small()); if (PolicyTraits::template destroy_is_trivial<Alloc>()) return; - auto destroy_slot = [&](const ctrl_t*, void* slot) { - this->destroy(static_cast<slot_type*>(slot)); - }; - if constexpr (SwisstableAssertAccessToDestroyedTable()) { - CommonFields common_copy(non_soo_tag_t{}, this->common()); - common().set_capacity(HashtableCapacity::CreateDestroyed()); - IterateOverFullSlots(common_copy, sizeof(slot_type), destroy_slot); - common().set_capacity(common_copy.capacity()); - } else { - IterateOverFullSlots(common(), sizeof(slot_type), destroy_slot); - } + DestroySlots(common(), sizeof(slot_type), get_destroy_slot_fn()); } void dealloc() { ABSL_SWISSTABLE_ASSERT(capacity() > DefaultCapacity()); - // Unpoison before returning the memory to the allocator. - SanitizerUnpoisonMemoryRegion(slot_array(), sizeof(slot_type) * capacity()); - infoz().Unregister(); - DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)), - CharAlloc>(&char_alloc_ref(), capacity(), control(), - sizeof(slot_type), alignof(slot_type), - common().has_infoz()); + DeallocBackingArray(common(), sizeof(slot_type), alignof(slot_type), + get_dealloc_backing_array_fn(), &char_alloc_ref()); } void destructor_impl() { @@ -3309,16 +3415,20 @@ maybe_invalid_capacity().IsMovedFrom()) { return; } - if (capacity() == 0) return; - if (is_small()) { - if (!empty()) { - ABSL_SWISSTABLE_IGNORE_UNINITIALIZED(destroy(single_slot())); + if constexpr (SooEnabled()) { + if (is_small() && + (PolicyTraits::template destroy_is_trivial<Alloc>() || empty())) { + return; } - if constexpr (SooEnabled()) return; + DestructSoo(common(), sizeof(slot_type), alignof(slot_type), + get_destroy_slot_fn(), get_dealloc_backing_array_fn(), + &char_alloc_ref()); } else { - destroy_slots(); + if (capacity() == 0) return; + DestructNonSoo(common(), sizeof(slot_type), alignof(slot_type), + get_destroy_slot_fn(), get_dealloc_backing_array_fn(), + &char_alloc_ref()); } - dealloc(); } // Erases, but does not destroy, the value pointed to by `it`. @@ -3570,34 +3680,7 @@ } // Asserts that the capacity is not a sentinel invalid value. - void AssertNotDebugCapacity() const { -#ifdef NDEBUG - if (!SwisstableGenerationsEnabled()) { - return; - } -#endif - const HashtableCapacity cap = maybe_invalid_capacity(); - if (ABSL_PREDICT_TRUE(cap.IsValid())) { - return; - } - assert(!cap.IsReentrance() && - "Reentrant container access during element construction/destruction " - "is not allowed."); - if constexpr (SwisstableAssertAccessToDestroyedTable()) { - if (cap.IsDestroyed()) { - ABSL_RAW_LOG(FATAL, "Use of destroyed hash table."); - } - } - if (SwisstableGenerationsEnabled() && - ABSL_PREDICT_FALSE(cap.IsMovedFrom())) { - if (cap.IsSelfMovedFrom()) { - // If this log triggers, then a hash table was move-assigned to itself - // and then used again later without being reinitialized. - ABSL_RAW_LOG(FATAL, "Use of self-move-assigned hash table."); - } - ABSL_RAW_LOG(FATAL, "Use of moved-from hash table."); - } - } + void AssertNotDebugCapacity() const { common().AssertNotDebugCapacity(); } // Asserts that hash and equal functors provided by the user are consistent, // meaning that `eq(k1, k2)` implies `hash(k1)==hash(k2)`. @@ -3607,13 +3690,13 @@ return; #endif // If the hash/eq functors are known to be consistent, then skip validation. - if (std::is_same<hasher, absl::container_internal::StringHash>::value && - std::is_same<key_equal, absl::container_internal::StringEq>::value) { + if (std::is_same_v<hasher, absl::container_internal::StringHash> && + std::is_same_v<key_equal, absl::container_internal::StringEq>) { return; } - if (std::is_scalar<key_type>::value && - std::is_same<hasher, absl::Hash<key_type>>::value && - std::is_same<key_equal, std::equal_to<key_type>>::value) { + if (std::is_scalar_v<key_type> && + std::is_same_v<hasher, absl::Hash<key_type>> && + std::is_same_v<key_equal, std::equal_to<key_type>>) { return; } if (empty()) return; @@ -3684,26 +3767,7 @@ private: friend struct RawHashSetTestOnlyAccess; - // The number of slots we can still fill without needing to rehash. - // - // This is stored separately due to tombstones: we do not include tombstones - // in the growth capacity, because we'd like to rehash when the table is - // otherwise filled with tombstones: otherwise, probe sequences might get - // unacceptably long without triggering a rehash. Callers can also force a - // rehash via the standard `rehash(0)`, which will recompute this value as a - // side-effect. - // - // See `CapacityToGrowth()`. - size_t growth_left() const { - return common().growth_left(); - } - - GrowthInfo& growth_info() { - return common().growth_info(); - } - GrowthInfo growth_info() const { - return common().growth_info(); - } + GrowthInfoAccessor growth_info() const { return common().growth_info(); } // Prefetch the heap-allocated memory region to resolve potential TLB and // cache misses. This is intended to overlap with execution of calculating the @@ -3794,6 +3858,16 @@ } } + static void destroy_slot_fn_impl(void* set, void* slot) { + auto* h = static_cast<raw_hash_set*>(set); + h->destroy(to_slot(slot)); + } + static constexpr DestroySlotFn get_destroy_slot_fn() { + return PolicyTraits::template destroy_is_trivial<Alloc>() + ? nullptr + : &raw_hash_set::destroy_slot_fn_impl; + } + // TODO(b/382423690): Try to type erase entire function or at least type erase // by GetKey + Hash for memcpyable types. // TODO(b/382423690): Try to type erase for big slots: sizeof(slot_type) > 16. @@ -3848,6 +3922,11 @@ } } + static constexpr DeallocBackingArrayFn get_dealloc_backing_array_fn() { + return &DeallocateBackingArray<BackingArrayAlignment(alignof(slot_type)), + CharAlloc>; + } + static const PolicyFunctions& GetPolicyFunctions() { static_assert(sizeof(slot_type) <= (std::numeric_limits<uint32_t>::max)(), "Slot size is too large. Use std::unique_ptr for value type " @@ -3877,7 +3956,7 @@ std::is_empty_v<Alloc> ? &GetRefForEmptyClass : &raw_hash_set::get_char_alloc_ref_fn, &AllocateBackingArray<kBackingArrayAlignment, CharAlloc>, - &DeallocateBackingArray<kBackingArrayAlignment, CharAlloc>, + get_dealloc_backing_array_fn(), &raw_hash_set::transfer_unprobed_elements_to_next_capacity_fn}; return value; } @@ -4042,15 +4121,19 @@ extern template void DeallocateBackingArray< BackingArrayAlignment(alignof(size_t)), std::allocator<char>>( void* alloc, size_t capacity, ctrl_t* ctrl, size_t slot_size, - size_t slot_align, bool had_infoz); + size_t slot_align, bool had_infoz, size_t blocked_element_count); + +extern template void Clear<true>(CommonFields& c, const PolicyFunctions& policy, + DestroySlotFn destroy_slot, void* alloc); +extern template void Clear<false>(CommonFields& c, + const PolicyFunctions& policy, + DestroySlotFn destroy_slot, void* alloc); } // namespace container_internal ABSL_NAMESPACE_END } // namespace absl #undef ABSL_SWISSTABLE_ENABLE_GENERATIONS -#undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED -#undef ABSL_SWISSTABLE_IGNORE_UNINITIALIZED_RETURN #undef ABSL_SWISSTABLE_ASSERT #endif // ABSL_CONTAINER_INTERNAL_RAW_HASH_SET_H_
diff --git a/absl/container/internal/raw_hash_set_benchmark.cc b/absl/container/internal/raw_hash_set_benchmark.cc index 71feffe..5cbaf5c 100644 --- a/absl/container/internal/raw_hash_set_benchmark.cc +++ b/absl/container/internal/raw_hash_set_benchmark.cc
@@ -22,6 +22,7 @@ #include <random> #include <string> #include <tuple> +#include <type_traits> #include <utility> #include <vector> @@ -76,8 +77,8 @@ class StringPolicy { template <class F, class K, class V, - class = typename std::enable_if< - std::is_convertible<const K&, absl::string_view>::value>::type> + class = std::enable_if_t< + std::is_convertible_v<const K&, absl::string_view>>> decltype(std::declval<F>()( std::declval<const absl::string_view&>(), std::piecewise_construct, std::declval<std::tuple<K>>(),
diff --git a/absl/container/internal/raw_hash_set_test.cc b/absl/container/internal/raw_hash_set_test.cc index 332f99d..70a5952 100644 --- a/absl/container/internal/raw_hash_set_test.cc +++ b/absl/container/internal/raw_hash_set_test.cc
@@ -105,129 +105,420 @@ // Convenience function to static cast to ctrl_t. ctrl_t CtrlT(int i) { return static_cast<ctrl_t>(i); } -// Enables sampling with 1 percent sampling rate and -// resets the rate counter for the current thread. -void SetSamplingRateTo1Percent() { - SetHashtablezEnabled(true); - SetHashtablezSampleParameter(100); // Sample ~1% of tables. - // Reset rate counter for the current thread. - TestOnlyRefreshSamplingStateForCurrentThread(); +TEST(RawHashSetLayout, SmallCapacity) { + { + SCOPED_TRACE("capacity=1 no alignment after generation"); + constexpr size_t kSlotSize = 1; + RawHashSetLayout layout(1, kSlotSize, /*slot_align=*/1, + /*has_infoz=*/false, /*blocked_element_count=*/0); + EXPECT_EQ(layout.control_offset(), 0); + EXPECT_EQ(layout.slot_offset(), NumGenerationBytes()); + EXPECT_EQ(layout.alloc_size(), NumGenerationBytes() + kSlotSize); + } + { + SCOPED_TRACE("capacity=1 with alignment after generation"); + constexpr size_t kSlotSize = 8; + constexpr size_t kAlignment = 4; + RawHashSetLayout layout(1, kSlotSize, kAlignment, + /*has_infoz=*/false, /*blocked_element_count=*/0); + EXPECT_EQ(layout.control_offset(), 0); + EXPECT_EQ(layout.slot_offset(), NumGenerationBytes() == 0 ? 0 : kAlignment); + EXPECT_EQ(layout.alloc_size(), layout.slot_offset() + kSlotSize); + } } -// Disables sampling and resets the rate counter for the current thread. -void DisableSampling() { - SetHashtablezEnabled(false); - SetHashtablezSampleParameter(1 << 16); - // Reset rate counter for the current thread. - TestOnlyRefreshSamplingStateForCurrentThread(); +void VerifyMiddleSizeTableLayout(size_t capacity, size_t slot_size, + size_t slot_align, bool has_infoz, + size_t blocked_element_count, + size_t padding = 0) { + SCOPED_TRACE(testing::Message() + << "capacity: " << capacity << " slot_size: " << slot_size + << " slot_align: " << slot_align << " has_infoz: " << has_infoz + << " blocked_element_count: " << blocked_element_count + << " padding: " << padding); + ASSERT_GT(capacity, 1); + ASSERT_LE(capacity, GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + RawHashSetLayout layout(capacity, slot_size, slot_align, has_infoz, + blocked_element_count); + EXPECT_EQ(layout.control_offset(), 1); // 1 byte for growth_info + size_t expected_slot_offset = + capacity + NumClonedBytes() + 1 + /*growth*/ 1 + NumGenerationBytes(); + EXPECT_LT(padding, slot_align); + EXPECT_EQ((expected_slot_offset + padding) % slot_align, 0); + expected_slot_offset += padding; + EXPECT_EQ(layout.slot_offset(), expected_slot_offset); + size_t allocated_values = capacity - blocked_element_count; + EXPECT_EQ(layout.alloc_size(), + expected_slot_offset + allocated_values * slot_size); } -TEST(GrowthInfoTest, GetGrowthLeft) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - EXPECT_EQ(gi.GetGrowthLeft(), 5); - gi.OverwriteFullAsDeleted(); - EXPECT_EQ(gi.GetGrowthLeft(), 5); +TEST(RawHashSetLayout, MiddleSize) { + VerifyMiddleSizeTableLayout(/*capacity=*/3, /*slot_size=*/4, + /*slot_align=*/4, /*has_infoz=*/false, + /*blocked_element_count=*/1, + /*padding=*/NumGenerationBytes() == 0 ? 0 : 3); + VerifyMiddleSizeTableLayout(/*capacity=*/7, /*slot_size=*/4, + /*slot_align=*/4, /*has_infoz=*/false, + /*blocked_element_count=*/1, + /*padding=*/NumGenerationBytes() == 0 ? 0 : 3); + VerifyMiddleSizeTableLayout(/*capacity=*/127, /*slot_size=*/8, + /*slot_align=*/8, /*has_infoz=*/false, + /*blocked_element_count=*/3, + /*padding=*/NumGenerationBytes() == 0 ? 0 : 7); } -TEST(GrowthInfoTest, HasNoDeleted) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - EXPECT_TRUE(gi.HasNoDeleted()); - gi.OverwriteFullAsDeleted(); - EXPECT_FALSE(gi.HasNoDeleted()); +#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) +TEST(RawHashSetLayout, SmallWithInfoZ) { + { + SCOPED_TRACE("capacity=1 no alignment after generation"); + RawHashSetLayout layout(1, /*slot_size=*/1, /*slot_align=*/1, + /*has_infoz=*/true, /*blocked_element_count=*/0); + EXPECT_EQ(layout.control_offset(), + // growth_info is always 8 bytes for sampled tables. + 8 + sizeof(HashtablezInfoHandle)); + EXPECT_EQ(layout.slot_offset(), + layout.control_offset() + NumGenerationBytes()); + EXPECT_EQ(layout.alloc_size(), layout.slot_offset() + 1); + } + { + constexpr size_t kSlotSize = 8; + constexpr size_t kAlignment = 8; + constexpr size_t kCapacity = 3; + RawHashSetLayout layout(kCapacity, /*slot_size=*/kSlotSize, + /*slot_align=*/kAlignment, + /*has_infoz=*/true, /*blocked_element_count=*/0); + EXPECT_EQ(layout.control_offset(), + // growth_info is always 8 bytes for sampled tables. + 8 + sizeof(HashtablezInfoHandle)); + size_t expected_slot_offset = + layout.control_offset() + kCapacity + NumClonedBytes() + 1 + + /*padding+generation*/ (sizeof(HashtablezInfoHandle) == 4 ? 1 : 5); + EXPECT_EQ(expected_slot_offset % kAlignment, 0); + EXPECT_EQ(layout.slot_offset(), expected_slot_offset); + EXPECT_EQ(layout.alloc_size(), + expected_slot_offset + kCapacity * kSlotSize); + } +} +#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) + +void VerifyLargeTableLayout(size_t capacity, size_t slot_size, + size_t slot_align, bool has_infoz, + size_t blocked_element_count) { + SCOPED_TRACE(testing::Message() + << "capacity: " << capacity << " slot_size: " << slot_size + << " slot_align: " << slot_align << " has_infoz: " << has_infoz + << " blocked_element_count: " << blocked_element_count); + ASSERT_GT(capacity, GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + RawHashSetLayout layout(capacity, slot_size, slot_align, has_infoz, + blocked_element_count); + EXPECT_EQ(layout.control_offset(), + has_infoz ? 8 + sizeof(HashtablezInfoHandle) : 8); + size_t expected_slot_offset = layout.control_offset() + capacity + + NumClonedBytes() + 1 + /*padding+generation*/ 1; + EXPECT_EQ(expected_slot_offset % slot_align, 0); + EXPECT_EQ(layout.slot_offset(), expected_slot_offset); + EXPECT_EQ( + layout.alloc_size(), + expected_slot_offset + (capacity - blocked_element_count) * slot_size); +} + +TEST(RawHashSetLayout, Large) { + VerifyLargeTableLayout(/*capacity=*/255, /*slot_size=*/8, /*slot_align=*/8, + /*has_infoz=*/false, /*blocked_element_count=*/5); +#if defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) + VerifyLargeTableLayout(/*capacity=*/1023, /*slot_size=*/8, /*slot_align=*/8, + /*has_infoz=*/true, /*blocked_element_count=*/2); +#endif // defined(ABSL_INTERNAL_HASHTABLEZ_SAMPLE) +} + +class GrowthInfoAllocator { + public: + explicit GrowthInfoAllocator(size_t capacity) { + if (capacity <= GrowthInfoLowerBound::kMaxGrowthLeftLowerBound) { + SanitizerPoisonMemoryRegion(control_.data(), 7); + } + SanitizerPoisonMemoryRegion(control_.data() + 8, 1); + } + + GrowthInfoAccessor* operator->() { return &growth_info_; } + + private: + // We allocate on heap since ASAN fails to detect access to poisoned memory + // on stack. + std::vector<ctrl_t> control_ = + std::vector<ctrl_t>(9, /*garbage*/ ctrl_t::kSentinel); + GrowthInfoAccessor growth_info_ = GrowthInfoAccessor(control_.data() + 8); +}; + +TEST(GrowthInfoViewTest, GetGrowthLeft) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 5); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), 5); + growth_info->OverwriteFullAsDeleted(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 5); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), 5); +} + +TEST(GrowthInfoViewTest, HasNoDeleted) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + EXPECT_TRUE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); + growth_info->OverwriteFullAsDeleted(); + EXPECT_FALSE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); // After reinitialization we have no deleted slots. - gi.InitGrowthLeftNoDeleted(5); - EXPECT_TRUE(gi.HasNoDeleted()); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + EXPECT_TRUE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); } -TEST(GrowthInfoTest, HasNoDeletedAndGrowthLeft) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - EXPECT_TRUE(gi.HasNoDeletedAndGrowthLeft()); - gi.OverwriteFullAsDeleted(); - EXPECT_FALSE(gi.HasNoDeletedAndGrowthLeft()); - gi.InitGrowthLeftNoDeleted(0); - EXPECT_FALSE(gi.HasNoDeletedAndGrowthLeft()); - gi.OverwriteFullAsDeleted(); - EXPECT_FALSE(gi.HasNoDeletedAndGrowthLeft()); +TEST(GrowthInfoViewTest, HasNoDeletedAndGrowthLeft) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + EXPECT_TRUE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); + growth_info->OverwriteFullAsDeleted(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/0, kCapacity); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); + growth_info->OverwriteFullAsDeleted(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); // After reinitialization we have no deleted slots. - gi.InitGrowthLeftNoDeleted(5); - EXPECT_TRUE(gi.HasNoDeletedAndGrowthLeft()); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + EXPECT_TRUE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); } -TEST(GrowthInfoTest, HasNoGrowthLeftAndNoDeleted) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(1); - EXPECT_FALSE(gi.HasNoGrowthLeftAndNoDeleted()); - gi.OverwriteEmptyAsFull(); - EXPECT_TRUE(gi.HasNoGrowthLeftAndNoDeleted()); - gi.OverwriteFullAsDeleted(); - EXPECT_FALSE(gi.HasNoGrowthLeftAndNoDeleted()); - gi.OverwriteFullAsEmpty(); - EXPECT_FALSE(gi.HasNoGrowthLeftAndNoDeleted()); - gi.InitGrowthLeftNoDeleted(0); - EXPECT_TRUE(gi.HasNoGrowthLeftAndNoDeleted()); - gi.OverwriteFullAsEmpty(); - EXPECT_FALSE(gi.HasNoGrowthLeftAndNoDeleted()); +TEST(GrowthInfoViewTest, HasNoGrowthLeftAndNoDeleted) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/1, kCapacity); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); + growth_info->OverwriteEmptyAsFull(); + EXPECT_TRUE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); + growth_info->OverwriteFullAsDeleted(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); + growth_info->OverwriteFullAsEmpty(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/0, kCapacity); + EXPECT_TRUE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); + growth_info->OverwriteFullAsEmpty(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndNoDeleted()); } -TEST(GrowthInfoTest, OverwriteFullAsEmpty) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - gi.OverwriteFullAsEmpty(); - EXPECT_EQ(gi.GetGrowthLeft(), 6); - gi.OverwriteFullAsDeleted(); - EXPECT_EQ(gi.GetGrowthLeft(), 6); - gi.OverwriteFullAsEmpty(); - EXPECT_EQ(gi.GetGrowthLeft(), 7); - EXPECT_FALSE(gi.HasNoDeleted()); +TEST(GrowthInfoViewTest, OverwriteFullAsEmpty) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + growth_info->OverwriteFullAsEmpty(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 6); + growth_info->OverwriteFullAsDeleted(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 6); + growth_info->OverwriteFullAsEmpty(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 7); + EXPECT_FALSE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); } -TEST(GrowthInfoTest, OverwriteEmptyAsFull) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - gi.OverwriteEmptyAsFull(); - EXPECT_EQ(gi.GetGrowthLeft(), 4); - gi.OverwriteFullAsDeleted(); - EXPECT_EQ(gi.GetGrowthLeft(), 4); - gi.OverwriteEmptyAsFull(); - EXPECT_EQ(gi.GetGrowthLeft(), 3); - EXPECT_FALSE(gi.HasNoDeleted()); +TEST(GrowthInfoViewTest, OverwriteEmptyAsFull) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + growth_info->OverwriteEmptyAsFull(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 4); + growth_info->OverwriteFullAsDeleted(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 4); + growth_info->OverwriteEmptyAsFull(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 3); + EXPECT_FALSE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); } -TEST(GrowthInfoTest, OverwriteControlAsFull) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(5); - gi.OverwriteControlAsFull(ctrl_t::kEmpty); - EXPECT_EQ(gi.GetGrowthLeft(), 4); - gi.OverwriteControlAsFull(ctrl_t::kDeleted); - EXPECT_EQ(gi.GetGrowthLeft(), 4); - gi.OverwriteFullAsDeleted(); - gi.OverwriteControlAsFull(ctrl_t::kDeleted); +TEST(GrowthInfoViewTest, OverwriteControlAsFull) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/5, kCapacity); + growth_info->OverwriteControlAsFull(ctrl_t::kEmpty); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 4); + growth_info->OverwriteControlAsFull(ctrl_t::kDeleted); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 4); + growth_info->OverwriteFullAsDeleted(); + growth_info->OverwriteControlAsFull(ctrl_t::kDeleted); // We do not count number of deleted, so the bit sticks till the next rehash. - EXPECT_FALSE(gi.HasNoDeletedAndGrowthLeft()); - EXPECT_FALSE(gi.HasNoDeleted()); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoDeletedAndGrowthLeft()); + EXPECT_FALSE(growth_info->GetGrowthInfoLowerBound().HasNoDeleted()); } -TEST(GrowthInfoTest, HasNoGrowthLeftAssumingMayHaveDeleted) { - GrowthInfo gi; - gi.InitGrowthLeftNoDeleted(1); - gi.OverwriteFullAsDeleted(); - EXPECT_EQ(gi.GetGrowthLeft(), 1); - EXPECT_FALSE(gi.HasNoGrowthLeftAssumingMayHaveDeleted()); - gi.OverwriteControlAsFull(ctrl_t::kDeleted); - EXPECT_EQ(gi.GetGrowthLeft(), 1); - EXPECT_FALSE(gi.HasNoGrowthLeftAssumingMayHaveDeleted()); - gi.OverwriteFullAsEmpty(); - EXPECT_EQ(gi.GetGrowthLeft(), 2); - EXPECT_FALSE(gi.HasNoGrowthLeftAssumingMayHaveDeleted()); - gi.OverwriteEmptyAsFull(); - EXPECT_EQ(gi.GetGrowthLeft(), 1); - EXPECT_FALSE(gi.HasNoGrowthLeftAssumingMayHaveDeleted()); - gi.OverwriteEmptyAsFull(); - EXPECT_EQ(gi.GetGrowthLeft(), 0); - EXPECT_TRUE(gi.HasNoGrowthLeftAssumingMayHaveDeleted()); +TEST(GrowthInfoViewTest, HasNoGrowthLeftAndHaveDeleted) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/1, kCapacity); + growth_info->OverwriteFullAsDeleted(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 1); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); + growth_info->OverwriteControlAsFull(ctrl_t::kDeleted); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 1); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); + growth_info->OverwriteFullAsEmpty(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 2); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); + growth_info->OverwriteEmptyAsFull(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 1); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); + growth_info->OverwriteEmptyAsFull(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 0); + EXPECT_TRUE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); +} + +TEST(GrowthInfoViewTest, HasNoGrowthLeftAndHaveDeletedReturnFalseIfNoDeleted) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/0, kCapacity); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasNoGrowthLeftAndHaveDeleted()); +} + +TEST(GrowthInfoViewTest, HasDeletedAndGrowthLeft) { + constexpr size_t kCapacity = 7; + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/1, kCapacity); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasDeletedAndGrowthLeft()); + growth_info->OverwriteFullAsDeleted(); + EXPECT_TRUE(growth_info->GetGrowthInfoLowerBound().HasDeletedAndGrowthLeft()); + growth_info->OverwriteEmptyAsFull(); + EXPECT_FALSE( + growth_info->GetGrowthInfoLowerBound().HasDeletedAndGrowthLeft()); +} + +TEST(GrowthInfoViewTest, BigCapacityGrowthOverflow) { + constexpr size_t kCapacity = 256; + for (bool has_deleted : {true, false}) { + SCOPED_TRACE(testing::Message() << "has_deleted: " << has_deleted); + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted( + /*growth_left=*/GrowthInfoLowerBound::kMaxGrowthLeftLowerBound - 1, + kCapacity); + if (has_deleted) { + growth_info->OverwriteFullAsDeleted(); + } + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound - 1); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound - 1); + EXPECT_EQ(growth_info->GetGrowthInfoLowerBound().HasNoDeleted(), + !has_deleted); + growth_info->OverwriteFullAsEmpty(); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + EXPECT_EQ(growth_info->GetGrowthInfoLowerBound().HasNoDeleted(), + !has_deleted); + for (size_t i = 1; i <= 10; ++i) { + growth_info->OverwriteFullAsEmpty(); + // LowerBound stayed the same, but total increased. + ASSERT_EQ(growth_info->GetGrowthLeftLowerBound(), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + ASSERT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound + i); + ASSERT_EQ(growth_info->GetGrowthInfoLowerBound().HasNoDeleted(), + !has_deleted); + } + } +} + +TEST(GrowthInfoViewTest, RebalanceOnInsert) { + constexpr size_t kCapacity = 512; + constexpr size_t kOrigGrowthLeft = 260; + for (bool has_deleted : {false, true}) { + SCOPED_TRACE(testing::Message() << "has_deleted: " << has_deleted); + GrowthInfoAllocator growth_info(kCapacity); + growth_info->InitGrowthLeftNoDeleted(/*growth_left=*/kOrigGrowthLeft, + kCapacity); + if (has_deleted) { + growth_info->OverwriteFullAsDeleted(); + } + + auto has_no_growth = [has_deleted](const GrowthInfoLowerBound& info) { + return has_deleted ? info.HasNoGrowthLeftAndHaveDeleted() + : info.HasNoGrowthLeftAndNoDeleted(); + }; + + auto check_no_rebalance_if_growth_left_with_deleted = + [&](GrowthInfoAllocator& info) { + if (!has_deleted) return; + const size_t growth_left = info->GetGrowthLeftLowerBound(); + if (growth_left > 0) { + auto lower_bound = info->RebalanceGrowthLeftLowerBound(kCapacity); + EXPECT_EQ(lower_bound.GetGrowthLeft(), growth_left); + } + }; + + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), + GrowthInfoLowerBound::kMaxGrowthLeftLowerBound); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), kOrigGrowthLeft); + EXPECT_EQ(growth_info->GetGrowthInfoLowerBound().HasNoDeleted(), + !has_deleted); + for (size_t i = 0; i < GrowthInfoLowerBound::kMaxGrowthLeftLowerBound; + ++i) { + growth_info->OverwriteEmptyAsFull(); + check_no_rebalance_if_growth_left_with_deleted(growth_info); + } + EXPECT_TRUE(has_no_growth(growth_info->GetGrowthInfoLowerBound())); + { + auto lower_bound = growth_info->RebalanceGrowthLeftLowerBound(kCapacity); + EXPECT_EQ(lower_bound.GetGrowthLeft(), 127); + EXPECT_EQ(lower_bound.HasNoDeleted(), !has_deleted); + } + + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 127); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), + kOrigGrowthLeft - 127); + for (size_t i = 0; i < 127; ++i) { + growth_info->OverwriteEmptyAsFull(); + check_no_rebalance_if_growth_left_with_deleted(growth_info); + } + EXPECT_TRUE(has_no_growth(growth_info->GetGrowthInfoLowerBound())); + constexpr size_t kSmallGrowthLeft = kOrigGrowthLeft - 127 * 2; + { + auto lower_bound = growth_info->RebalanceGrowthLeftLowerBound(kCapacity); + EXPECT_EQ(lower_bound.GetGrowthLeft(), kSmallGrowthLeft); + EXPECT_EQ(lower_bound.HasNoDeleted(), !has_deleted); + } + EXPECT_FALSE(has_no_growth(growth_info->GetGrowthInfoLowerBound())); + + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), kSmallGrowthLeft); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), kSmallGrowthLeft); + for (size_t i = 0; i < kSmallGrowthLeft; ++i) { + growth_info->OverwriteEmptyAsFull(); + check_no_rebalance_if_growth_left_with_deleted(growth_info); + } + EXPECT_TRUE(has_no_growth(growth_info->GetGrowthInfoLowerBound())); + { + auto lower_bound = growth_info->RebalanceGrowthLeftLowerBound(kCapacity); + EXPECT_EQ(lower_bound.GetGrowthLeft(), 0); + EXPECT_EQ(lower_bound.HasNoDeleted(), !has_deleted); + } + EXPECT_TRUE(has_no_growth(growth_info->GetGrowthInfoLowerBound())); + EXPECT_EQ(growth_info->GetGrowthLeftLowerBound(), 0); + EXPECT_EQ(growth_info->GetGrowthLeftTotalSlow(kCapacity), 0); + } } TEST(Util, OptimalMemcpySizeForSooSlotTransfer) { @@ -558,7 +849,8 @@ } } -template <class T, bool kTransferable = false, bool kSoo = false> +template <class T, bool kTransferable = false, bool kSoo = false, + bool kDestroyTrivial = false> struct ValuePolicy { using slot_type = T; using key_type = T; @@ -575,8 +867,13 @@ } template <class Allocator> - static void destroy(Allocator* alloc, slot_type* slot) { + static auto destroy(Allocator* alloc, slot_type* slot) { std::allocator_traits<Allocator>::destroy(*alloc, slot); + if constexpr (kDestroyTrivial) { + return std::true_type{}; + } else { + return std::false_type{}; + } } template <class Allocator> @@ -690,8 +987,8 @@ class StringPolicy { template <class F, class K, class V, - class = typename std::enable_if< - std::is_convertible<const K&, absl::string_view>::value>::type> + class = std::enable_if_t< + std::is_convertible_v<const K&, absl::string_view>>> decltype(std::declval<F>()( std::declval<const absl::string_view&>(), std::piecewise_construct, std::declval<std::tuple<K>>(), @@ -770,10 +1067,10 @@ }; template <typename T, bool kTransferable = false, bool kSoo = false, - class Alloc = std::allocator<T>> -struct ValueTable : InstantiateRawHashSet<ValuePolicy<T, kTransferable, kSoo>, - hash_default_hash<T>, - std::equal_to<T>, Alloc>::type { + bool kDestroyTrivial = false, class Alloc = std::allocator<T>> +struct ValueTable : InstantiateRawHashSet< + ValuePolicy<T, kTransferable, kSoo, kDestroyTrivial>, + hash_default_hash<T>, std::equal_to<T>, Alloc>::type { using Base = typename ValueTable::raw_hash_set; using Base::Base; }; @@ -911,21 +1208,29 @@ using NonSooIntTableSlotType = SizedValue<kNonSooSize>; static_assert(sizeof(NonSooIntTableSlotType) >= kNonSooSize, "too small"); using NonSooIntTable = ValueTable<NonSooIntTableSlotType>; +using NonSooIntTableTrivialDestroy = + ValueTable<NonSooIntTableSlotType, /*kTransferable=*/false, /*kSoo=*/false, + /*kDestroyTrivial=*/true>; using SooInt32Table = ValueTable<int32_t, /*kTransferable=*/true, /*kSoo=*/true>; using SooIntTable = ValueTable<int64_t, /*kTransferable=*/true, /*kSoo=*/true>; +using SooIntTableTrivialDestroy = + ValueTable<int64_t, /*kTransferable=*/true, /*kSoo=*/true, + /*kDestroyTrivial=*/true>; using NonMemcpyableSooIntTable = ValueTable<int64_t, /*kTransferable=*/false, /*kSoo=*/true>; using MemcpyableSooIntCustomAllocTable = ValueTable<int64_t, /*kTransferable=*/true, /*kSoo=*/true, + /*kDestroyTrivial=*/false, ChangingSizeAndTrackingTypeAlloc<int64_t>>; using NonMemcpyableSooIntCustomAllocTable = ValueTable<int64_t, /*kTransferable=*/false, /*kSoo=*/true, + /*kDestroyTrivial=*/false, ChangingSizeAndTrackingTypeAlloc<int64_t>>; TEST(Table, EmptyFunctorOptimization) { - static_assert(std::is_empty<std::equal_to<absl::string_view>>::value, ""); - static_assert(std::is_empty<std::allocator<int>>::value, ""); + static_assert(std::is_empty_v<std::equal_to<absl::string_view>>, ""); + static_assert(std::is_empty_v<std::allocator<int>>, ""); struct MockTableByValue { size_t capacity; @@ -1012,7 +1317,8 @@ class SooTest : public testing::Test {}; using SooTableTypes = - ::testing::Types<SooIntTable, NonSooIntTable, NonMemcpyableSooIntTable, + ::testing::Types<SooIntTable, SooIntTableTrivialDestroy, NonSooIntTable, + NonSooIntTableTrivialDestroy, NonMemcpyableSooIntTable, MemcpyableSooIntCustomAllocTable, NonMemcpyableSooIntCustomAllocTable>; TYPED_TEST_SUITE(SooTest, SooTableTypes); @@ -1117,6 +1423,116 @@ EXPECT_TRUE(t.empty()); } +TEST(Table, ReservedTableWithTombstonesDestructWell) { + constexpr int64_t kCoef = 17; + for (size_t capacity = Group::kWidth * 2 - 1; capacity < 256; + capacity = NextCapacity(capacity)) { + int64_t reserve_size = + static_cast<int64_t>(CapacityToGrowth(capacity) - capacity / 16); + IntTable t; + t.reserve(static_cast<size_t>(reserve_size)); + for (int64_t i = 0; i < reserve_size; ++i) { + ASSERT_TRUE(t.insert(i * kCoef).second); + } + ASSERT_EQ(t.size(), reserve_size); + ASSERT_EQ(t.capacity(), capacity); + // Erase and insert values until we get a tombstone. + for (int64_t i = reserve_size; i < static_cast<int64_t>(capacity) * 1000; + ++i) { + ASSERT_EQ(t.erase((i - reserve_size) * kCoef), 1); + if (RawHashSetTestOnlyAccess::CountTombstones(t) > 0) { + break; + } + ASSERT_TRUE(t.insert(i * kCoef).second); + } + ASSERT_GT(RawHashSetTestOnlyAccess::CountTombstones(t), 0); + } +} + +struct BadTwoValuesHash { + explicit BadTwoValuesHash(size_t other_value) : other_value(other_value) {} + size_t operator()(int64_t x) const { return x >= 0 ? 0 : other_value; } + size_t other_value; +}; + +struct BadTwoValuesHashTable + : raw_hash_set<IntPolicy, BadTwoValuesHash, std::equal_to<int64_t>, + std::allocator<int>> { + using Base = typename BadTwoValuesHashTable::raw_hash_set; + BadTwoValuesHashTable() = default; + using Base::Base; +}; + +TEST(Table, ReservedTableRehashWithoutGrowthWorksWell) { + if (SwisstableGenerationsEnabled()) { + GTEST_SKIP() << "Generations enabled, so rehash happening earlier."; + } + constexpr int64_t kCoef = 17; + int retries = 0; + for (size_t capacity = 31; capacity < 256; + capacity = NextCapacity(capacity)) { + SCOPED_TRACE(absl::StrCat("capacity: ", capacity)); + // Number of elements we keep empty in order to force a rehash without + // growth. RehashOrGrowToNextCapacityAndPrepareInsert grow if number of full + // slots is greater than 25/32 of capacity, so we leave 7/32 + 5 empty to + // have extra margin. + size_t empty_till_full = (capacity + 1) / 32 * 7 + 5; + int64_t reserve_size = + static_cast<int64_t>(CapacityToGrowth(capacity) - empty_till_full); + + BadTwoValuesHashTable t( + 0, + // Negative number goes to the end of the table. + // Positive numbers hash is 0, so the first Group::kWidth * 2 elements + // will be placed at the beginning of the table. + BadTwoValuesHash(static_cast<size_t>(reserve_size))); + // Remove seed to make table layout deterministic. + RawHashSetTestOnlyAccess::GetCommon(t).set_no_seed_for_testing(); + + t.reserve(static_cast<size_t>(reserve_size)); + for (int64_t i = 1; i <= reserve_size; ++i) { + ASSERT_TRUE(t.insert(i * kCoef).second); + } + ASSERT_EQ(t.size(), reserve_size); + ASSERT_EQ(t.capacity(), capacity); + bool rehashed = false; + int64_t last_erased = 0; + // We erase and insert until we get a lot of tombstones to force a rehash + // without growth. It happens relatively quickly because of the + // intentionally bad hash function that place numbers to the same slot + // depending on the sign. + for (int64_t i = 1; i <= reserve_size; ++i) { + SCOPED_TRACE(absl::StrCat("i: ", i)); + ASSERT_EQ(t.erase(i * kCoef), 1); + size_t tombstones_before = RawHashSetTestOnlyAccess::CountTombstones(t); + ASSERT_TRUE(t.insert(-i * kCoef).second); + size_t tombstones_after = RawHashSetTestOnlyAccess::CountTombstones(t); + if (tombstones_before > 1 && tombstones_after == 0) { + ASSERT_EQ(t.capacity(), capacity) << "capacity must be preserved"; + rehashed = true; + last_erased = i; + break; + } + } + if (!rehashed) { + // In debug mode rehashing may happen earlier with some probability. + // See ShouldRehashForBugDetection for details. + capacity = PreviousCapacity(capacity); + ++retries; + ASSERT_LT(retries, 50) << "Too many retries"; + continue; + } + // Verify that all elements are still in the table after rehash. + for (int64_t i = 1; i <= reserve_size; ++i) { + if (i <= last_erased) { + ASSERT_TRUE(t.contains(-i * kCoef)) << i; + } else { + ASSERT_TRUE(t.contains(i * kCoef)) << i; + } + } + } +} + TYPED_TEST(SooTest, EraseInSmallTables) { for (int64_t size = 0; size < 64; ++size) { TypeParam t; @@ -1193,46 +1609,51 @@ } TYPED_TEST(SooTest, ReserveTwice) { - for (size_t reserve_size = 0; reserve_size < 32; ++reserve_size) { - for (size_t reserve_size2 = reserve_size; reserve_size2 < 32; + for (int reserve_size = 0; reserve_size < 32; ++reserve_size) { + for (int reserve_size2 = reserve_size; reserve_size2 < 32; ++reserve_size2) { SCOPED_TRACE(absl::StrCat("reserve_size: ", reserve_size, ", reserve_size2: ", reserve_size2)); TypeParam t; - t.reserve(reserve_size); + t.reserve(static_cast<size_t>(reserve_size)); { // Insert first batch of elements. size_t cap = t.capacity(); - for (size_t i = 0; i < reserve_size; ++i) { - ASSERT_TRUE(t.insert(static_cast<int>(i)).second) << i; + for (int i = 1; i <= reserve_size; ++i) { + ASSERT_TRUE(t.insert(i).second) << i; } ASSERT_EQ(t.capacity(), cap); } - t.reserve(reserve_size2); + t.reserve(static_cast<size_t>(reserve_size2)); { // Insert second batch of elements. size_t cap = t.capacity(); - for (size_t i = reserve_size; i < reserve_size2; ++i) { - ASSERT_TRUE(t.insert(static_cast<int>(i)).second) << i; + for (int i = reserve_size + 1; i <= reserve_size2; ++i) { + ASSERT_TRUE(t.insert(i).second) << i; } ASSERT_EQ(t.capacity(), cap); } - for (size_t i = 0; i < reserve_size2; ++i) { - ASSERT_TRUE(t.contains(static_cast<int>(i))) << i; + for (int i = 1; i <= reserve_size2; ++i) { + ASSERT_TRUE(t.contains(i)) << i; + // Testing missing value to verify that we correctly have empty slots. + ASSERT_FALSE(t.contains(-i)) << i; } } } } TYPED_TEST(SooTest, GrowAfterReserve) { - for (size_t reserve_size = 1; reserve_size <= 150; ++reserve_size) { - size_t size = reserve_size + 1; + for (int reserve_size = 1; reserve_size <= 150; ++reserve_size) { TypeParam s; - s.reserve(reserve_size); - for (size_t i = 0; i < size; ++i) { - ASSERT_TRUE(s.insert(static_cast<int>(i)).second) << i; + s.reserve(static_cast<size_t>(reserve_size)); + int size = reserve_size + 1; + for (int i = 1; i <= size; ++i) { + ASSERT_TRUE(s.insert(i).second) << i; + // Testing missing value to verify that we correctly have empty slots. + ASSERT_FALSE(s.contains(-i)) << i; } EXPECT_EQ(s.size(), size); - for (size_t i = 0; i < size; ++i) { - ASSERT_TRUE(s.contains(static_cast<int>(i))) << i; + for (int i = 1; i <= size; ++i) { + ASSERT_TRUE(s.contains(i)) << i; + ASSERT_FALSE(s.contains(-i)) << i; } } } @@ -1263,6 +1684,8 @@ template <class TableType> class SmallTableResizeTest : public testing::Test {}; +// TODO: b/517078510 - Speed up compilation by reducing the number of +// types. using SmallTableTypes = ::testing::Types< IntTable, TransferableIntTable, SooIntTable, // int8 @@ -1313,23 +1736,23 @@ } TYPED_TEST(SmallTableResizeTest, ResizeGrowSmallTables) { - for (size_t source_size = 0; source_size < 32; ++source_size) { - for (size_t target_size = source_size; target_size < 32; ++target_size) { + for (int source_size = 0; source_size < 32; ++source_size) { + for (int target_size = source_size; target_size < 32; ++target_size) { for (bool rehash : {false, true}) { SCOPED_TRACE(absl::StrCat("source_size: ", source_size, ", target_size: ", target_size, ", rehash: ", rehash)); TypeParam t; - for (size_t i = 0; i < source_size; ++i) { - t.insert(static_cast<int>(i)); + for (int i = 0; i < source_size; ++i) { + t.insert(i); } if (rehash) { - t.rehash(target_size); + t.rehash(static_cast<size_t>(target_size)); } else { - t.reserve(target_size); + t.reserve(static_cast<size_t>(target_size)); } - for (size_t i = 0; i < source_size; ++i) { - ASSERT_TRUE(t.find(static_cast<int>(i)) != t.end()); + for (int i = 0; i < source_size; ++i) { + ASSERT_TRUE(t.contains(i)); EXPECT_EQ(*t.find(static_cast<int>(i)), static_cast<int>(i)); } } @@ -1337,6 +1760,23 @@ } } +// Enables sampling with 1 percent sampling rate and +// resets the rate counter for the current thread. +void SetSamplingRateTo1Percent() { + SetHashtablezEnabled(true); + SetHashtablezSampleParameter(100); // Sample ~1% of tables. + // Reset rate counter for the current thread. + TestOnlyRefreshSamplingStateForCurrentThread(); +} + +// Disables sampling and resets the rate counter for the current thread. +void DisableSampling() { + SetHashtablezEnabled(false); + SetHashtablezSampleParameter(1 << 16); + // Reset rate counter for the current thread. + TestOnlyRefreshSamplingStateForCurrentThread(); +} + TYPED_TEST(SmallTableResizeTest, ResizeReduceSmallTables) { DisableSampling(); for (size_t source_size = 0; source_size < 32; ++source_size) { @@ -2217,16 +2657,22 @@ for (int64_t i = 0; i < init_count; ++i) { t.insert(i); } - EXPECT_TRUE( - RawHashSetTestOnlyAccess::GetCommon(t).growth_info().HasNoDeleted()); + EXPECT_TRUE(RawHashSetTestOnlyAccess::GetCommon(t) + .growth_info() + .GetGrowthInfoLowerBound() + .HasNoDeleted()); t.erase(0); EXPECT_EQ(RawHashSetTestOnlyAccess::CountTombstones(t), 1); - EXPECT_FALSE( - RawHashSetTestOnlyAccess::GetCommon(t).growth_info().HasNoDeleted()); + EXPECT_FALSE(RawHashSetTestOnlyAccess::GetCommon(t) + .growth_info() + .GetGrowthInfoLowerBound() + .HasNoDeleted()); t.rehash(0); EXPECT_EQ(RawHashSetTestOnlyAccess::CountTombstones(t), 0); - EXPECT_TRUE( - RawHashSetTestOnlyAccess::GetCommon(t).growth_info().HasNoDeleted()); + EXPECT_TRUE(RawHashSetTestOnlyAccess::GetCommon(t) + .growth_info() + .GetGrowthInfoLowerBound() + .HasNoDeleted()); } TYPED_TEST(SooTest, Clear) { @@ -2382,6 +2828,25 @@ } } +TYPED_TEST(SooTest, CopyDifferentSizesWithReserve) { + for (size_t size = 0; size < 153; ++size) { + SCOPED_TRACE(absl::StrCat("size: ", size)); + TypeParam t; + t.reserve(size); + for (size_t i = 0; i < size; ++i) { + ASSERT_TRUE(t.insert(static_cast<int>(i)).second) << i; + } + auto t2 = t; + ASSERT_EQ(t2.size(), size); + for (size_t i = 0; i < size; ++i) { + ASSERT_TRUE(t2.contains(static_cast<int>(i))) << i; + } + ASSERT_TRUE(t2.insert(static_cast<int>(size)).second); + ASSERT_EQ(t2.size(), size + 1); + ASSERT_TRUE(t2.contains(static_cast<int>(size))); + } +} + TYPED_TEST(SooTest, CopyDifferentCapacities) { for (int cap = 1; cap < 100; cap = cap * 2 + 1) { TypeParam t; @@ -2578,22 +3043,21 @@ TEST(Table, NoThrowMoveConstruct) { ASSERT_TRUE( - std::is_nothrow_copy_constructible<absl::Hash<absl::string_view>>::value); - ASSERT_TRUE(std::is_nothrow_copy_constructible< - std::equal_to<absl::string_view>>::value); - ASSERT_TRUE(std::is_nothrow_copy_constructible<std::allocator<int>>::value); - EXPECT_TRUE(std::is_nothrow_move_constructible<StringTable>::value); + std::is_nothrow_copy_constructible_v<absl::Hash<absl::string_view>>); + ASSERT_TRUE( + std::is_nothrow_copy_constructible_v<std::equal_to<absl::string_view>>); + ASSERT_TRUE(std::is_nothrow_copy_constructible_v<std::allocator<int>>); + EXPECT_TRUE(std::is_nothrow_move_constructible_v<StringTable>); } TEST(Table, NoThrowMoveAssign) { + ASSERT_TRUE(std::is_nothrow_move_assignable_v<absl::Hash<absl::string_view>>); ASSERT_TRUE( - std::is_nothrow_move_assignable<absl::Hash<absl::string_view>>::value); - ASSERT_TRUE( - std::is_nothrow_move_assignable<std::equal_to<absl::string_view>>::value); - ASSERT_TRUE(std::is_nothrow_move_assignable<std::allocator<int>>::value); + std::is_nothrow_move_assignable_v<std::equal_to<absl::string_view>>); + ASSERT_TRUE(std::is_nothrow_move_assignable_v<std::allocator<int>>); ASSERT_TRUE( std::allocator_traits<std::allocator<int>>::is_always_equal::value); - EXPECT_TRUE(std::is_nothrow_move_assignable<StringTable>::value); + EXPECT_TRUE(std::is_nothrow_move_assignable_v<StringTable>); } TEST(Table, NoThrowSwappable) { @@ -2781,8 +3245,8 @@ EXPECT_FALSE(n); EXPECT_TRUE(n.empty()); - EXPECT_TRUE((std::is_same<node_type::allocator_type, - StringTable::allocator_type>::value)); + EXPECT_TRUE( + (std::is_same_v<node_type::allocator_type, StringTable::allocator_type>)); } TEST(Nodes, ExtractInsert) { @@ -3115,7 +3579,7 @@ TYPED_TEST_SUITE(RawHashSamplerTest, RawHashSamplerTestTypes); TYPED_TEST(RawHashSamplerTest, Sample) { - constexpr bool soo_enabled = std::is_same<SooInt32Table, TypeParam>::value; + constexpr bool soo_enabled = std::is_same_v<SooInt32Table, TypeParam>; // Enable the feature even if the prod default is off. SetSamplingRateTo1Percent(); @@ -3789,9 +4253,8 @@ SCOPED_TRACE("const iteration"); std::vector<int64_t> actual; auto f = [&](auto& x) { - static_assert( - std::is_const<std::remove_reference_t<decltype(x)>>::value, - "no mutable values should be passed to const ForEach"); + static_assert(std::is_const_v<std::remove_reference_t<decltype(x)>>, + "no mutable values should be passed to const ForEach"); actual.push_back(static_cast<int64_t>(x)); }; const auto& ct = t; @@ -4321,13 +4784,7 @@ } TEST(Table, DestroyedCallsFail) { -#ifdef NDEBUG - ASSERT_EQ(SwisstableAssertAccessToDestroyedTable(), - SwisstableGenerationsEnabled()); -#else - ASSERT_TRUE(SwisstableAssertAccessToDestroyedTable()); -#endif - if (!SwisstableAssertAccessToDestroyedTable()) { + if (!SwisstableGenerationsOrDebugEnabled()) { GTEST_SKIP() << "Validation not enabled."; } #if !defined(__clang__) && defined(__GNUC__) @@ -4350,7 +4807,7 @@ } TEST(Table, DestroyedCallsFailDuringDestruction) { - if (!SwisstableAssertAccessToDestroyedTable()) { + if (!SwisstableGenerationsOrDebugEnabled()) { GTEST_SKIP() << "Validation not enabled."; } #if !defined(__clang__) && defined(__GNUC__) @@ -4583,8 +5040,7 @@ ASSERT_EQ(t.capacity(), cap); // Update growth info to force resize on the next insert. This way we avoid // having to insert many elements. - common.growth_info().OverwriteManyEmptyAsFull(CapacityToGrowth(cap) - - t.size()); + common.growth_info().InitGrowthLeftNoDeleted(/*growth_left=*/0, cap); t.insert(inserted_till++); ASSERT_EQ(t.capacity(), NextCapacity(cap)); for (uint8_t i = 0; i < inserted_till; ++i) {
diff --git a/absl/container/internal/unordered_map_modifiers_test.h b/absl/container/internal/unordered_map_modifiers_test.h index a0b01a0..bb41e07 100644 --- a/absl/container/internal/unordered_map_modifiers_test.h +++ b/absl/container/internal/unordered_map_modifiers_test.h
@@ -16,6 +16,7 @@ #define ABSL_CONTAINER_INTERNAL_UNORDERED_MAP_MODIFIERS_TEST_H_ #include <memory> +#include <type_traits> #include "gmock/gmock.h" #include "gtest/gtest.h" @@ -206,7 +207,7 @@ } template <class V> -using IfNotVoid = typename std::enable_if<!std::is_void<V>::value, V>::type; +using IfNotVoid = std::enable_if_t<!std::is_void_v<V>, V>; // In openmap we chose not to return the iterator from erase because that's // more expensive. As such we adapt erase to return an iterator here.
diff --git a/absl/container/internal/unordered_set_lookup_test.h b/absl/container/internal/unordered_set_lookup_test.h index dc63118..2c9f57f 100644 --- a/absl/container/internal/unordered_set_lookup_test.h +++ b/absl/container/internal/unordered_set_lookup_test.h
@@ -51,9 +51,9 @@ m.insert(values.begin(), values.end()); for (const auto& v : values) { typename TypeParam::iterator it = m.find(v); - static_assert(std::is_same<const typename TypeParam::value_type&, - decltype(*it)>::value, - ""); + static_assert( + std::is_same_v<const typename TypeParam::value_type&, decltype(*it)>, + ""); static_assert(std::is_same<const typename TypeParam::value_type*, decltype(it.operator->())>::value, "");
diff --git a/absl/container/internal/unordered_set_modifiers_test.h b/absl/container/internal/unordered_set_modifiers_test.h index b647642..1d686af 100644 --- a/absl/container/internal/unordered_set_modifiers_test.h +++ b/absl/container/internal/unordered_set_modifiers_test.h
@@ -15,6 +15,8 @@ #ifndef ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MODIFIERS_TEST_H_ #define ABSL_CONTAINER_INTERNAL_UNORDERED_SET_MODIFIERS_TEST_H_ +#include <type_traits> + #include "gmock/gmock.h" #include "gtest/gtest.h" #include "absl/container/internal/hash_generator_testing.h" @@ -128,7 +130,7 @@ } template <class V> -using IfNotVoid = typename std::enable_if<!std::is_void<V>::value, V>::type; +using IfNotVoid = std::enable_if_t<!std::is_void_v<V>, V>; // In openmap we chose not to return the iterator from erase because that's // more expensive. As such we adapt erase to return an iterator here.
diff --git a/absl/container/linked_hash_set.h b/absl/container/linked_hash_set.h index 1b5d578..fe207c8 100644 --- a/absl/container/linked_hash_set.h +++ b/absl/container/linked_hash_set.h
@@ -450,8 +450,8 @@ return node_type(std::move(extracted_node_list)); } - template <class K = key_type, typename std::enable_if_t< - !std::is_same<K, iterator>::value, int> = 0> + template <class K = key_type, + typename std::enable_if_t<!std::is_same_v<K, iterator>, int> = 0> node_type extract(const key_arg<K>& key) { auto node = set_.extract(key); if (node.empty()) return node_type();
diff --git a/absl/container/node_hash_map_test.cc b/absl/container/node_hash_map_test.cc index 6e92bbe..107b329 100644 --- a/absl/container/node_hash_map_test.cc +++ b/absl/container/node_hash_map_test.cc
@@ -196,7 +196,7 @@ // NonMovableKey is neither copyable nor movable. We should still be able to // move nodes around. - static_assert(!std::is_move_constructible<NonMovableKey>::value, ""); + static_assert(!std::is_move_constructible_v<NonMovableKey>, ""); set1.merge(set2); EXPECT_THAT(set1,
diff --git a/absl/crc/BUILD.bazel b/absl/crc/BUILD.bazel index 49e916c..88b9ea2 100644 --- a/absl/crc/BUILD.bazel +++ b/absl/crc/BUILD.bazel
@@ -34,21 +34,6 @@ licenses(["notice"]) cc_library( - name = "cpu_detect", - srcs = [ - "internal/cpu_detect.cc", - ], - hdrs = ["internal/cpu_detect.h"], - copts = ABSL_DEFAULT_COPTS, - linkopts = ABSL_DEFAULT_LINKOPTS, - visibility = ["//visibility:private"], - deps = [ - "//absl/base", - "//absl/base:config", - ], -) - -cc_library( name = "crc_internal", srcs = [ "internal/crc.cc", @@ -63,9 +48,9 @@ linkopts = ABSL_DEFAULT_LINKOPTS, visibility = ["//visibility:private"], deps = [ - ":cpu_detect", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:cpu_detect", "//absl/base:endian", "//absl/base:prefetch", "//absl/base:raw_logging_internal", @@ -92,11 +77,11 @@ linkopts = ABSL_DEFAULT_LINKOPTS, visibility = ["//visibility:public"], deps = [ - ":cpu_detect", ":crc_internal", ":non_temporal_memcpy", "//absl/base:config", "//absl/base:core_headers", + "//absl/base:cpu_detect", "//absl/base:endian", "//absl/base:prefetch", "//absl/strings",
diff --git a/absl/crc/BUILD.gn b/absl/crc/BUILD.gn index ac64d92..98ae3af 100644 --- a/absl/crc/BUILD.gn +++ b/absl/crc/BUILD.gn
@@ -4,16 +4,6 @@ import("//third_party/abseil-cpp/absl.gni") -absl_source_set("cpu_detect") { - public = [ "internal/cpu_detect.h" ] - sources = [ "internal/cpu_detect.cc" ] - deps = [ - "//third_party/abseil-cpp/absl/base", - "//third_party/abseil-cpp/absl/base:config", - ] - visibility = [ ":*" ] -} - absl_source_set("crc_internal") { public = [ "internal/crc.h", @@ -25,9 +15,9 @@ "internal/crc_x86_arm_combined.cc", ] deps = [ - ":cpu_detect", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:cpu_detect", "//third_party/abseil-cpp/absl/base:endian", "//third_party/abseil-cpp/absl/base:prefetch", "//third_party/abseil-cpp/absl/base:raw_logging_internal", @@ -51,11 +41,11 @@ "internal/crc_non_temporal_memcpy.cc", ] deps = [ - ":cpu_detect", ":crc_internal", ":non_temporal_memcpy", "//third_party/abseil-cpp/absl/base:config", "//third_party/abseil-cpp/absl/base:core_headers", + "//third_party/abseil-cpp/absl/base:cpu_detect", "//third_party/abseil-cpp/absl/base:endian", "//third_party/abseil-cpp/absl/base:prefetch", "//third_party/abseil-cpp/absl/strings:str_format",
diff --git a/absl/crc/CMakeLists.txt b/absl/crc/CMakeLists.txt index 034d0d0..28f0bab 100644 --- a/absl/crc/CMakeLists.txt +++ b/absl/crc/CMakeLists.txt
@@ -15,21 +15,6 @@ # Internal-only target, do not depend on directly. absl_cc_library( NAME - crc_cpu_detect - HDRS - "internal/cpu_detect.h" - SRCS - "internal/cpu_detect.cc" - COPTS - ${ABSL_DEFAULT_COPTS} - DEPS - absl::base - absl::config -) - -# Internal-only target, do not depend on directly. -absl_cc_library( - NAME crc_internal HDRS "internal/crc.h" @@ -41,7 +26,7 @@ COPTS ${ABSL_DEFAULT_COPTS} DEPS - absl::crc_cpu_detect + absl::base_cpu_detect absl::bits absl::config absl::core_headers @@ -67,7 +52,7 @@ COPTS ${ABSL_DEFAULT_COPTS} DEPS - absl::crc_cpu_detect + absl::base_cpu_detect absl::crc_internal absl::non_temporal_memcpy absl::config
diff --git a/absl/crc/internal/crc_memcpy_x86_arm_combined.cc b/absl/crc/internal/crc_memcpy_x86_arm_combined.cc index 247b3aa..fd3ce60 100644 --- a/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +++ b/absl/crc/internal/crc_memcpy_x86_arm_combined.cc
@@ -54,10 +54,10 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" +#include "absl/base/internal/cpu_detect.h" #include "absl/base/optimization.h" #include "absl/base/prefetch.h" #include "absl/crc/crc32c.h" -#include "absl/crc/internal/cpu_detect.h" #include "absl/crc/internal/crc32_x86_arm_combined_simd.h" #include "absl/crc/internal/crc_memcpy.h" #include "absl/strings/string_view.h" @@ -69,6 +69,9 @@ ABSL_NAMESPACE_BEGIN namespace crc_internal { +using ::absl::base_internal::CpuType; +using ::absl::base_internal::GetCpuType; + namespace { inline crc32c_t ShortCrcCopy(char* dst, const char* src, std::size_t length, @@ -427,6 +430,7 @@ case CpuType::kArmNeoverseN2: case CpuType::kArmNeoverseV1: case CpuType::kArmNeoverseV2: + case CpuType::kNvidiaGrace: return { /*.temporal=*/new AcceleratedCrcMemcpyEngine<3, 0>(), /*.non_temporal=*/new CrcNonTemporalMemcpyEngine(),
diff --git a/absl/crc/internal/crc_x86_arm_combined.cc b/absl/crc/internal/crc_x86_arm_combined.cc index 8140378..e44a009 100644 --- a/absl/crc/internal/crc_x86_arm_combined.cc +++ b/absl/crc/internal/crc_x86_arm_combined.cc
@@ -21,9 +21,9 @@ #include "absl/base/attributes.h" #include "absl/base/config.h" +#include "absl/base/internal/cpu_detect.h" #include "absl/base/internal/endian.h" #include "absl/base/prefetch.h" -#include "absl/crc/internal/cpu_detect.h" #include "absl/crc/internal/crc32_x86_arm_combined_simd.h" #include "absl/crc/internal/crc_internal.h" #include "absl/memory/memory.h" @@ -38,6 +38,10 @@ ABSL_NAMESPACE_BEGIN namespace crc_internal { +using ::absl::base_internal::CpuType; +using ::absl::base_internal::GetCpuType; +using ::absl::base_internal::SupportsArmCRC32PMULL; + #if defined(ABSL_INTERNAL_CAN_USE_SIMD_CRC32C) // Implementation details not exported outside of file @@ -772,7 +776,7 @@ case CpuType::kIntelIcelake: case CpuType::kIntelSapphirerapids: case CpuType::kIntelEmeraldrapids: - case CpuType::kIntelGraniterapidsap: + case CpuType::kIntelGraniterapids: return new CRC32AcceleratedX86ARMCombinedMultipleStreams< 3, 2, 0, CutoffStrategy::Fold3>(); // PCLMULQDQ is slow, don't use it. @@ -785,6 +789,7 @@ case CpuType::kArmNeoverseN2: case CpuType::kArmNeoverseV1: case CpuType::kArmNeoverseN3: + case CpuType::kNvidiaGrace: return new CRC32AcceleratedX86ARMCombinedMultipleStreams< 1, 1, 0, CutoffStrategy::Unroll64CRC>(); case CpuType::kAmpereSiryn:
diff --git a/absl/flags/internal/flag.h b/absl/flags/internal/flag.h index 9771559..fd41040 100644 --- a/absl/flags/internal/flag.h +++ b/absl/flags/internal/flag.h
@@ -283,8 +283,7 @@ } template <typename ValueT, typename GenT, - typename std::enable_if<std::is_integral<ValueT>::value, int>::type = - ((void)GenT{}, 0)> + std::enable_if_t<std::is_integral_v<ValueT>, int> = ((void)GenT{}, 0)> constexpr FlagDefaultArg DefaultArg(int) { return {FlagDefaultSrc(GenT{}.value), FlagDefaultKind::kOneWord}; } @@ -300,19 +299,19 @@ template <typename T> using FlagUseValueAndInitBitStorage = - std::integral_constant<bool, std::is_trivially_copyable<T>::value && - std::is_default_constructible<T>::value && + std::integral_constant<bool, std::is_trivially_copyable_v<T> && + std::is_default_constructible_v<T> && (sizeof(T) < 8)>; template <typename T> using FlagUseOneWordStorage = - std::integral_constant<bool, std::is_trivially_copyable<T>::value && - (sizeof(T) <= 8)>; + std::integral_constant<bool, + std::is_trivially_copyable_v<T> && (sizeof(T) <= 8)>; template <class T> using FlagUseSequenceLockStorage = - std::integral_constant<bool, std::is_trivially_copyable<T>::value && - (sizeof(T) > 8)>; + std::integral_constant<bool, + std::is_trivially_copyable_v<T> && (sizeof(T) > 8)>; enum class FlagValueStorageKind : uint8_t { kValueAndInitBit = 0, @@ -616,9 +615,9 @@ std::memcpy(value, static_cast<const void*>(&v), sizeof(T)); } template <typename T, - typename std::enable_if<flags_internal::StorageKind<T>() == - FlagValueStorageKind::kValueAndInitBit, - int>::type = 0> + std::enable_if_t<flags_internal::StorageKind<T>() == + FlagValueStorageKind::kValueAndInitBit, + int> = 0> void Read(T* value) const ABSL_LOCKS_EXCLUDED(DataGuard()) { *value = absl::bit_cast<FlagValueAndInitBit<T>>(ReadOneWord()).value; }
diff --git a/absl/flags/marshalling.cc b/absl/flags/marshalling.cc index acdc880..99d1edd 100644 --- a/absl/flags/marshalling.cc +++ b/absl/flags/marshalling.cc
@@ -257,7 +257,7 @@ *dst = absl::LogSeverity::kFatal; return true; } - std::underlying_type<absl::LogSeverity>::type numeric_value; + std::underlying_type_t<absl::LogSeverity> numeric_value; if (absl::ParseFlag(text, &numeric_value, err)) { *dst = static_cast<absl::LogSeverity>(numeric_value); return true;
diff --git a/absl/functional/any_invocable.h b/absl/functional/any_invocable.h index 2fddb72..867885e 100644 --- a/absl/functional/any_invocable.h +++ b/absl/functional/any_invocable.h
@@ -164,7 +164,7 @@ : private internal_any_invocable::Impl<Sig> { private: static_assert( - std::is_function<Sig>::value, + std::is_function_v<Sig>, "The template argument of AnyInvocable must be a function type."); using Impl = internal_any_invocable::Impl<Sig>; @@ -210,7 +210,7 @@ internal_any_invocable::CanEmplace<Sig, T, Args...>::value>> explicit AnyInvocable(std::in_place_type_t<T>, Args&&... args) : Impl(std::in_place_type<std::decay_t<T>>, std::forward<Args>(args)...) { - static_assert(std::is_same<T, std::decay_t<T>>::value, + static_assert(std::is_same_v<T, std::decay_t<T>>, "The explicit template argument of in_place_type is required " "to be an unqualified object type."); } @@ -223,7 +223,7 @@ Args&&... args) : Impl(std::in_place_type<std::decay_t<T>>, ilist, std::forward<Args>(args)...) { - static_assert(std::is_same<T, std::decay_t<T>>::value, + static_assert(std::is_same_v<T, std::decay_t<T>>, "The explicit template argument of in_place_type is required " "to be an unqualified object type."); }
diff --git a/absl/functional/any_invocable_test.cc b/absl/functional/any_invocable_test.cc index 77a785a..1ad6d7b 100644 --- a/absl/functional/any_invocable_test.cc +++ b/absl/functional/any_invocable_test.cc
@@ -40,15 +40,14 @@ template <class T> struct Wrapper { - template <class U, - class = std::enable_if_t<std::is_convertible<U, T>::value>> + template <class U, class = std::enable_if_t<std::is_convertible_v<U, T>>> Wrapper(U&&); // NOLINT }; // This will cause a recursive trait instantiation if the SFINAE checks are // not ordered correctly for constructibility. -static_assert(std::is_constructible<Wrapper<absl::AnyInvocable<void()>>, - Wrapper<absl::AnyInvocable<void()>>>::value, +static_assert(std::is_constructible_v<Wrapper<absl::AnyInvocable<void()>>, + Wrapper<absl::AnyInvocable<void()>>>, ""); // A metafunction that takes the cv and l-value reference qualifiers that were @@ -56,9 +55,9 @@ // type), and . template <class Qualifiers, class This> struct QualifiersForThisImpl { - static_assert(std::is_object<This>::value, ""); + static_assert(std::is_object_v<This>, ""); using type = - std::conditional_t<std::is_const<Qualifiers>::value, const This, This>&; + std::conditional_t<std::is_const_v<Qualifiers>, const This, This>&; }; template <class Qualifiers, class This> @@ -67,9 +66,9 @@ template <class Qualifiers, class This> struct QualifiersForThisImpl<Qualifiers&&, This> { - static_assert(std::is_object<This>::value, ""); + static_assert(std::is_object_v<This>, ""); using type = - std::conditional_t<std::is_const<Qualifiers>::value, const This, This>&&; + std::conditional_t<std::is_const_v<Qualifiers>, const This, This>&&; }; template <class Qualifiers, class This> @@ -83,39 +82,37 @@ template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T, R(P...)> { - using type = - std::conditional_t<std::is_const<T>::value, R(P...) const, R(P...)>; + using type = std::conditional_t<std::is_const_v<T>, R(P...) const, R(P...)>; }; template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T&, R(P...)> { using type = - std::conditional_t<std::is_const<T>::value, R(P...) const&, R(P...) &>; + std::conditional_t<std::is_const_v<T>, R(P...) const&, R(P...) &>; }; template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T&&, R(P...)> { using type = - std::conditional_t<std::is_const<T>::value, R(P...) const&&, R(P...) &&>; + std::conditional_t<std::is_const_v<T>, R(P...) const&&, R(P...) &&>; }; template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T, R(P...) noexcept> { - using type = std::conditional_t<std::is_const<T>::value, - R(P...) const noexcept, R(P...) noexcept>; + using type = std::conditional_t<std::is_const_v<T>, R(P...) const noexcept, + R(P...) noexcept>; }; template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T&, R(P...) noexcept> { - using type = std::conditional_t<std::is_const<T>::value, - R(P...) const & noexcept, R(P...) & noexcept>; + using type = std::conditional_t<std::is_const_v<T>, R(P...) const & noexcept, + R(P...) & noexcept>; }; template <class T, class R, class... P> struct GiveQualifiersToFunImpl<T&&, R(P...) noexcept> { - using type = - std::conditional_t<std::is_const<T>::value, R(P...) const && noexcept, - R(P...) && noexcept>; + using type = std::conditional_t<std::is_const_v<T>, R(P...) const && noexcept, + R(P...) && noexcept>; }; template <class T, class Fun> @@ -305,8 +302,7 @@ using Qualifiers = Qual; static constexpr NothrowCall kCallExceptionSpec = CallExceptionSpec; static constexpr bool kIsNoexcept = kCallExceptionSpec == NothrowCall::yes; - static constexpr bool kIsRvalueQualified = - std::is_rvalue_reference<Qual>::value; + static constexpr bool kIsRvalueQualified = std::is_rvalue_reference_v<Qual>; static constexpr ObjSize kSize = Size; static constexpr ObjAlign kAlignment = Alignment; @@ -334,13 +330,12 @@ using ResultType = Int; using AnyInvocableFunTypeNotNoexcept = Int(Int, const int&, int); using UnqualifiedFunType = - typename std::conditional<kIsNoexcept, Int(Int, const int&, int) noexcept, - Int(Int, const int&, int)>::type; + std::conditional_t<kIsNoexcept, Int(Int, const int&, int) noexcept, + Int(Int, const int&, int)>; using FunType = GiveQualifiersToFun<Qualifiers, UnqualifiedFunType>; using MemFunPtrType = - typename std::conditional<kIsNoexcept, - Int (Int::*)(const int&, int) noexcept, - Int (Int::*)(const int&, int)>::type; + std::conditional_t<kIsNoexcept, Int (Int::*)(const int&, int) noexcept, + Int (Int::*)(const int&, int)>; using AnyInvType = AnyInvocable<FunType>; using AddType = add<kMovability, kDestructibility, Qualifiers, kCallExceptionSpec, kSize, kAlignment>; @@ -353,9 +348,8 @@ // These typedefs are used when testing void return type covariance. using UnqualifiedVoidFunType = - typename std::conditional<kIsNoexcept, - void(Int, const int&, int) noexcept, - void(Int, const int&, int)>::type; + std::conditional_t<kIsNoexcept, void(Int, const int&, int) noexcept, + void(Int, const int&, int)>; using VoidFunType = GiveQualifiersToFun<Qualifiers, UnqualifiedVoidFunType>; using VoidAnyInvType = AnyInvocable<VoidFunType>; using VoidThisParamType = QualifiersForThis<Qualifiers, VoidAnyInvType>; @@ -366,14 +360,14 @@ } using CompatibleAnyInvocableFunType = - std::conditional_t<std::is_rvalue_reference<Qual>::value, + std::conditional_t<std::is_rvalue_reference_v<Qual>, GiveQualifiersToFun<const _&&, UnqualifiedFunType>, GiveQualifiersToFun<const _&, UnqualifiedFunType>>; using CompatibleAnyInvType = AnyInvocable<CompatibleAnyInvocableFunType>; using IncompatibleInvocable = - std::conditional_t<std::is_rvalue_reference<Qual>::value, + std::conditional_t<std::is_rvalue_reference_v<Qual>, GiveQualifiersToFun<_&, UnqualifiedFunType>(_::*), GiveQualifiersToFun<_&&, UnqualifiedFunType>(_::*)>; }; @@ -425,7 +419,7 @@ EXPECT_FALSE(static_cast<bool>(fun)); - EXPECT_TRUE(std::is_nothrow_default_constructible<AnyInvType>::value); + EXPECT_TRUE(std::is_nothrow_default_constructible_v<AnyInvType>); } TYPED_TEST_P(AnyInvTestBasic, ConstructionNullptr) { @@ -435,8 +429,7 @@ EXPECT_FALSE(static_cast<bool>(fun)); - EXPECT_TRUE( - (std::is_nothrow_constructible<AnyInvType, std::nullptr_t>::value)); + EXPECT_TRUE((std::is_nothrow_constructible_v<AnyInvType, std::nullptr_t>)); } TYPED_TEST_P(AnyInvTestBasic, ConstructionNullFunctionPtr) { @@ -535,9 +528,8 @@ EXPECT_FALSE(fun ? true : false); // NOLINT // Make sure that the conversion is not implicit. - EXPECT_TRUE( - (std::is_nothrow_constructible<bool, const AnyInvType&>::value)); - EXPECT_FALSE((std::is_convertible<const AnyInvType&, bool>::value)); + EXPECT_TRUE((std::is_nothrow_constructible_v<bool, const AnyInvType&>)); + EXPECT_FALSE((std::is_convertible_v<const AnyInvType&, bool>)); } { @@ -556,7 +548,7 @@ // Make sure the function call operator of AnyInvocable always has the // type that was specified via the template argument. - EXPECT_TRUE((std::is_same<AnyInvCallType, FunType>::value)); + EXPECT_TRUE((std::is_same_v<AnyInvCallType, FunType>)); AnyInvType fun = &add_function; @@ -660,7 +652,7 @@ EXPECT_FALSE(static_cast<bool>(fun)); - EXPECT_TRUE(std::is_nothrow_move_constructible<AnyInvType>::value); + EXPECT_TRUE(std::is_nothrow_move_constructible_v<AnyInvType>); } TYPED_TEST_P(AnyInvTestBasic, MoveConstructionFromNonEmpty) { @@ -673,7 +665,7 @@ EXPECT_TRUE(static_cast<bool>(fun)); EXPECT_EQ(29, TypeParam::ToThisParam(fun)(7, 8, 9).value); - EXPECT_TRUE(std::is_nothrow_move_constructible<AnyInvType>::value); + EXPECT_TRUE(std::is_nothrow_move_constructible_v<AnyInvType>); } TYPED_TEST_P(AnyInvTestBasic, ComparisonWithNullptrEmpty) { @@ -705,8 +697,8 @@ using AnyInvType = typename TypeParam::AnyInvType; using ExpectedResultType = typename TypeParam::ResultType; - EXPECT_TRUE((std::is_same<typename AnyInvType::result_type, - ExpectedResultType>::value)); + EXPECT_TRUE( + (std::is_same_v<typename AnyInvType::result_type, ExpectedResultType>)); } template <class T> @@ -1197,23 +1189,23 @@ TYPED_TEST_P(AnyInvTestNoexceptFalse, ConversionConstructionConstraints) { using AnyInvType = typename TypeParam::AnyInvType; - EXPECT_TRUE((std::is_constructible< - AnyInvType, - typename TypeParam::AnyInvocableFunTypeNotNoexcept*>::value)); - EXPECT_FALSE(( - std::is_constructible<AnyInvType, - typename TypeParam::IncompatibleInvocable>::value)); + EXPECT_TRUE( + (std::is_constructible_v< + AnyInvType, typename TypeParam::AnyInvocableFunTypeNotNoexcept*>)); + EXPECT_FALSE( + (std::is_constructible_v<AnyInvType, + typename TypeParam::IncompatibleInvocable>)); } TYPED_TEST_P(AnyInvTestNoexceptFalse, ConversionAssignConstraints) { using AnyInvType = typename TypeParam::AnyInvType; - EXPECT_TRUE((std::is_assignable< - AnyInvType&, - typename TypeParam::AnyInvocableFunTypeNotNoexcept*>::value)); + EXPECT_TRUE( + (std::is_assignable_v< + AnyInvType&, typename TypeParam::AnyInvocableFunTypeNotNoexcept*>)); EXPECT_FALSE( - (std::is_assignable<AnyInvType&, - typename TypeParam::IncompatibleInvocable>::value)); + (std::is_assignable_v<AnyInvType&, + typename TypeParam::IncompatibleInvocable>)); } template <class T> @@ -1224,23 +1216,23 @@ TYPED_TEST_P(AnyInvTestNoexceptTrue, ConversionConstructionConstraints) { using AnyInvType = typename TypeParam::AnyInvType; - EXPECT_FALSE((std::is_constructible< - AnyInvType, - typename TypeParam::AnyInvocableFunTypeNotNoexcept*>::value)); - EXPECT_FALSE(( - std::is_constructible<AnyInvType, - typename TypeParam::IncompatibleInvocable>::value)); + EXPECT_FALSE( + (std::is_constructible_v< + AnyInvType, typename TypeParam::AnyInvocableFunTypeNotNoexcept*>)); + EXPECT_FALSE( + (std::is_constructible_v<AnyInvType, + typename TypeParam::IncompatibleInvocable>)); } TYPED_TEST_P(AnyInvTestNoexceptTrue, ConversionAssignConstraints) { using AnyInvType = typename TypeParam::AnyInvType; - EXPECT_FALSE((std::is_assignable< - AnyInvType&, - typename TypeParam::AnyInvocableFunTypeNotNoexcept*>::value)); EXPECT_FALSE( - (std::is_assignable<AnyInvType&, - typename TypeParam::IncompatibleInvocable>::value)); + (std::is_assignable_v< + AnyInvType&, typename TypeParam::AnyInvocableFunTypeNotNoexcept*>)); + EXPECT_FALSE( + (std::is_assignable_v<AnyInvType&, + typename TypeParam::IncompatibleInvocable>)); } template <class T> @@ -1272,8 +1264,8 @@ Result(Result&&) = delete; }; - static_assert(!std::is_move_constructible<Result>::value, ""); - static_assert(!std::is_copy_constructible<Result>::value, ""); + static_assert(!std::is_move_constructible_v<Result>, ""); + static_assert(!std::is_copy_constructible_v<Result>, ""); // Assumption check: it should nevertheless be possible to use functors that // return a Result struct according to the language rules. @@ -1300,9 +1292,8 @@ AnyInvType fun; fun = std::ref(add); add.state = 5; - EXPECT_TRUE( - (std::is_nothrow_assignable<AnyInvType&, - std::reference_wrapper<AddType>>::value)); + EXPECT_TRUE((std::is_nothrow_assignable_v<AnyInvType&, + std::reference_wrapper<AddType>>)); EXPECT_TRUE(static_cast<bool>(fun)); EXPECT_EQ(29, TypeParam::ToThisParam(fun)(7, 8, 9).value); @@ -1319,9 +1310,8 @@ AnyInvType fun = &mult_function; fun = std::ref(add); add.state = 5; - EXPECT_TRUE( - (std::is_nothrow_assignable<AnyInvType&, - std::reference_wrapper<AddType>>::value)); + EXPECT_TRUE((std::is_nothrow_assignable_v<AnyInvType&, + std::reference_wrapper<AddType>>)); EXPECT_TRUE(static_cast<bool>(fun)); EXPECT_EQ(29, TypeParam::ToThisParam(fun)(7, 8, 9).value); @@ -1339,8 +1329,8 @@ using AnyInvType = typename TypeParam::AnyInvType; using AddType = typename TypeParam::AddType; - EXPECT_FALSE(( - std::is_convertible<std::reference_wrapper<AddType>, AnyInvType>::value)); + EXPECT_FALSE( + (std::is_convertible_v<std::reference_wrapper<AddType>, AnyInvType>)); } TYPED_TEST_P(AnyInvTestRvalue, NonMoveableResultType) { @@ -1352,8 +1342,8 @@ Result(Result&&) = delete; }; - static_assert(!std::is_move_constructible<Result>::value, ""); - static_assert(!std::is_copy_constructible<Result>::value, ""); + static_assert(!std::is_move_constructible_v<Result>, ""); + static_assert(!std::is_copy_constructible_v<Result>, ""); // Assumption check: it should nevertheless be possible to use functors that // return a Result struct according to the language rules. @@ -1375,8 +1365,8 @@ using AnyInvType = typename TypeParam::AnyInvType; using AddType = typename TypeParam::AddType; - EXPECT_FALSE(( - std::is_assignable<AnyInvType&, std::reference_wrapper<AddType>>::value)); + EXPECT_FALSE( + (std::is_assignable_v<AnyInvType&, std::reference_wrapper<AddType>>)); } TYPED_TEST_P(AnyInvTestRvalue, NonConstCrashesOnSecondCall) { @@ -1678,9 +1668,8 @@ // Minimal SFINAE testing for platforms where we can't run the tests, but we can // build binaries for. -static_assert( - std::is_convertible<void (*)(), absl::AnyInvocable<void() &&>>::value, ""); -static_assert(!std::is_convertible<void*, absl::AnyInvocable<void() &&>>::value, +static_assert(std::is_convertible_v<void (*)(), absl::AnyInvocable<void() &&>>, ""); +static_assert(!std::is_convertible_v<void*, absl::AnyInvocable<void() &&>>, ""); } // namespace
diff --git a/absl/functional/function_ref.h b/absl/functional/function_ref.h index 3882eb0..f6b2f22 100644 --- a/absl/functional/function_ref.h +++ b/absl/functional/function_ref.h
@@ -91,7 +91,7 @@ // signature of this FunctionRef. template <typename F, typename... U> using EnableIfCompatible = - std::enable_if_t<std::is_invocable_r<R, F, U..., Args...>::value>; + std::enable_if_t<std::is_invocable_r_v<R, F, U..., Args...>>; // Internal constructor to supersede the copying constructor template <typename F>
diff --git a/absl/functional/function_ref_test.cc b/absl/functional/function_ref_test.cc index 81da61a..69513f4 100644 --- a/absl/functional/function_ref_test.cc +++ b/absl/functional/function_ref_test.cc
@@ -255,31 +255,28 @@ void* p[3]; }; - static_assert(std::is_same<Invoker<void, int>, void (*)(VoidPtr, int)>::value, + static_assert(std::is_same_v<Invoker<void, int>, void (*)(VoidPtr, int)>, "Scalar types should be passed by value"); static_assert( - std::is_same<Invoker<void, Trivial>, void (*)(VoidPtr, Trivial)>::value, + std::is_same_v<Invoker<void, Trivial>, void (*)(VoidPtr, Trivial)>, "Small trivial types should be passed by value"); - static_assert(std::is_same<Invoker<void, LargeTrivial>, - void (*)(VoidPtr, LargeTrivial&&)>::value, + static_assert(std::is_same_v<Invoker<void, LargeTrivial>, + void (*)(VoidPtr, LargeTrivial&&)>, "Large trivial types should be passed by rvalue reference"); static_assert( - std::is_same<Invoker<void, CopyableMovableInstance>, - void (*)(VoidPtr, CopyableMovableInstance&&)>::value, + std::is_same_v<Invoker<void, CopyableMovableInstance>, + void (*)(VoidPtr, CopyableMovableInstance&&)>, "Types with copy/move ctor should be passed by rvalue reference"); // References are passed as references. - static_assert( - std::is_same<Invoker<void, int&>, void (*)(VoidPtr, int&)>::value, - "Reference types should be preserved"); - static_assert( - std::is_same<Invoker<void, CopyableMovableInstance&>, - void (*)(VoidPtr, CopyableMovableInstance&)>::value, - "Reference types should be preserved"); - static_assert( - std::is_same<Invoker<void, CopyableMovableInstance&&>, - void (*)(VoidPtr, CopyableMovableInstance&&)>::value, - "Reference types should be preserved"); + static_assert(std::is_same_v<Invoker<void, int&>, void (*)(VoidPtr, int&)>, + "Reference types should be preserved"); + static_assert(std::is_same_v<Invoker<void, CopyableMovableInstance&>, + void (*)(VoidPtr, CopyableMovableInstance&)>, + "Reference types should be preserved"); + static_assert(std::is_same_v<Invoker<void, CopyableMovableInstance&&>, + void (*)(VoidPtr, CopyableMovableInstance&&)>, + "Reference types should be preserved"); // Make sure the address of an object received by reference is the same as the // address of the object passed by the caller.
diff --git a/absl/functional/internal/any_invocable.h b/absl/functional/internal/any_invocable.h index 262385a..ecf0319 100644 --- a/absl/functional/internal/any_invocable.h +++ b/absl/functional/internal/any_invocable.h
@@ -104,15 +104,14 @@ constexpr bool IsStoredLocally() { if constexpr (sizeof(T) <= kStorageSize && alignof(T) <= kAlignment && kAlignment % alignof(T) == 0) { - return std::is_nothrow_move_constructible<T>::value; + return std::is_nothrow_move_constructible_v<T>; } return false; } // An implementation of std::remove_cvref_t of C++20. template <class T> -using RemoveCVRef = - typename std::remove_cv<typename std::remove_reference<T>::type>::type; +using RemoveCVRef = std::remove_cv_t<std::remove_reference_t<T>>; // An implementation of std::invoke_r of C++23. template <class ReturnType, class F, class... P> @@ -147,8 +146,7 @@ template <class T> struct ForwardedParameter { using type = decltype(( - ForwardImpl<T>)(std::integral_constant<bool, - std::is_scalar<T>::value>())); + ForwardImpl<T>)(std::integral_constant<bool, std::is_scalar_v<T>>())); }; template <class T> @@ -244,7 +242,7 @@ TypeErasedState* const to) noexcept { static_assert(IsStoredLocally<T>(), "Local storage must only be used for supported types."); - static_assert(!std::is_trivially_copyable<T>::value, + static_assert(!std::is_trivially_copyable_v<T>, "Locally stored types must be trivially copyable."); T& from_object = (ObjectInLocalStorage<T>)(from); @@ -417,8 +415,8 @@ explicit CoreImpl(TypedConversionConstruct<QualDecayedTRef>, F&& f) { using DecayedT = RemoveCVRef<QualDecayedTRef>; - if constexpr (std::is_pointer<DecayedT>::value || - std::is_member_pointer<DecayedT>::value) { + if constexpr (std::is_pointer_v<DecayedT> || + std::is_member_pointer_v<DecayedT>) { // This condition handles types that decay into pointers. This includes // function references, which cannot be null. GCC warns against comparing // their decayed form with nullptr (https://godbolt.org/z/9r9TMTcPK). @@ -605,20 +603,23 @@ // An alias that always yields std::true_type (used with constraints) where // substitution failures happen when forming the template arguments. +// +// NOTE: We avoid std::void_t here to avoid a bug in GCC < 11: +// https://godbolt.org/z/sxbfGMdcb template <class... T> using TrueAlias = - std::integral_constant<bool, sizeof(absl::void_t<T...>*) != 0>; + std::integral_constant<bool, sizeof(std::common_type<T...>*) != 0>; /*SFINAE constraints for the conversion-constructor.*/ template <class Sig, class F, class = std::enable_if_t< - !std::is_same<RemoveCVRef<F>, AnyInvocable<Sig>>::value>> -using CanConvert = TrueAlias< - std::enable_if_t<!IsInPlaceType<RemoveCVRef<F>>::value>, - std::enable_if_t<Impl<Sig>::template CallIsValid<F>::value>, - std::enable_if_t< - Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<F>::value>, - std::enable_if_t<std::is_constructible<std::decay_t<F>, F>::value>>; + !std::is_same_v<RemoveCVRef<F>, AnyInvocable<Sig>>>> +using CanConvert = + TrueAlias<std::enable_if_t<!IsInPlaceType<RemoveCVRef<F>>::value>, + std::enable_if_t<Impl<Sig>::template CallIsValid<F>::value>, + std::enable_if_t< + Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<F>::value>, + std::enable_if_t<std::is_constructible_v<std::decay_t<F>, F>>>; /*SFINAE constraints for the std::in_place constructors.*/ template <class Sig, class F, class... Args> @@ -626,17 +627,17 @@ std::enable_if_t<Impl<Sig>::template CallIsValid<F>::value>, std::enable_if_t< Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<F>::value>, - std::enable_if_t<std::is_constructible<std::decay_t<F>, Args...>::value>>; + std::enable_if_t<std::is_constructible_v<std::decay_t<F>, Args...>>>; /*SFINAE constraints for the conversion-assign operator.*/ template <class Sig, class F, class = std::enable_if_t< - !std::is_same<RemoveCVRef<F>, AnyInvocable<Sig>>::value>> -using CanAssign = TrueAlias< - std::enable_if_t<Impl<Sig>::template CallIsValid<F>::value>, - std::enable_if_t< - Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<F>::value>, - std::enable_if_t<std::is_constructible<std::decay_t<F>, F>::value>>; + !std::is_same_v<RemoveCVRef<F>, AnyInvocable<Sig>>>> +using CanAssign = + TrueAlias<std::enable_if_t<Impl<Sig>::template CallIsValid<F>::value>, + std::enable_if_t< + Impl<Sig>::template CallIsNoexceptIfSigIsNoexcept<F>::value>, + std::enable_if_t<std::is_constructible_v<std::decay_t<F>, F>>>; /*SFINAE constraints for the reference-wrapper conversion-assign operator.*/ template <class Sig, class F> @@ -656,19 +657,19 @@ // to give the right result when ReturnType is non-moveable in toolchains that // don't treat non-moveable result types correctly. For example this was the // case in libc++ before commit c3a24882 (2022-05). -#define ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_true(inv_quals) \ - std::enable_if_t<std::disjunction< \ - std::is_nothrow_invocable_r< \ +#define ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_true(inv_quals) \ + std::enable_if_t<std::disjunction_v< \ + std::is_nothrow_invocable_r< \ ReturnType, UnwrapStdReferenceWrapper<std::decay_t<F>> inv_quals, \ - P...>, \ - std::conjunction< \ - std::is_nothrow_invocable< \ + P...>, \ + std::conjunction< \ + std::is_nothrow_invocable< \ UnwrapStdReferenceWrapper<std::decay_t<F>> inv_quals, P...>, \ - std::is_same< \ - ReturnType, \ - std::invoke_result_t< \ + std::is_same< \ + ReturnType, \ + std::invoke_result_t< \ UnwrapStdReferenceWrapper<std::decay_t<F>> inv_quals, \ - P...>>>>::value> + P...>>>>> #define ABSL_INTERNAL_ANY_INVOCABLE_NOEXCEPT_CONSTRAINT_false(inv_quals) // @@ -716,8 +717,7 @@ /*knows how to properly type-erase the invocation.*/ \ template <class F> \ explicit Impl(ConversionConstruct, F&& f) \ - : Core(TypedConversionConstruct< \ - typename std::decay<F>::type inv_quals>(), \ + : Core(TypedConversionConstruct<std::decay_t<F> inv_quals>(), \ std::forward<F>(f)) {} \ \ /*Forward along the in-place construction parameters.*/ \ @@ -736,8 +736,8 @@ InvokerType<noex, ReturnType, P...>* ExtractInvoker() cv { \ using QualifiedTestType = int cv ref; \ auto* invoker = this->invoker_; \ - if (!std::is_const<QualifiedTestType>::value && \ - std::is_rvalue_reference<QualifiedTestType>::value) { \ + if (!std::is_const_v<QualifiedTestType> && \ + std::is_rvalue_reference_v<QualifiedTestType>) { \ ABSL_ASSERT([this]() { \ /* We checked that this isn't const above, so const_cast is safe */ \ const_cast<Impl*>(this)->invoker_ = InvokedAfterMove; \
diff --git a/absl/functional/internal/function_ref.h b/absl/functional/internal/function_ref.h index 46147e9..3170ff9 100644 --- a/absl/functional/internal/function_ref.h +++ b/absl/functional/internal/function_ref.h
@@ -40,18 +40,16 @@ // Chooses the best type for passing T as an argument. // Attempt to be close to SystemV AMD64 ABI. Objects with trivial copy ctor are // passed by value. -template <typename T, - bool IsLValueReference = std::is_lvalue_reference<T>::value> +template <typename T, bool IsLValueReference = std::is_lvalue_reference_v<T>> struct PassByValue : std::false_type {}; template <typename T> struct PassByValue<T, /*IsLValueReference=*/false> - : std::integral_constant<bool, - std::is_trivially_copy_constructible<T>::value && - std::is_trivially_copy_assignable< - typename std::remove_cv<T>::type>::value && - std::is_trivially_destructible<T>::value && - sizeof(T) <= 2 * sizeof(void*)> {}; + : std::integral_constant< + bool, std::is_trivially_copy_constructible_v<T> && + std::is_trivially_copy_assignable_v<std::remove_cv_t<T>> && + std::is_trivially_destructible_v<T> && + sizeof(T) <= 2 * sizeof(void*)> {}; template <typename T> struct ForwardT : std::conditional<PassByValue<T>::value, T, T&&> {}; @@ -142,7 +140,7 @@ } template <bool C> -using EnableIf = typename ::std::enable_if<C, int>::type; +using EnableIf = typename ::std::enable_if_t<C, int>; } // namespace functional_internal ABSL_NAMESPACE_END
diff --git a/absl/hash/hash.h b/absl/hash/hash.h index e2bde0c..fc791ab 100644 --- a/absl/hash/hash.h +++ b/absl/hash/hash.h
@@ -327,10 +327,9 @@ // redirected to the original `state` object. The `state` object must outlive // the `HashState` instance. `T` must be a subclass of `HashStateBase<T>` - // users should not define their own HashState types. - template < - typename T, - std::enable_if_t< - std::is_base_of<hash_internal::HashStateBase<T>, T>::value, int> = 0> + template <typename T, + std::enable_if_t< + std::is_base_of_v<hash_internal::HashStateBase<T>, T>, int> = 0> static HashState Create(T* state) { HashState s; s.Init(state);
diff --git a/absl/hash/hash_benchmark.cc b/absl/hash/hash_benchmark.cc index b39ef75..d0ebdbc 100644 --- a/absl/hash/hash_benchmark.cc +++ b/absl/hash/hash_benchmark.cc
@@ -350,7 +350,7 @@ template <class T> struct PodRand { - static_assert(std::is_pod<T>::value, ""); + static_assert(std::is_pod_v<T>, ""); static_assert(kEntropySize + sizeof(T) < sizeof(entropy), ""); T Get(size_t i) const {
diff --git a/absl/hash/hash_instantiated_test.cc b/absl/hash/hash_instantiated_test.cc index f0df86f..a7b7826 100644 --- a/absl/hash/hash_instantiated_test.cc +++ b/absl/hash/hash_instantiated_test.cc
@@ -60,8 +60,7 @@ UnorderedSequence(std::initializer_list<TT> l) : values_(l.begin(), l.end()) {} template <typename ForwardIterator, - typename std::enable_if<!std::is_integral<ForwardIterator>::value, - bool>::type = true> + std::enable_if_t<!std::is_integral_v<ForwardIterator>, bool> = true> UnorderedSequence(ForwardIterator begin, ForwardIterator end) : values_(begin, end) {} // one-argument constructor of value type T, to appease older toolchains that
diff --git a/absl/hash/hash_test.cc b/absl/hash/hash_test.cc index d888660..e128b62 100644 --- a/absl/hash/hash_test.cc +++ b/absl/hash/hash_test.cc
@@ -800,11 +800,11 @@ TEST(IsHashableTest, ValidHash) { EXPECT_TRUE((is_hashable<int>::value)); - EXPECT_TRUE(std::is_default_constructible<absl::Hash<int>>::value); - EXPECT_TRUE(std::is_copy_constructible<absl::Hash<int>>::value); - EXPECT_TRUE(std::is_move_constructible<absl::Hash<int>>::value); - EXPECT_TRUE(std::is_copy_assignable<absl::Hash<int>>::value); - EXPECT_TRUE(std::is_move_assignable<absl::Hash<int>>::value); + EXPECT_TRUE(std::is_default_constructible_v<absl::Hash<int>>); + EXPECT_TRUE(std::is_copy_constructible_v<absl::Hash<int>>); + EXPECT_TRUE(std::is_move_constructible_v<absl::Hash<int>>); + EXPECT_TRUE(std::is_copy_assignable_v<absl::Hash<int>>); + EXPECT_TRUE(std::is_move_assignable_v<absl::Hash<int>>); EXPECT_TRUE(IsHashCallable<int>::value); EXPECT_TRUE(IsAggregateInitializable<absl::Hash<int>>::value); } @@ -812,11 +812,11 @@ TEST(IsHashableTest, PoisonHash) { struct X {}; EXPECT_FALSE((is_hashable<X>::value)); - EXPECT_FALSE(std::is_default_constructible<absl::Hash<X>>::value); - EXPECT_FALSE(std::is_copy_constructible<absl::Hash<X>>::value); - EXPECT_FALSE(std::is_move_constructible<absl::Hash<X>>::value); - EXPECT_FALSE(std::is_copy_assignable<absl::Hash<X>>::value); - EXPECT_FALSE(std::is_move_assignable<absl::Hash<X>>::value); + EXPECT_FALSE(std::is_default_constructible_v<absl::Hash<X>>); + EXPECT_FALSE(std::is_copy_constructible_v<absl::Hash<X>>); + EXPECT_FALSE(std::is_move_constructible_v<absl::Hash<X>>); + EXPECT_FALSE(std::is_copy_assignable_v<absl::Hash<X>>); + EXPECT_FALSE(std::is_move_assignable_v<absl::Hash<X>>); EXPECT_FALSE(IsHashCallable<X>::value); #if !defined(__GNUC__) || defined(__clang__) // TODO(b/144368551): As of GCC 8.4 this does not compile. @@ -891,8 +891,8 @@ template <InvokeTag allowed, InvokeTag... tags> struct EnableIfContained - : std::enable_if<std::disjunction< - std::integral_constant<bool, allowed == tags>...>::value> {}; + : std::enable_if<std::disjunction_v< + std::integral_constant<bool, allowed == tags>...>> {}; template < typename H, InvokeTag... Tags, @@ -1016,10 +1016,10 @@ static_assert(sizeof(StructWithPadding) > sizeof(char) + sizeof(int), "StructWithPadding doesn't have padding"); -static_assert(std::is_standard_layout<StructWithPadding>::value, ""); +static_assert(std::is_standard_layout_v<StructWithPadding>, ""); // This check has to be disabled because libstdc++ doesn't support it. -// static_assert(std::is_trivially_constructible<StructWithPadding>::value, ""); +// static_assert(std::is_trivially_constructible_v<StructWithPadding>, ""); template <typename T> struct ArraySlice {
diff --git a/absl/hash/hash_testing.h b/absl/hash/hash_testing.h index 66a1545..d932f63 100644 --- a/absl/hash/hash_testing.h +++ b/absl/hash/hash_testing.h
@@ -282,7 +282,7 @@ template <typename... T> struct TypeSet { - template <typename U, bool = std::disjunction<std::is_same<T, U>...>::value> + template <typename U, bool = std::disjunction_v<std::is_same<T, U>...>> struct Insert { using type = TypeSet<U, T...>; }; @@ -302,7 +302,7 @@ template <typename... T> using VariantForTypes = typename MakeTypeSet< - const typename std::decay<T>::type*...>::template apply<std::variant>; + const std::decay_t<T>*...>::template apply<std::variant>; template <typename Container> struct ContainerAsVector {
diff --git a/absl/hash/internal/hash.h b/absl/hash/internal/hash.h index 8837679..972e9bd 100644 --- a/absl/hash/internal/hash.h +++ b/absl/hash/internal/hash.h
@@ -381,8 +381,8 @@ // Integral types other than bool should be uniquely represented on any // platform that this will plausibly be ported to. template <typename Integral> -struct is_uniquely_represented< - Integral, typename std::enable_if<std::is_integral<Integral>::value>::type> +struct is_uniquely_represented<Integral, + std::enable_if_t<std::is_integral_v<Integral>>> : std::true_type {}; template <> @@ -460,8 +460,8 @@ // We use SFINAE to ensure that this overload only accepts bool, not types that // are convertible to bool. template <typename H, typename B> -typename std::enable_if<std::is_same<B, bool>::value, H>::type AbslHashValue( - H hash_state, B value) { +std::enable_if_t<std::is_same_v<B, bool>, H> AbslHashValue(H hash_state, + B value) { // We use ~size_t{} instead of 1 so that all bits are different between // true/false instead of only 1. return H::combine(std::move(hash_state), @@ -470,21 +470,19 @@ // AbslHashValue() for hashing enum values template <typename H, typename Enum> -typename std::enable_if<std::is_enum<Enum>::value, H>::type AbslHashValue( - H hash_state, Enum e) { +std::enable_if_t<std::is_enum_v<Enum>, H> AbslHashValue(H hash_state, Enum e) { // In practice, we could almost certainly just invoke hash_bytes directly, // but it's possible that a sanitizer might one day want to // store data in the unused bits of an enum. To avoid that risk, we // convert to the underlying type before hashing. Hopefully this will get // optimized away; if not, we can reopen discussion with c-toolchain-team. return H::combine(std::move(hash_state), - static_cast<typename std::underlying_type<Enum>::type>(e)); + static_cast<std::underlying_type_t<Enum>>(e)); } // AbslHashValue() for hashing floating-point values template <typename H, typename Float> -typename std::enable_if<std::is_same<Float, float>::value || - std::is_same<Float, double>::value, - H>::type +std::enable_if_t<std::is_same_v<Float, float> || std::is_same_v<Float, double>, + H> AbslHashValue(H hash_state, Float value) { return hash_internal::hash_bytes(std::move(hash_state), value == 0 ? 0 : value); @@ -495,8 +493,8 @@ // of it. This means we can't use hash_bytes on a long double and have to // convert it to something else first. template <typename H, typename LongDouble> -typename std::enable_if<std::is_same<LongDouble, long double>::value, H>::type -AbslHashValue(H hash_state, LongDouble value) { +std::enable_if_t<std::is_same_v<LongDouble, long double>, H> AbslHashValue( + H hash_state, LongDouble value) { const int category = std::fpclassify(value); switch (category) { case FP_INFINITE: @@ -540,8 +538,7 @@ // AbslHashValue() for hashing pointers template <typename H, typename T> -std::enable_if_t<std::is_pointer<T>::value, H> AbslHashValue(H hash_state, - T ptr) { +std::enable_if_t<std::is_pointer_v<T>, H> AbslHashValue(H hash_state, T ptr) { auto v = reinterpret_cast<uintptr_t>(ptr); // Due to alignment, pointers tend to have low bits as zero, and the next few // bits follow a pattern since they are also multiples of some base value. @@ -579,7 +576,7 @@ // On other platforms, we assume that pointers-to-members do not have // padding. #ifdef __cpp_lib_has_unique_object_representations - static_assert(std::has_unique_object_representations<T C::*>::value); + static_assert(std::has_unique_object_representations_v<T C::*>); #endif // __cpp_lib_has_unique_object_representations return n; #endif @@ -595,8 +592,7 @@ // AbslHashValue() for hashing pairs template <typename H, typename T1, typename T2> -typename std::enable_if<is_hashable<T1>::value && is_hashable<T2>::value, - H>::type +std::enable_if_t<is_hashable<T1>::value && is_hashable<T2>::value, H> AbslHashValue(H hash_state, const std::pair<T1, T2>& p) { return H::combine(std::move(hash_state), p.first, p.second); } @@ -615,7 +611,7 @@ // for now. H #else // _MSC_VER -typename std::enable_if<std::conjunction<is_hashable<Ts>...>::value, H>::type +std::enable_if_t<std::conjunction_v<is_hashable<Ts>...>, H> #endif // _MSC_VER AbslHashValue(H hash_state, const std::tuple<Ts...>& t) { return hash_internal::hash_tuple(std::move(hash_state), t, @@ -664,9 +660,9 @@ // Support std::wstring, std::u16string and std::u32string. template <typename Char, typename Alloc, typename H, - typename = std::enable_if_t<std::is_same<Char, wchar_t>::value || - std::is_same<Char, char16_t>::value || - std::is_same<Char, char32_t>::value>> + typename = std::enable_if_t<std::is_same_v<Char, wchar_t> || + std::is_same_v<Char, char16_t> || + std::is_same_v<Char, char32_t>>> H AbslHashValue( H hash_state, const std::basic_string<Char, std::char_traits<Char>, Alloc>& str) { @@ -675,9 +671,9 @@ // Support std::wstring_view, std::u16string_view and std::u32string_view. template <typename Char, typename H, - typename = std::enable_if_t<std::is_same<Char, wchar_t>::value || - std::is_same<Char, char16_t>::value || - std::is_same<Char, char32_t>::value>> + typename = std::enable_if_t<std::is_same_v<Char, wchar_t> || + std::is_same_v<Char, char16_t> || + std::is_same_v<Char, char32_t>>> H AbslHashValue(H hash_state, std::basic_string_view<Char> str) { return H::combine_contiguous(std::move(hash_state), str.data(), str.size()); } @@ -713,7 +709,7 @@ // AbslHashValue for hashing std::array template <typename H, typename T, size_t N> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, const std::array<T, N>& array) { return H::combine_contiguous(std::move(hash_state), array.data(), array.size()); @@ -721,7 +717,7 @@ // AbslHashValue for hashing std::deque template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, const std::deque<T, Allocator>& deque) { // TODO(gromer): investigate a more efficient implementation taking // advantage of the chunk structure. @@ -733,7 +729,7 @@ // AbslHashValue for hashing std::forward_list template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, const std::forward_list<T, Allocator>& list) { size_t size = 0; for (const T& t : list) { @@ -745,7 +741,7 @@ // AbslHashValue for hashing std::list template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, const std::list<T, Allocator>& list) { for (const auto& t : list) { hash_state = H::combine(std::move(hash_state), t); @@ -759,8 +755,7 @@ // implementation of std::hash. It does not have a .data(), and a fallback for // std::hash<> is most likely faster. template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value && !std::is_same<T, bool>::value, - H>::type +std::enable_if_t<is_hashable<T>::value && !std::is_same_v<T, bool>, H> AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) { return H::combine_contiguous(std::move(hash_state), vector.data(), vector.size()); @@ -776,8 +771,7 @@ // it. More details on the bug: // https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102531 template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value && std::is_same<T, bool>::value, - H>::type +std::enable_if_t<is_hashable<T>::value && std::is_same_v<T, bool>, H> AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) { typename H::AbslInternalPiecewiseCombiner combiner; for (const auto& i : vector) { @@ -796,8 +790,7 @@ // Mixing in the size (as we do in our other vector<> implementations) on top // of the library-provided hash implementation avoids this QOI issue. template <typename H, typename T, typename Allocator> -typename std::enable_if<is_hashable<T>::value && std::is_same<T, bool>::value, - H>::type +std::enable_if_t<is_hashable<T>::value && std::is_same_v<T, bool>, H> AbslHashValue(H hash_state, const std::vector<T, Allocator>& vector) { return H::combine(std::move(hash_state), std::hash<std::vector<T, Allocator>>{}(vector), @@ -812,8 +805,7 @@ // AbslHashValue for hashing std::map template <typename H, typename Key, typename T, typename Compare, typename Allocator> -typename std::enable_if<is_hashable<Key>::value && is_hashable<T>::value, - H>::type +std::enable_if_t<is_hashable<Key>::value && is_hashable<T>::value, H> AbslHashValue(H hash_state, const std::map<Key, T, Compare, Allocator>& map) { for (const auto& t : map) { hash_state = H::combine(std::move(hash_state), t); @@ -824,8 +816,7 @@ // AbslHashValue for hashing std::multimap template <typename H, typename Key, typename T, typename Compare, typename Allocator> -typename std::enable_if<is_hashable<Key>::value && is_hashable<T>::value, - H>::type +std::enable_if_t<is_hashable<Key>::value && is_hashable<T>::value, H> AbslHashValue(H hash_state, const std::multimap<Key, T, Compare, Allocator>& map) { for (const auto& t : map) { @@ -836,7 +827,7 @@ // AbslHashValue for hashing std::set template <typename H, typename Key, typename Compare, typename Allocator> -typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<Key>::value, H> AbslHashValue( H hash_state, const std::set<Key, Compare, Allocator>& set) { for (const auto& t : set) { hash_state = H::combine(std::move(hash_state), t); @@ -846,7 +837,7 @@ // AbslHashValue for hashing std::multiset template <typename H, typename Key, typename Compare, typename Allocator> -typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<Key>::value, H> AbslHashValue( H hash_state, const std::multiset<Key, Compare, Allocator>& set) { for (const auto& t : set) { hash_state = H::combine(std::move(hash_state), t); @@ -861,7 +852,7 @@ // AbslHashValue for hashing std::unordered_set template <typename H, typename Key, typename Hash, typename KeyEqual, typename Alloc> -typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<Key>::value, H> AbslHashValue( H hash_state, const std::unordered_set<Key, Hash, KeyEqual, Alloc>& s) { return H::combine( H::combine_unordered(std::move(hash_state), s.begin(), s.end()), @@ -871,7 +862,7 @@ // AbslHashValue for hashing std::unordered_multiset template <typename H, typename Key, typename Hash, typename KeyEqual, typename Alloc> -typename std::enable_if<is_hashable<Key>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<Key>::value, H> AbslHashValue( H hash_state, const std::unordered_multiset<Key, Hash, KeyEqual, Alloc>& s) { return H::combine( @@ -882,8 +873,7 @@ // AbslHashValue for hashing std::unordered_set template <typename H, typename Key, typename T, typename Hash, typename KeyEqual, typename Alloc> -typename std::enable_if<is_hashable<Key>::value && is_hashable<T>::value, - H>::type +std::enable_if_t<is_hashable<Key>::value && is_hashable<T>::value, H> AbslHashValue(H hash_state, const std::unordered_map<Key, T, Hash, KeyEqual, Alloc>& s) { return H::combine( @@ -894,8 +884,7 @@ // AbslHashValue for hashing std::unordered_multiset template <typename H, typename Key, typename T, typename Hash, typename KeyEqual, typename Alloc> -typename std::enable_if<is_hashable<Key>::value && is_hashable<T>::value, - H>::type +std::enable_if_t<is_hashable<Key>::value && is_hashable<T>::value, H> AbslHashValue(H hash_state, const std::unordered_multimap<Key, T, Hash, KeyEqual, Alloc>& s) { return H::combine( @@ -909,14 +898,14 @@ // AbslHashValue for hashing std::reference_wrapper template <typename H, typename T> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, std::reference_wrapper<T> opt) { return H::combine(std::move(hash_state), opt.get()); } // AbslHashValue for hashing std::optional template <typename H, typename T> -typename std::enable_if<is_hashable<T>::value, H>::type AbslHashValue( +std::enable_if_t<is_hashable<T>::value, H> AbslHashValue( H hash_state, const std::optional<T>& opt) { if (opt) hash_state = H::combine(std::move(hash_state), *opt); return H::combine(std::move(hash_state), opt.has_value()); @@ -933,8 +922,8 @@ // AbslHashValue for hashing std::variant template <typename H, typename... T> -typename std::enable_if<std::conjunction<is_hashable<T>...>::value, H>::type -AbslHashValue(H hash_state, const std::variant<T...>& v) { +std::enable_if_t<std::conjunction_v<is_hashable<T>...>, H> AbslHashValue( + H hash_state, const std::variant<T...>& v) { if (!v.valueless_by_exception()) { hash_state = std::visit(VariantVisitor<H>{std::move(hash_state)}, v); } @@ -974,15 +963,15 @@ // This overload accepts only uniquely-represented types, and hashes them by // hashing the entire range of bytes. template <typename H, typename T> -typename std::enable_if<is_uniquely_represented<T>::value, H>::type -hash_range_or_bytes(H hash_state, const T* data, size_t size) { +std::enable_if_t<is_uniquely_represented<T>::value, H> hash_range_or_bytes( + H hash_state, const T* data, size_t size) { const auto* bytes = reinterpret_cast<const unsigned char*>(data); return H::combine_contiguous(std::move(hash_state), bytes, sizeof(T) * size); } template <typename H, typename T> -typename std::enable_if<!is_uniquely_represented<T>::value, H>::type -hash_range_or_bytes(H hash_state, const T* data, size_t size) { +std::enable_if_t<!is_uniquely_represented<T>::value, H> hash_range_or_bytes( + H hash_state, const T* data, size_t size) { for (const auto end = data + size; data < end; ++data) { hash_state = H::combine(std::move(hash_state), *data); } @@ -1321,8 +1310,7 @@ struct HashValueProbe { template <typename H, typename T> static auto Invoke(H state, const T& value) -> std::enable_if_t< - std::is_same<H, - decltype(AbslHashValue(std::move(state), value))>::value, + std::is_same_v<H, decltype(AbslHashValue(std::move(state), value))>, H> { return AbslHashValue(std::move(state), value); } @@ -1332,9 +1320,9 @@ #if ABSL_HASH_INTERNAL_SUPPORT_LEGACY_HASH_ template <typename H, typename T> static auto Invoke(H state, const T& value) -> std::enable_if_t< - std::is_convertible< + std::is_convertible_v< decltype(ABSL_INTERNAL_LEGACY_HASH_NAMESPACE::hash<T>()(value)), - size_t>::value, + size_t>, H> { return hash_internal::hash_bytes( std::move(state),
diff --git a/absl/hash/internal/spy_hash_state.h b/absl/hash/internal/spy_hash_state.h index 0eb9ffe..51caaf1 100644 --- a/absl/hash/internal/spy_hash_state.h +++ b/absl/hash/internal/spy_hash_state.h
@@ -48,7 +48,7 @@ class SpyHashStateImpl : public HashStateBase<SpyHashStateImpl<T>> { public: SpyHashStateImpl() : error_(std::make_shared<std::optional<std::string>>()) { - static_assert(std::is_void<T>::value, ""); + static_assert(std::is_void_v<T>, ""); } // Move-only @@ -270,7 +270,7 @@ template < typename T, typename U, // Only trigger for when (T != U), - typename = std::enable_if_t<!std::is_same<T, U>::value>, + typename = std::enable_if_t<!std::is_same_v<T, U>>, // This statement works in two ways: // - First, it instantiates RunOnStartup and forces the initialization of // `run`, which set the global variable.
diff --git a/absl/log/BUILD.bazel b/absl/log/BUILD.bazel index e6793b1..b1cff4b 100644 --- a/absl/log/BUILD.bazel +++ b/absl/log/BUILD.bazel
@@ -502,6 +502,7 @@ "//absl/log/internal:test_matchers", "//absl/strings", "//absl/strings:str_format", + "//absl/types:source_location", "@googletest//:gtest", "@googletest//:gtest_main", ],
diff --git a/absl/log/BUILD.gn b/absl/log/BUILD.gn index baaaafa..715f348 100644 --- a/absl/log/BUILD.gn +++ b/absl/log/BUILD.gn
@@ -347,6 +347,7 @@ "//third_party/abseil-cpp/absl/strings", "//third_party/abseil-cpp/absl/strings:str_format", "//third_party/abseil-cpp/absl/strings:string_view", + "//third_party/abseil-cpp/absl/types:source_location", ] }
diff --git a/absl/log/CMakeLists.txt b/absl/log/CMakeLists.txt index b271d09..e0a307b 100644 --- a/absl/log/CMakeLists.txt +++ b/absl/log/CMakeLists.txt
@@ -1017,6 +1017,7 @@ absl::log absl::log_internal_test_matchers absl::scoped_mock_log + absl::source_location absl::str_format absl::strings GTest::gmock_main
diff --git a/absl/log/check.h b/absl/log/check.h index 9e2219b..10674c9 100644 --- a/absl/log/check.h +++ b/absl/log/check.h
@@ -102,11 +102,11 @@ // Check failed: 2 * x == y (6 vs. 5) oops! // // The values must implement the appropriate comparison operator as well as -// `operator<<(std::ostream&, ...)`. Care is taken to ensure that each -// argument is evaluated exactly once, and that anything which is legal to pass -// as a function argument is legal here. In particular, the arguments may be -// temporary expressions which will end up being destroyed at the end of the -// statement, +// either `operator<<(std::ostream&, ...)` or `AbslStringify`. Care is taken to +// ensure that each argument is evaluated exactly once, and that anything which +// is legal to pass as a function argument is legal here. In particular, the +// arguments may be temporary expressions which will end up being destroyed at +// the end of the statement, // // Example: //
diff --git a/absl/log/internal/BUILD.bazel b/absl/log/internal/BUILD.bazel index 6995b26..bc47330 100644 --- a/absl/log/internal/BUILD.bazel +++ b/absl/log/internal/BUILD.bazel
@@ -111,10 +111,7 @@ "//absl:friends", "//absl/log:__pkg__", ], - deps = [ - "//absl/base:config", - "//absl/base:core_headers", - ], + deps = ["//absl/base:config"], ) cc_library(
diff --git a/absl/log/internal/BUILD.gn b/absl/log/internal/BUILD.gn index 9bda100..9710839 100644 --- a/absl/log/internal/BUILD.gn +++ b/absl/log/internal/BUILD.gn
@@ -44,10 +44,7 @@ absl_source_set("config") { public = [ "config.h" ] - deps = [ - "//third_party/abseil-cpp/absl/base:config", - "//third_party/abseil-cpp/absl/base:core_headers", - ] + deps = [ "//third_party/abseil-cpp/absl/base:config" ] } absl_source_set("flags") {
diff --git a/absl/log/internal/container.h b/absl/log/internal/container.h index 1144652..ea2445f 100644 --- a/absl/log/internal/container.h +++ b/absl/log/internal/container.h
@@ -236,7 +236,7 @@ explicit EnumLogger(E e) : e_(e) {} friend std::ostream &operator<<(std::ostream &out, const EnumLogger &v) { - using I = typename std::underlying_type<E>::type; + using I = std::underlying_type_t<E>; return out << static_cast<I>(v.e_); } @@ -301,7 +301,7 @@ // LOG(INFO) << LogEnum(kRed); template <typename E> detail::EnumLogger<E> LogEnum(E e) { - static_assert(std::is_enum<E>::value, "must be an enum"); + static_assert(std::is_enum_v<E>, "must be an enum"); return detail::EnumLogger<E>(e); }
diff --git a/absl/log/internal/log_format.cc b/absl/log/internal/log_format.cc index 23cef88..d54cf19 100644 --- a/absl/log/internal/log_format.cc +++ b/absl/log/internal/log_format.cc
@@ -51,8 +51,8 @@ // comparisons when log_internal::Tid is unsigned. It can be replaced with a // constexpr if once the minimum C++ version Abseil supports is C++17. template <typename T> -inline std::enable_if_t<!std::is_signed<T>::value> -PutLeadingWhitespace(T tid, char*& p) { +inline std::enable_if_t<!std::is_signed_v<T>> PutLeadingWhitespace(T tid, + char*& p) { if (tid < 10) *p++ = ' '; if (tid < 100) *p++ = ' '; if (tid < 1000) *p++ = ' '; @@ -62,8 +62,8 @@ } template <typename T> -inline std::enable_if_t<std::is_signed<T>::value> -PutLeadingWhitespace(T tid, char*& p) { +inline std::enable_if_t<std::is_signed_v<T>> PutLeadingWhitespace(T tid, + char*& p) { if (tid >= 0 && tid < 10) *p++ = ' '; if (tid > -10 && tid < 100) *p++ = ' '; if (tid > -100 && tid < 1000) *p++ = ' ';
diff --git a/absl/log/internal/log_message.h b/absl/log/internal/log_message.h index 7e2a86a..b9b533e 100644 --- a/absl/log/internal/log_message.h +++ b/absl/log/internal/log_message.h
@@ -179,6 +179,13 @@ LogMessage& operator<<(wchar_t* absl_nullable v); LogMessage& operator<<(wchar_t v); + // Overload for absl::SourceLocation or the std::source_location alias. + LogMessage& operator<<(const absl::SourceLocation& loc) { + OstreamView view(*data_); + view.stream() << loc.file_name() << ':' << loc.line(); + return *this; + } + // Handle stream manipulators e.g. std::endl. LogMessage& operator<<(std::ostream& (*absl_nonnull m)(std::ostream& os)); LogMessage& operator<<(std::ios_base& (*absl_nonnull m)(std::ios_base& os));
diff --git a/absl/log/internal/vlog_config.h b/absl/log/internal/vlog_config.h index da020f8..f65eb5d 100644 --- a/absl/log/internal/vlog_config.h +++ b/absl/log/internal/vlog_config.h
@@ -120,7 +120,7 @@ std::atomic<int> v_; std::atomic<VLogSite*> next_; }; -static_assert(std::is_trivially_destructible<VLogSite>::value, +static_assert(std::is_trivially_destructible_v<VLogSite>, "VLogSite must be trivially destructible"); // Returns the current verbose log level of `file`.
diff --git a/absl/log/internal/vlog_config_benchmark.cc b/absl/log/internal/vlog_config_benchmark.cc index 9438324..7700edb 100644 --- a/absl/log/internal/vlog_config_benchmark.cc +++ b/absl/log/internal/vlog_config_benchmark.cc
@@ -116,7 +116,7 @@ sites[num_tus - 1]->next_.store(nullptr, std::memory_order_seq_cst); } ~SyntheticBinary() { - static_assert(std::is_trivially_destructible<VLogSite>::value, ""); + static_assert(std::is_trivially_destructible_v<VLogSite>, ""); absl::log_internal::SetVModuleListHeadForTestOnly(nullptr); }
diff --git a/absl/log/log_entry_test.cc b/absl/log/log_entry_test.cc index d9bfa1f..3af10b6 100644 --- a/absl/log/log_entry_test.cc +++ b/absl/log/log_entry_test.cc
@@ -208,7 +208,7 @@ TEST(LogEntryTest, NegativeFields) { // When Abseil's minimum C++ version is C++17, this conditional can be // converted to a constexpr if and the static_cast below removed. - if (std::is_signed<absl::LogEntry::tid_t>::value) { + if (std::is_signed_v<absl::LogEntry::tid_t>) { LogEntryTestPeer entry( "foo.cc", -1234, kUsePrefix, absl::LogSeverity::kInfo, "2020-01-02T03:04:05.6789", static_cast<absl::LogEntry::tid_t>(-451), @@ -318,7 +318,7 @@ TEST(LogEntryTest, LongNegativeFields) { // When Abseil's minimum C++ version is C++17, this conditional can be // converted to a constexpr if and the static_cast below removed. - if (std::is_signed<absl::LogEntry::tid_t>::value) { + if (std::is_signed_v<absl::LogEntry::tid_t>) { LogEntryTestPeer entry( "I am the very model of a modern Major-General / " "I've information vegetable, animal, and mineral.",
diff --git a/absl/log/log_format_test.cc b/absl/log/log_format_test.cc index b23d90f..aa520e4 100644 --- a/absl/log/log_format_test.cc +++ b/absl/log/log_format_test.cc
@@ -41,6 +41,7 @@ #include "absl/strings/str_cat.h" #include "absl/strings/str_format.h" #include "absl/strings/string_view.h" +#include "absl/types/source_location.h" namespace { using ::absl::log_internal::AsString; @@ -291,6 +292,21 @@ LOG(INFO) << value.bits; } +TEST(SourceLocationTest, Format) { + absl::ScopedMockLog test_sink(absl::MockLogDefault::kDisallowUnexpected); + EXPECT_CALL(test_sink, Send).Times(0); + + absl::SourceLocation loc = absl::SourceLocation::current(); + std::string expected = absl::StrCat(__FILE__, ":", __LINE__ - 1); + + EXPECT_CALL(test_sink, Send(AllOf(TextMessage(Eq(expected)), + ENCODED_MESSAGE(HasValues(ElementsAre( + ValueWithStr(Eq(expected)))))))); + + test_sink.StartCapturingLogs(); + LOG(INFO) << loc; +} + // Ignore these test cases on GCC due to "is too small to hold all values ..." // warning. #if !defined(__GNUC__) || defined(__clang__) @@ -310,9 +326,10 @@ template <typename T> class UnsignedEnumLogFormatTest : public testing::Test {}; -using UnsignedEnumTypes = std::conditional< - std::is_signed<std::underlying_type<MyUnsignedEnum>::type>::value, - Types<MyUnsignedIntEnum>, Types<MyUnsignedEnum, MyUnsignedIntEnum>>::type; +using UnsignedEnumTypes = + std::conditional_t<std::is_signed_v<std::underlying_type_t<MyUnsignedEnum>>, + Types<MyUnsignedIntEnum>, + Types<MyUnsignedEnum, MyUnsignedIntEnum>>; TYPED_TEST_SUITE(UnsignedEnumLogFormatTest, UnsignedEnumTypes); TYPED_TEST(UnsignedEnumLogFormatTest, Positive) { @@ -371,10 +388,10 @@ template <typename T> class SignedEnumLogFormatTest : public testing::Test {}; -using SignedEnumTypes = std::conditional< - std::is_signed<std::underlying_type<MyUnsignedEnum>::type>::value, - Types<MyUnsignedEnum, MySignedEnum, MySignedIntEnum>, - Types<MySignedEnum, MySignedIntEnum>>::type; +using SignedEnumTypes = + std::conditional_t<std::is_signed_v<std::underlying_type_t<MyUnsignedEnum>>, + Types<MyUnsignedEnum, MySignedEnum, MySignedIntEnum>, + Types<MySignedEnum, MySignedIntEnum>>; TYPED_TEST_SUITE(SignedEnumLogFormatTest, SignedEnumTypes); TYPED_TEST(SignedEnumLogFormatTest, Positive) {
diff --git a/absl/memory/memory.h b/absl/memory/memory.h index 7be4983..4719364 100644 --- a/absl/memory/memory.h +++ b/absl/memory/memory.h
@@ -70,8 +70,8 @@ // obtained from array-new expressions (even though that would compile!). template <typename T> std::unique_ptr<T> WrapUnique(T* ptr) { - static_assert(!std::is_array<T>::value, "array types are unsupported"); - static_assert(std::is_object<T>::value, "non-object types are unsupported"); + static_assert(!std::is_array_v<T>, "array types are unsupported"); + static_assert(std::is_object_v<T>, "non-object types are unsupported"); return std::unique_ptr<T>(ptr); } @@ -96,6 +96,11 @@ // should use `std::make_unique`. using std::make_unique; +#if defined(__cpp_lib_smart_ptr_for_overwrite) && \ + __cpp_lib_smart_ptr_for_overwrite >= 202002L +using std::make_unique_for_overwrite; +#else + namespace memory_internal { // Traits to select proper overload and return type for @@ -143,6 +148,8 @@ typename memory_internal::MakeUniqueResult<T>::invalid make_unique_for_overwrite(Args&&... /* args */) = delete; +#endif // __cpp_lib_smart_ptr_for_overwrite + // ----------------------------------------------------------------------------- // Function Template: RawPtr() // -----------------------------------------------------------------------------
diff --git a/absl/memory/memory_test.cc b/absl/memory/memory_test.cc index 34bd212..8ed14c6 100644 --- a/absl/memory/memory_test.cc +++ b/absl/memory/memory_test.cc
@@ -148,7 +148,7 @@ ArrayWatch::allocs().clear(); auto p = absl::make_unique_for_overwrite<ArrayWatch[]>(5); - static_assert(std::is_same<decltype(p), std::unique_ptr<ArrayWatch[]>>::value, + static_assert(std::is_same_v<decltype(p), std::unique_ptr<ArrayWatch[]>>, "unexpected return type"); EXPECT_THAT(ArrayWatch::allocs(), ElementsAre(5 * sizeof(ArrayWatch))); } @@ -194,19 +194,19 @@ TEST(RawPtrTest, Nullptr) { auto p = absl::RawPtr(nullptr); - EXPECT_TRUE((std::is_same<std::nullptr_t, decltype(p)>::value)); + EXPECT_TRUE((std::is_same_v<std::nullptr_t, decltype(p)>)); EXPECT_EQ(nullptr, p); } TEST(RawPtrTest, Null) { auto p = absl::RawPtr(nullptr); - EXPECT_TRUE((std::is_same<std::nullptr_t, decltype(p)>::value)); + EXPECT_TRUE((std::is_same_v<std::nullptr_t, decltype(p)>)); EXPECT_EQ(nullptr, p); } TEST(RawPtrTest, Zero) { auto p = absl::RawPtr(nullptr); - EXPECT_TRUE((std::is_same<std::nullptr_t, decltype(p)>::value)); + EXPECT_TRUE((std::is_same_v<std::nullptr_t, decltype(p)>)); EXPECT_EQ(nullptr, p); }
diff --git a/absl/meta/type_traits.h b/absl/meta/type_traits.h index e77112f..9d58270 100644 --- a/absl/meta/type_traits.h +++ b/absl/meta/type_traits.h
@@ -231,7 +231,7 @@ using remove_cvref = std::remove_cvref<T>; template <typename T> -using remove_cvref_t = typename std::remove_cvref<T>::type; +using remove_cvref_t = std::remove_cvref_t<T>; #else // remove_cvref() // @@ -239,8 +239,7 @@ // C++20. template <typename T> struct remove_cvref { - using type = - typename std::remove_cv<typename std::remove_reference<T>::type>::type; + using type = std::remove_cv_t<std::remove_reference_t<T>>; }; template <typename T> @@ -296,9 +295,9 @@ template <typename Key> struct IsHashable< Key, - std::enable_if_t<std::is_convertible< + std::enable_if_t<std::is_convertible_v< decltype(std::declval<std::hash<Key>&>()(std::declval<Key const&>())), - std::size_t>::value>> : std::true_type {}; + std::size_t>>> : std::true_type {}; struct AssertHashEnabledHelper { private: @@ -316,19 +315,19 @@ static_assert(IsHashable<Key>::value, "std::hash<Key> does not provide a call operator"); static_assert( - std::is_default_constructible<std::hash<Key>>::value, + std::is_default_constructible_v<std::hash<Key>>, "std::hash<Key> must be default constructible when it is enabled"); static_assert( - std::is_copy_constructible<std::hash<Key>>::value, + std::is_copy_constructible_v<std::hash<Key>>, "std::hash<Key> must be copy constructible when it is enabled"); - static_assert(std::is_copy_assignable<std::hash<Key>>::value, + static_assert(std::is_copy_assignable_v<std::hash<Key>>, "std::hash<Key> must be copy assignable when it is enabled"); // is_destructible is unchecked as it's implied by each of the // is_constructible checks. using ReturnType = decltype(GetReturnType<Key>(0)); - static_assert(std::is_same<ReturnType, NAT>::value || - std::is_same<ReturnType, size_t>::value, - "std::hash<Key> must return size_t"); + static_assert( + std::is_same_v<ReturnType, NAT> || std::is_same_v<ReturnType, size_t>, + "std::hash<Key> must return size_t"); return nullptr; } @@ -362,7 +361,7 @@ template <class T, class IsNoexcept = std::integral_constant< bool, noexcept(swap(std::declval<T&>(), std::declval<T&>()))>> -using IsNothrowSwappableImpl = typename std::enable_if<IsNoexcept::value>::type; +using IsNothrowSwappableImpl = std::enable_if_t<IsNoexcept::value>; // IsSwappable // @@ -481,10 +480,10 @@ // TODO(b/325479096): Remove this case. template <class T> struct is_trivially_relocatable - : std::integral_constant< - bool, std::is_trivially_copyable<T>::value || - (__is_trivially_relocatable(T) && - std::is_trivially_move_assignable<T>::value)> {}; + : std::integral_constant<bool, + std::is_trivially_copyable_v<T> || + (__is_trivially_relocatable(T) && + std::is_trivially_move_assignable_v<T>)> {}; #else // Otherwise we use a fallback that detects only those types we can feasibly // detect. Any type that is trivially copyable is by definition trivially @@ -545,14 +544,13 @@ // Do not specialize or use this directly. It's an implementation detail. template <typename T, typename = void> struct IsOwnerImpl : std::false_type { - static_assert(std::is_same<T, absl::remove_cvref_t<T>>::value, + static_assert(std::is_same_v<T, absl::remove_cvref_t<T>>, "type must lack qualifiers"); }; template <typename T> struct IsOwnerImpl< - T, - std::enable_if_t<std::is_class<typename T::absl_internal_is_view>::value>> + T, std::enable_if_t<std::is_class_v<typename T::absl_internal_is_view>>> : std::negation<typename T::absl_internal_is_view> {}; // A trait to determine whether a type is an owner. @@ -588,14 +586,13 @@ // Do not specialize or use this directly. template <typename T, typename = void> struct IsViewImpl : std::false_type { - static_assert(std::is_same<T, absl::remove_cvref_t<T>>::value, + static_assert(std::is_same_v<T, absl::remove_cvref_t<T>>, "type must lack qualifiers"); }; template <typename T> struct IsViewImpl< - T, - std::enable_if_t<std::is_class<typename T::absl_internal_is_view>::value>> + T, std::enable_if_t<std::is_class_v<typename T::absl_internal_is_view>>> : T::absl_internal_is_view {}; // A trait to determine whether a type is a view. @@ -607,7 +604,7 @@ // If it ever becomes possible to detect [[gsl::Pointer]], we should leverage // it: https://wg21.link/p1179 template <typename T> -struct IsView : std::integral_constant<bool, std::is_pointer<T>::value || +struct IsView : std::integral_constant<bool, std::is_pointer_v<T> || IsViewImpl<T>::value> {}; // This allows incomplete types to be used for associative containers, and also @@ -634,7 +631,7 @@ // to a "view" (such as std::string_view) to be a lifetime-bound assignment. template <typename T, typename U> using IsLifetimeBoundAssignment = std::conjunction< - std::integral_constant<bool, !std::is_lvalue_reference<U>::value>, + std::integral_constant<bool, !std::is_lvalue_reference_v<U>>, IsOwner<absl::remove_cvref_t<U>>, IsView<absl::remove_cvref_t<T>>>; } // namespace type_traits_internal
diff --git a/absl/meta/type_traits_test.cc b/absl/meta/type_traits_test.cc index 6d0085c..9734fc1 100644 --- a/absl/meta/type_traits_test.cc +++ b/absl/meta/type_traits_test.cc
@@ -69,14 +69,12 @@ struct StructC {}; struct TypeWithBarFunction { - template <class T, - std::enable_if_t<std::is_same<T&&, StructA&>::value, int> = 0> + template <class T, std::enable_if_t<std::is_same_v<T&&, StructA&>, int> = 0> ReturnType bar(T&&, const StructB&, StructC&&) &&; // NOLINT }; struct TypeWithBarFunctionAndConvertibleReturnType { - template <class T, - std::enable_if_t<std::is_same<T&&, StructA&>::value, int> = 0> + template <class T, std::enable_if_t<std::is_same_v<T&&, StructA&>, int> = 0> ConvertibleToReturnType bar(T&&, const StructB&, StructC&&) &&; // NOLINT }; @@ -110,31 +108,29 @@ } TEST(TypeTraitsTest, TestRemoveCVRef) { + EXPECT_TRUE((std::is_same_v<typename absl::remove_cvref<int>::type, int>)); + EXPECT_TRUE((std::is_same_v<typename absl::remove_cvref<int&>::type, int>)); + EXPECT_TRUE((std::is_same_v<typename absl::remove_cvref<int&&>::type, int>)); EXPECT_TRUE( - (std::is_same<typename absl::remove_cvref<int>::type, int>::value)); - EXPECT_TRUE( - (std::is_same<typename absl::remove_cvref<int&>::type, int>::value)); - EXPECT_TRUE( - (std::is_same<typename absl::remove_cvref<int&&>::type, int>::value)); - EXPECT_TRUE(( - std::is_same<typename absl::remove_cvref<const int&>::type, int>::value)); - EXPECT_TRUE( - (std::is_same<typename absl::remove_cvref<int*>::type, int*>::value)); + (std::is_same_v<typename absl::remove_cvref<const int&>::type, int>)); + EXPECT_TRUE((std::is_same_v<typename absl::remove_cvref<int*>::type, int*>)); // Does not remove const in this case. - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<const int*>::type, - const int*>::value)); + EXPECT_TRUE((std::is_same_v<typename absl::remove_cvref<const int*>::type, + const int*>)); EXPECT_TRUE( - (std::is_same<typename absl::remove_cvref<int[2]>::type, int[2]>::value)); - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<int(&)[2]>::type, - int[2]>::value)); - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<int(&&)[2]>::type, - int[2]>::value)); - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<const int[2]>::type, - int[2]>::value)); - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<const int(&)[2]>::type, - int[2]>::value)); - EXPECT_TRUE((std::is_same<typename absl::remove_cvref<const int(&&)[2]>::type, - int[2]>::value)); + (std::is_same_v<typename absl::remove_cvref<int[2]>::type, int[2]>)); + EXPECT_TRUE( + (std::is_same_v<typename absl::remove_cvref<int (&)[2]>::type, int[2]>)); + EXPECT_TRUE( + (std::is_same_v<typename absl::remove_cvref<int (&&)[2]>::type, int[2]>)); + EXPECT_TRUE(( + std::is_same_v<typename absl::remove_cvref<const int[2]>::type, int[2]>)); + EXPECT_TRUE( + (std::is_same_v<typename absl::remove_cvref<const int (&)[2]>::type, + int[2]>)); + EXPECT_TRUE( + (std::is_same_v<typename absl::remove_cvref<const int (&&)[2]>::type, + int[2]>)); } TEST(TypeTraitsTest, TestTypeIdentity) { @@ -159,20 +155,17 @@ enum class TypeEnum { A, B, C, D }; struct GetTypeT { - template <typename T, - std::enable_if_t<std::is_same<T, TypeA>::value, int> = 0> + template <typename T, std::enable_if_t<std::is_same_v<T, TypeA>, int> = 0> TypeEnum operator()(Wrap<T>) const { return TypeEnum::A; } - template <typename T, - std::enable_if_t<std::is_same<T, TypeB>::value, int> = 0> + template <typename T, std::enable_if_t<std::is_same_v<T, TypeB>, int> = 0> TypeEnum operator()(Wrap<T>) const { return TypeEnum::B; } - template <typename T, - std::enable_if_t<std::is_same<T, TypeC>::value, int> = 0> + template <typename T, std::enable_if_t<std::is_same_v<T, TypeC>, int> = 0> TypeEnum operator()(Wrap<T>) const { return TypeEnum::C; }
diff --git a/absl/numeric/bits.h b/absl/numeric/bits.h index 9a0c229..47e9901 100644 --- a/absl/numeric/bits.h +++ b/absl/numeric/bits.h
@@ -68,16 +68,14 @@ // Rotating functions template <class T> -[[nodiscard]] constexpr - typename std::enable_if<std::is_unsigned<T>::value, T>::type - rotl(T x, int s) noexcept { +[[nodiscard]] constexpr std::enable_if_t<std::is_unsigned_v<T>, T> rotl( + T x, int s) noexcept { return numeric_internal::RotateLeft(x, s); } template <class T> -[[nodiscard]] constexpr - typename std::enable_if<std::is_unsigned<T>::value, T>::type - rotr(T x, int s) noexcept { +[[nodiscard]] constexpr std::enable_if_t<std::is_unsigned_v<T>, T> rotr( + T x, int s) noexcept { return numeric_internal::RotateRight(x, s); } @@ -103,39 +101,35 @@ // not be marked as constexpr due to constraints of the compiler/available // intrinsics. template <class T> -ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - countl_zero(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, int> +countl_zero(T x) noexcept { return numeric_internal::CountLeadingZeroes(x); } template <class T> -ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - countl_one(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, int> +countl_one(T x) noexcept { // Avoid integer promotion to a wider type return countl_zero(static_cast<T>(~x)); } template <class T> -ABSL_INTERNAL_CONSTEXPR_CTZ inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - countr_zero(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CTZ inline std::enable_if_t<std::is_unsigned_v<T>, int> +countr_zero(T x) noexcept { return numeric_internal::CountTrailingZeroes(x); } template <class T> -ABSL_INTERNAL_CONSTEXPR_CTZ inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - countr_one(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CTZ inline std::enable_if_t<std::is_unsigned_v<T>, int> +countr_one(T x) noexcept { // Avoid integer promotion to a wider type return countr_zero(static_cast<T>(~x)); } template <class T> -ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - popcount(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline std::enable_if_t<std::is_unsigned_v<T>, + int> +popcount(T x) noexcept { return numeric_internal::Popcount(x); } @@ -152,26 +146,24 @@ // Returns: true if x is an integral power of two; false otherwise. template <class T> -constexpr inline typename std::enable_if<std::is_unsigned<T>::value, bool>::type -has_single_bit(T x) noexcept { +constexpr inline std::enable_if_t<std::is_unsigned_v<T>, bool> has_single_bit( + T x) noexcept { return x != 0 && (x & (x - 1)) == 0; } // Returns: If x == 0, 0; otherwise one plus the base-2 logarithm of x, with any // fractional part discarded. template <class T> -ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, int>::type - bit_width(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, int> +bit_width(T x) noexcept { return std::numeric_limits<T>::digits - countl_zero(x); } // Returns: If x == 0, 0; otherwise the maximal value y such that // has_single_bit(y) is true and y <= x. template <class T> -ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, T>::type - bit_floor(T x) noexcept { +ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, T> +bit_floor(T x) noexcept { return x == 0 ? 0 : T{1} << (bit_width(x) - 1); } @@ -179,9 +171,8 @@ // // Preconditions: N is representable as a value of type T. template <class T> -ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, T>::type - bit_ceil(T x) { +ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, T> +bit_ceil(T x) { // If T is narrower than unsigned, T{1} << bit_width will be promoted. We // want to force it to wraparound so that bit_ceil of an invalid value are not // core constant expressions.
diff --git a/absl/numeric/int128.cc b/absl/numeric/int128.cc index 281bf12..9987c15 100644 --- a/absl/numeric/int128.cc +++ b/absl/numeric/int128.cc
@@ -90,7 +90,7 @@ template <typename T> uint128 MakeUint128FromFloat(T v) { - static_assert(std::is_floating_point<T>::value, ""); + static_assert(std::is_floating_point_v<T>, ""); // Rounding behavior is towards zero, same as for built-in types.
diff --git a/absl/numeric/int128_benchmark.cc b/absl/numeric/int128_benchmark.cc index c37abec..3fee6be 100644 --- a/absl/numeric/int128_benchmark.cc +++ b/absl/numeric/int128_benchmark.cc
@@ -30,9 +30,8 @@ constexpr size_t kSampleSize = 1000000; -template <typename T, - typename H = typename std::conditional< - std::numeric_limits<T>::is_signed, int64_t, uint64_t>::type> +template <typename T, typename H = std::conditional_t< + std::numeric_limits<T>::is_signed, int64_t, uint64_t>> std::vector<std::pair<T, T>> GetRandomClass128SampleUniformDivisor() { std::vector<std::pair<T, T>> values; absl::InsecureBitGen random; @@ -70,9 +69,8 @@ BENCHMARK_TEMPLATE(BM_RemainderClass128UniformDivisor, absl::uint128); BENCHMARK_TEMPLATE(BM_RemainderClass128UniformDivisor, absl::int128); -template <typename T, - typename H = typename std::conditional< - std::numeric_limits<T>::is_signed, int64_t, uint64_t>::type> +template <typename T, typename H = std::conditional_t< + std::numeric_limits<T>::is_signed, int64_t, uint64_t>> std::vector<std::pair<T, H>> GetRandomClass128SampleSmallDivisor() { std::vector<std::pair<T, H>> values; absl::InsecureBitGen random; @@ -147,9 +145,8 @@ // Some implementations of <random> do not support __int128 when it is // available, so we make our own uniform_int_distribution-like type. -template <typename T, - typename H = typename std::conditional< - std::is_same<T, __int128>::value, int64_t, uint64_t>::type> +template <typename T, typename H = std::conditional_t< + std::is_same_v<T, __int128>, int64_t, uint64_t>> class UniformIntDistribution128 { public: // NOLINTNEXTLINE: mimicking std::uniform_int_distribution API @@ -162,9 +159,8 @@ std::uniform_int_distribution<H> dist64_; }; -template <typename T, - typename H = typename std::conditional< - std::is_same<T, __int128>::value, int64_t, uint64_t>::type> +template <typename T, typename H = std::conditional_t< + std::is_same_v<T, __int128>, int64_t, uint64_t>> std::vector<std::pair<T, T>> GetRandomIntrinsic128SampleUniformDivisor() { std::vector<std::pair<T, T>> values; absl::InsecureBitGen random; @@ -203,9 +199,8 @@ BENCHMARK_TEMPLATE(BM_RemainderIntrinsic128UniformDivisor, unsigned __int128); BENCHMARK_TEMPLATE(BM_RemainderIntrinsic128UniformDivisor, __int128); -template <typename T, - typename H = typename std::conditional< - std::is_same<T, __int128>::value, int64_t, uint64_t>::type> +template <typename T, typename H = std::conditional_t< + std::is_same_v<T, __int128>, int64_t, uint64_t>> std::vector<std::pair<T, H>> GetRandomIntrinsic128SampleSmallDivisor() { std::vector<std::pair<T, H>> values; absl::InsecureBitGen random;
diff --git a/absl/numeric/int128_test.cc b/absl/numeric/int128_test.cc index 336db78..35eacae 100644 --- a/absl/numeric/int128_test.cc +++ b/absl/numeric/int128_test.cc
@@ -53,22 +53,22 @@ TYPED_TEST_SUITE(Uint128IntegerTraitsTest, IntegerTypes); TYPED_TEST(Uint128IntegerTraitsTest, ConstructAssignTest) { - static_assert(std::is_constructible<absl::uint128, TypeParam>::value, + static_assert(std::is_constructible_v<absl::uint128, TypeParam>, "absl::uint128 must be constructible from TypeParam"); - static_assert(std::is_assignable<absl::uint128&, TypeParam>::value, + static_assert(std::is_assignable_v<absl::uint128&, TypeParam>, "absl::uint128 must be assignable from TypeParam"); - static_assert(!std::is_assignable<TypeParam&, absl::uint128>::value, + static_assert(!std::is_assignable_v<TypeParam&, absl::uint128>, "TypeParam must not be assignable from absl::uint128"); } TYPED_TEST_SUITE(Uint128FloatTraitsTest, FloatingPointTypes); TYPED_TEST(Uint128FloatTraitsTest, ConstructAssignTest) { - static_assert(std::is_constructible<absl::uint128, TypeParam>::value, + static_assert(std::is_constructible_v<absl::uint128, TypeParam>, "absl::uint128 must be constructible from TypeParam"); - static_assert(!std::is_assignable<absl::uint128&, TypeParam>::value, + static_assert(!std::is_assignable_v<absl::uint128&, TypeParam>, "absl::uint128 must not be assignable from TypeParam"); - static_assert(!std::is_assignable<TypeParam&, absl::uint128>::value, + static_assert(!std::is_assignable_v<TypeParam&, absl::uint128>, "TypeParam must not be assignable from absl::uint128"); } @@ -76,29 +76,27 @@ // These type traits done separately as TYPED_TEST requires typeinfo, and not // all platforms have this for __int128 even though they define the type. TEST(Uint128, IntrinsicTypeTraitsTest) { - static_assert(std::is_constructible<absl::uint128, __int128>::value, + static_assert(std::is_constructible_v<absl::uint128, __int128>, "absl::uint128 must be constructible from __int128"); - static_assert(std::is_assignable<absl::uint128&, __int128>::value, + static_assert(std::is_assignable_v<absl::uint128&, __int128>, "absl::uint128 must be assignable from __int128"); - static_assert(!std::is_assignable<__int128&, absl::uint128>::value, + static_assert(!std::is_assignable_v<__int128&, absl::uint128>, "__int128 must not be assignable from absl::uint128"); - static_assert(std::is_constructible<absl::uint128, unsigned __int128>::value, + static_assert(std::is_constructible_v<absl::uint128, unsigned __int128>, "absl::uint128 must be constructible from unsigned __int128"); - static_assert(std::is_assignable<absl::uint128&, unsigned __int128>::value, + static_assert(std::is_assignable_v<absl::uint128&, unsigned __int128>, "absl::uint128 must be assignable from unsigned __int128"); - static_assert(!std::is_assignable<unsigned __int128&, absl::uint128>::value, + static_assert(!std::is_assignable_v<unsigned __int128&, absl::uint128>, "unsigned __int128 must not be assignable from absl::uint128"); } #endif // ABSL_HAVE_INTRINSIC_INT128 TEST(Uint128, TrivialTraitsTest) { - static_assert(std::is_trivially_default_constructible<absl::uint128>::value, - ""); - static_assert(std::is_trivially_copy_constructible<absl::uint128>::value, - ""); - static_assert(std::is_trivially_copy_assignable<absl::uint128>::value, ""); - static_assert(std::is_trivially_destructible<absl::uint128>::value, ""); + static_assert(std::is_trivially_default_constructible_v<absl::uint128>, ""); + static_assert(std::is_trivially_copy_constructible_v<absl::uint128>, ""); + static_assert(std::is_trivially_copy_assignable_v<absl::uint128>, ""); + static_assert(std::is_trivially_destructible_v<absl::uint128>, ""); } TEST(Uint128, AllTests) { @@ -576,11 +574,11 @@ TYPED_TEST_SUITE(Int128IntegerTraitsTest, IntegerTypes); TYPED_TEST(Int128IntegerTraitsTest, ConstructAssignTest) { - static_assert(std::is_constructible<absl::int128, TypeParam>::value, + static_assert(std::is_constructible_v<absl::int128, TypeParam>, "absl::int128 must be constructible from TypeParam"); - static_assert(std::is_assignable<absl::int128&, TypeParam>::value, + static_assert(std::is_assignable_v<absl::int128&, TypeParam>, "absl::int128 must be assignable from TypeParam"); - static_assert(!std::is_assignable<TypeParam&, absl::int128>::value, + static_assert(!std::is_assignable_v<TypeParam&, absl::int128>, "TypeParam must not be assignable from absl::int128"); } @@ -590,11 +588,11 @@ TYPED_TEST_SUITE(Int128FloatTraitsTest, FloatingPointTypes); TYPED_TEST(Int128FloatTraitsTest, ConstructAssignTest) { - static_assert(std::is_constructible<absl::int128, TypeParam>::value, + static_assert(std::is_constructible_v<absl::int128, TypeParam>, "absl::int128 must be constructible from TypeParam"); - static_assert(!std::is_assignable<absl::int128&, TypeParam>::value, + static_assert(!std::is_assignable_v<absl::int128&, TypeParam>, "absl::int128 must not be assignable from TypeParam"); - static_assert(!std::is_assignable<TypeParam&, absl::int128>::value, + static_assert(!std::is_assignable_v<TypeParam&, absl::int128>, "TypeParam must not be assignable from absl::int128"); } @@ -602,28 +600,27 @@ // These type traits done separately as TYPED_TEST requires typeinfo, and not // all platforms have this for __int128 even though they define the type. TEST(Int128, IntrinsicTypeTraitsTest) { - static_assert(std::is_constructible<absl::int128, __int128>::value, + static_assert(std::is_constructible_v<absl::int128, __int128>, "absl::int128 must be constructible from __int128"); - static_assert(std::is_assignable<absl::int128&, __int128>::value, + static_assert(std::is_assignable_v<absl::int128&, __int128>, "absl::int128 must be assignable from __int128"); - static_assert(!std::is_assignable<__int128&, absl::int128>::value, + static_assert(!std::is_assignable_v<__int128&, absl::int128>, "__int128 must not be assignable from absl::int128"); - static_assert(std::is_constructible<absl::int128, unsigned __int128>::value, + static_assert(std::is_constructible_v<absl::int128, unsigned __int128>, "absl::int128 must be constructible from unsigned __int128"); - static_assert(!std::is_assignable<absl::int128&, unsigned __int128>::value, + static_assert(!std::is_assignable_v<absl::int128&, unsigned __int128>, "absl::int128 must be assignable from unsigned __int128"); - static_assert(!std::is_assignable<unsigned __int128&, absl::int128>::value, + static_assert(!std::is_assignable_v<unsigned __int128&, absl::int128>, "unsigned __int128 must not be assignable from absl::int128"); } #endif // ABSL_HAVE_INTRINSIC_INT128 TEST(Int128, TrivialTraitsTest) { - static_assert(std::is_trivially_default_constructible<absl::int128>::value, - ""); - static_assert(std::is_trivially_copy_constructible<absl::int128>::value, ""); - static_assert(std::is_trivially_copy_assignable<absl::int128>::value, ""); - static_assert(std::is_trivially_destructible<absl::int128>::value, ""); + static_assert(std::is_trivially_default_constructible_v<absl::int128>, ""); + static_assert(std::is_trivially_copy_constructible_v<absl::int128>, ""); + static_assert(std::is_trivially_copy_assignable_v<absl::int128>, ""); + static_assert(std::is_trivially_destructible_v<absl::int128>, ""); } TEST(Int128, BoolConversionTest) {
diff --git a/absl/numeric/internal/bits.h b/absl/numeric/internal/bits.h index e681544..82c577d 100644 --- a/absl/numeric/internal/bits.h +++ b/absl/numeric/internal/bits.h
@@ -73,7 +73,7 @@ template <class T> [[nodiscard]] ABSL_ATTRIBUTE_ALWAYS_INLINE constexpr T RotateRight( T x, int s) noexcept { - static_assert(std::is_unsigned<T>::value, "T must be unsigned"); + static_assert(std::is_unsigned_v<T>, "T must be unsigned"); static_assert(IsPowerOf2(std::numeric_limits<T>::digits), "T must have a power-of-2 size"); @@ -104,7 +104,7 @@ template <class T> [[nodiscard]] ABSL_ATTRIBUTE_ALWAYS_INLINE constexpr T RotateLeft( T x, int s) noexcept { - static_assert(std::is_unsigned<T>::value, "T must be unsigned"); + static_assert(std::is_unsigned_v<T>, "T must be unsigned"); static_assert(IsPowerOf2(std::numeric_limits<T>::digits), "T must have a power-of-2 size"); @@ -150,7 +150,7 @@ template <class T> ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_POPCOUNT inline int Popcount(T x) noexcept { - static_assert(std::is_unsigned<T>::value, "T must be unsigned"); + static_assert(std::is_unsigned_v<T>, "T must be unsigned"); static_assert(IsPowerOf2(std::numeric_limits<T>::digits), "T must have a power-of-2 size"); static_assert(sizeof(x) <= sizeof(uint64_t), "T is too large"); @@ -266,7 +266,7 @@ template <typename T> ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline int CountLeadingZeroes(T x) { - static_assert(std::is_unsigned<T>::value, "T must be unsigned"); + static_assert(std::is_unsigned_v<T>, "T must be unsigned"); static_assert(IsPowerOf2(std::numeric_limits<T>::digits), "T must have a power-of-2 size"); static_assert(sizeof(T) <= sizeof(uint64_t), "T too large"); @@ -351,7 +351,7 @@ template <class T> ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CTZ inline int CountTrailingZeroes(T x) noexcept { - static_assert(std::is_unsigned<T>::value, "T must be unsigned"); + static_assert(std::is_unsigned_v<T>, "T must be unsigned"); static_assert(IsPowerOf2(std::numeric_limits<T>::digits), "T must have a power-of-2 size"); static_assert(sizeof(T) <= sizeof(uint64_t), "T too large"); @@ -368,15 +368,17 @@ // want to force it to wraparound so that bit_ceil of an invalid value are not // core constant expressions. template <class T> -ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, T>::type +ABSL_ATTRIBUTE_ALWAYS_INLINE + ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, + T> BitCeilPromotionHelper(T x, T promotion) { return (T{1} << (x + promotion)) >> promotion; } template <class T> -ABSL_ATTRIBUTE_ALWAYS_INLINE ABSL_INTERNAL_CONSTEXPR_CLZ inline - typename std::enable_if<std::is_unsigned<T>::value, T>::type +ABSL_ATTRIBUTE_ALWAYS_INLINE + ABSL_INTERNAL_CONSTEXPR_CLZ inline std::enable_if_t<std::is_unsigned_v<T>, + T> BitCeilNonPowerOf2(T x) { // If T is narrower than unsigned, it undergoes promotion to unsigned when we // shift. We calculate the number of bits added by the wider type.
diff --git a/absl/random/beta_distribution.h b/absl/random/beta_distribution.h index bedeca6..15311df 100644 --- a/absl/random/beta_distribution.h +++ b/absl/random/beta_distribution.h
@@ -196,7 +196,7 @@ // Whether alpha_ != a_, i.e. true iff alpha_ > beta_. bool inverted_{}; - static_assert(std::is_floating_point<RealType>::value, + static_assert(std::is_floating_point_v<RealType>, "Class-template absl::beta_distribution<> must be " "parameterized using a floating-point type."); }; @@ -282,7 +282,7 @@ using random_internal::GeneratePositiveTag; using random_internal::GenerateRealFromBits; using real_type = - std::conditional_t<std::is_same<RealType, float>::value, float, double>; + std::conditional_t<std::is_same_v<RealType, float>, float, double>; // Based on Joehnk, M. D. Erzeugung von betaverteilten und gammaverteilten // Zufallszahlen. Metrika 8.1 (1964): 5-15. @@ -297,7 +297,7 @@ // Direct method. std::pow is slow for float, so rely on the optimizer to // remove the std::pow() path for that case. - if (!std::is_same<float, result_type>::value) { + if (!std::is_same_v<float, result_type>) { x = std::pow(u, p.a_); y = std::pow(v, p.b_); z = x + y; @@ -340,7 +340,7 @@ using random_internal::GeneratePositiveTag; using random_internal::GenerateRealFromBits; using real_type = - std::conditional_t<std::is_same<RealType, float>::value, float, double>; + std::conditional_t<std::is_same_v<RealType, float>, float, double>; // Based on Cheng, Russell CH. Generating beta variates with nonintegral // shape parameters. Communications of the ACM 21.4 (1978): 317-322.
diff --git a/absl/random/beta_distribution_test.cc b/absl/random/beta_distribution_test.cc index c93b2a3..6839d5c 100644 --- a/absl/random/beta_distribution_test.cc +++ b/absl/random/beta_distribution_test.cc
@@ -61,9 +61,10 @@ #endif } -using RealTypes = std::conditional<ShouldExerciseLongDoubleTests(), - ::testing::Types<float, double, long double>, - ::testing::Types<float, double>>::type; +using RealTypes = + std::conditional_t<ShouldExerciseLongDoubleTests(), + ::testing::Types<float, double, long double>, + ::testing::Types<float, double>>; TYPED_TEST_SUITE(BetaDistributionInterfaceTest, RealTypes); TYPED_TEST(BetaDistributionInterfaceTest, SerializeTest) {
diff --git a/absl/random/bit_gen_ref.h b/absl/random/bit_gen_ref.h index cbf1644..c0b40f5 100644 --- a/absl/random/bit_gen_ref.h +++ b/absl/random/bit_gen_ref.h
@@ -89,8 +89,8 @@ template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>, typename std::enable_if_t< - (!std::is_same<URBG, BitGenRef>::value && - !std::is_base_of<BitGenRef, URBG>::value && + (!std::is_same_v<URBG, BitGenRef> && + !std::is_base_of_v<BitGenRef, URBG> && !HasConversionOperator<URBG>::value && random_internal::is_urbg<URBG>::value && !RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr> @@ -101,8 +101,8 @@ template <typename URBGRef, typename URBG = absl::remove_cvref_t<URBGRef>, typename std::enable_if_t< - (!std::is_same<URBG, BitGenRef>::value && - !std::is_base_of<BitGenRef, URBG>::value && + (!std::is_same_v<URBG, BitGenRef> && + !std::is_base_of_v<BitGenRef, URBG> && !HasConversionOperator<URBG>::value && random_internal::is_urbg<URBG>::value && RandomMockingAccess::HasInvokeMock<URBG>::value)>* = nullptr>
diff --git a/absl/random/bit_gen_ref_test.cc b/absl/random/bit_gen_ref_test.cc index d04ac3a..ae5c1db 100644 --- a/absl/random/bit_gen_ref_test.cc +++ b/absl/random/bit_gen_ref_test.cc
@@ -125,7 +125,7 @@ TEST(BitGenRefTest, IsConvertibleTest) { // Verify that MinStdRandBitGen is convertible to absl::BitGenRef. - EXPECT_TRUE((std::is_convertible<MinStdRand, absl::BitGenRef>::value)); + EXPECT_TRUE((std::is_convertible_v<MinStdRand, absl::BitGenRef>)); // Explicit construction should trigger the conversion. {
diff --git a/absl/random/discrete_distribution.h b/absl/random/discrete_distribution.h index 854634d..35d42c8 100644 --- a/absl/random/discrete_distribution.h +++ b/absl/random/discrete_distribution.h
@@ -105,7 +105,7 @@ std::vector<double> p_; // normalized probabilities std::vector<std::pair<double, size_t>> q_; // (acceptance, alternate) pairs - static_assert(std::is_integral<result_type>::value, + static_assert(std::is_integral_v<result_type>, "Class-template absl::discrete_distribution<> must be " "parameterized using an integral type."); };
diff --git a/absl/random/distributions.h b/absl/random/distributions.h index 01dc978..cfe731e 100644 --- a/absl/random/distributions.h +++ b/absl/random/distributions.h
@@ -117,7 +117,7 @@ // auto x = absl::Uniform<float>(bitgen, 0, 1); // template <typename R = void, typename TagType, typename URBG> -typename std::enable_if_t<!std::is_same<R, void>::value, R> // +typename std::enable_if_t<!std::is_same_v<R, void>, R> // Uniform(TagType tag, URBG&& urbg, // NOLINT(runtime/references) R lo, R hi) { @@ -137,7 +137,7 @@ // Overload of `Uniform()` using the default closed-open interval of [lo, hi), // and returning values of type `T` template <typename R = void, typename URBG> -typename std::enable_if_t<!std::is_same<R, void>::value, R> // +typename std::enable_if_t<!std::is_same_v<R, void>, R> // Uniform(URBG&& urbg, // NOLINT(runtime/references) R lo, R hi) { using gen_t = std::decay_t<URBG>; @@ -159,8 +159,8 @@ // correctly from the passed types. template <typename R = void, typename TagType, typename URBG, typename A, typename B> -typename std::enable_if_t<std::is_same<R, void>::value, - random_internal::uniform_inferred_return_t<A, B>> +typename std::enable_if_t<std::is_same_v<R, void>, + random_internal::uniform_inferred_return_t<A, B>> Uniform(TagType tag, URBG&& urbg, // NOLINT(runtime/references) A lo, B hi) { @@ -183,8 +183,8 @@ // default closed-open interval of [lo, hi). Note that a compile-error will // result if the return type cannot be deduced correctly from the passed types. template <typename R = void, typename URBG, typename A, typename B> -typename std::enable_if_t<std::is_same<R, void>::value, - random_internal::uniform_inferred_return_t<A, B>> +typename std::enable_if_t<std::is_same_v<R, void>, + random_internal::uniform_inferred_return_t<A, B>> Uniform(URBG&& urbg, // NOLINT(runtime/references) A lo, B hi) { using gen_t = std::decay_t<URBG>; @@ -266,7 +266,7 @@ RealType Beta(URBG&& urbg, // NOLINT(runtime/references) RealType alpha, RealType beta) { static_assert( - std::is_floating_point<RealType>::value, + std::is_floating_point_v<RealType>, "Template-argument 'RealType' must be a floating-point type, in " "absl::Beta<RealType, URBG>(...)"); @@ -298,7 +298,7 @@ RealType Exponential(URBG&& urbg, // NOLINT(runtime/references) RealType lambda = 1) { static_assert( - std::is_floating_point<RealType>::value, + std::is_floating_point_v<RealType>, "Template-argument 'RealType' must be a floating-point type, in " "absl::Exponential<RealType, URBG>(...)"); @@ -329,7 +329,7 @@ RealType Gaussian(URBG&& urbg, // NOLINT(runtime/references) RealType mean = 0, RealType stddev = 1) { static_assert( - std::is_floating_point<RealType>::value, + std::is_floating_point_v<RealType>, "Template-argument 'RealType' must be a floating-point type, in " "absl::Gaussian<RealType, URBG>(...)");
diff --git a/absl/random/distributions_test.cc b/absl/random/distributions_test.cc index 1fa3345..16c9e2e 100644 --- a/absl/random/distributions_test.cc +++ b/absl/random/distributions_test.cc
@@ -80,18 +80,16 @@ template <typename A, typename B, typename Expect> void CheckArgsInferType() { static_assert( - std::conjunction< + std::conjunction_v< std::is_same<Expect, decltype(InferredUniformReturnT<A, B>(0))>, - std::is_same<Expect, - decltype(InferredUniformReturnT<B, A>(0))>>::value, + std::is_same<Expect, decltype(InferredUniformReturnT<B, A>(0))>>, ""); static_assert( - std::conjunction< + std::conjunction_v< std::is_same<Expect, decltype(InferredTaggedUniformReturnT< absl::IntervalOpenOpenTag, A, B>(0))>, - std::is_same<Expect, - decltype(InferredTaggedUniformReturnT< - absl::IntervalOpenOpenTag, B, A>(0))>>::value, + std::is_same<Expect, decltype(InferredTaggedUniformReturnT< + absl::IntervalOpenOpenTag, B, A>(0))>>, ""); } @@ -121,20 +119,20 @@ template <typename A, typename B, typename Expect> void CheckArgsReturnExpectedType() { static_assert( - std::conjunction< + std::conjunction_v< std::is_same<Expect, decltype(ExplicitUniformReturnT<A, B, Expect>(0))>, - std::is_same<Expect, decltype(ExplicitUniformReturnT<B, A, Expect>( - 0))>>::value, + std::is_same<Expect, + decltype(ExplicitUniformReturnT<B, A, Expect>(0))>>, ""); static_assert( - std::conjunction< + std::conjunction_v< std::is_same<Expect, decltype(ExplicitTaggedUniformReturnT< absl::IntervalOpenOpenTag, A, B, Expect>(0))>, - std::is_same<Expect, decltype(ExplicitTaggedUniformReturnT< - absl::IntervalOpenOpenTag, B, A, - Expect>(0))>>::value, + std::is_same<Expect, + decltype(ExplicitTaggedUniformReturnT< + absl::IntervalOpenOpenTag, B, A, Expect>(0))>>, ""); }
diff --git a/absl/random/exponential_distribution.h b/absl/random/exponential_distribution.h index f0267b2..67ab866 100644 --- a/absl/random/exponential_distribution.h +++ b/absl/random/exponential_distribution.h
@@ -64,7 +64,7 @@ result_type neg_inv_lambda_; static_assert( - std::is_floating_point<RealType>::value, + std::is_floating_point_v<RealType>, "Class-template absl::exponential_distribution<> must be parameterized " "using a floating-point type."); }; @@ -124,7 +124,7 @@ using random_internal::GenerateNegativeTag; using random_internal::GenerateRealFromBits; using real_type = - std::conditional_t<std::is_same<RealType, float>::value, float, double>; + std::conditional_t<std::is_same_v<RealType, float>, float, double>; const result_type u = GenerateRealFromBits<real_type, GenerateNegativeTag, false>(fast_u64_(g)); // U(-1, 0)
diff --git a/absl/random/exponential_distribution_test.cc b/absl/random/exponential_distribution_test.cc index fb9a0d1..71be99e 100644 --- a/absl/random/exponential_distribution_test.cc +++ b/absl/random/exponential_distribution_test.cc
@@ -55,9 +55,9 @@ // https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests // with double doubles until compiler support is better. using RealTypes = - std::conditional<absl::numeric_internal::IsDoubleDouble(), - ::testing::Types<float, double>, - ::testing::Types<float, double, long double>>::type; + std::conditional_t<absl::numeric_internal::IsDoubleDouble(), + ::testing::Types<float, double>, + ::testing::Types<float, double, long double>>; TYPED_TEST_SUITE(ExponentialDistributionTypedTest, RealTypes); TYPED_TEST(ExponentialDistributionTypedTest, SerializeTest) { @@ -114,7 +114,7 @@ if (sample > sample_max) sample_max = sample; if (sample < sample_min) sample_min = sample; } - if (!std::is_same<TypeParam, long double>::value) { + if (!std::is_same_v<TypeParam, long double>) { LOG(INFO) << "Range {" << lambda << "}: " << sample_min << ", " << sample_max << ", lambda=" << lambda; }
diff --git a/absl/random/gaussian_distribution.h b/absl/random/gaussian_distribution.h index eb75bfe..d14de0b 100644 --- a/absl/random/gaussian_distribution.h +++ b/absl/random/gaussian_distribution.h
@@ -116,7 +116,7 @@ result_type stddev_; static_assert( - std::is_floating_point<RealType>::value, + std::is_floating_point_v<RealType>, "Class-template absl::gaussian_distribution<> must be parameterized " "using a floating-point type."); };
diff --git a/absl/random/gaussian_distribution_test.cc b/absl/random/gaussian_distribution_test.cc index bad3476..4d076bb 100644 --- a/absl/random/gaussian_distribution_test.cc +++ b/absl/random/gaussian_distribution_test.cc
@@ -51,9 +51,9 @@ // https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests // with double doubles until compiler support is better. using RealTypes = - std::conditional<absl::numeric_internal::IsDoubleDouble(), - ::testing::Types<float, double>, - ::testing::Types<float, double, long double>>::type; + std::conditional_t<absl::numeric_internal::IsDoubleDouble(), + ::testing::Types<float, double>, + ::testing::Types<float, double, long double>>; TYPED_TEST_SUITE(GaussianDistributionInterfaceTest, RealTypes); TYPED_TEST(GaussianDistributionInterfaceTest, SerializeTest) { @@ -115,7 +115,7 @@ EXPECT_GE(sample, before.min()) << before; EXPECT_LE(sample, before.max()) << before; } - if (!std::is_same<TypeParam, long double>::value) { + if (!std::is_same_v<TypeParam, long double>) { LOG(INFO) << "Range{" << mean << ", " << stddev << "}: " << sample_min << ", " << sample_max; }
diff --git a/absl/random/internal/distribution_caller.h b/absl/random/internal/distribution_caller.h index 1416aba..03ace5a 100644 --- a/absl/random/internal/distribution_caller.h +++ b/absl/random/internal/distribution_caller.h
@@ -36,7 +36,7 @@ // to intercept such calls. template <typename URBG> struct DistributionCaller { - static_assert(!std::is_pointer<URBG>::value, + static_assert(!std::is_pointer_v<URBG>, "You must pass a reference, not a pointer."); using RandomMockingAccess = ::absl::RandomMockingAccess;
diff --git a/absl/random/internal/generate_real.h b/absl/random/internal/generate_real.h index fc35240..e016946 100644 --- a/absl/random/internal/generate_real.h +++ b/absl/random/internal/generate_real.h
@@ -69,12 +69,11 @@ bool IncludeZero = true> inline RealType GenerateRealFromBits(uint64_t bits, int exp_bias = 0) { using real_type = RealType; - using uint_type = std::conditional_t<std::is_same<real_type, float>::value, - uint32_t, uint64_t>; + using uint_type = + std::conditional_t<std::is_same_v<real_type, float>, uint32_t, uint64_t>; static_assert( - (std::is_same<double, real_type>::value || - std::is_same<float, real_type>::value), + (std::is_same_v<double, real_type> || std::is_same_v<float, real_type>), "GenerateRealFromBits must be parameterized by either float or double."); static_assert(sizeof(uint_type) == sizeof(real_type), @@ -84,9 +83,9 @@ std::numeric_limits<real_type>::radix == 2), "RealType representation is not IEEE 754 binary."); - static_assert((std::is_same<SignedTag, GeneratePositiveTag>::value || - std::is_same<SignedTag, GenerateNegativeTag>::value || - std::is_same<SignedTag, GenerateSignedTag>::value), + static_assert((std::is_same_v<SignedTag, GeneratePositiveTag> || + std::is_same_v<SignedTag, GenerateNegativeTag> || + std::is_same_v<SignedTag, GenerateSignedTag>), ""); static constexpr int kExp = std::numeric_limits<real_type>::digits - 1; @@ -98,14 +97,14 @@ // Determine the sign bit. // Depending on the SignedTag, this may use the left-most bit // or it may be a constant value. - uint_type sign = std::is_same<SignedTag, GenerateNegativeTag>::value + uint_type sign = std::is_same_v<SignedTag, GenerateNegativeTag> ? (static_cast<uint_type>(1) << (kUintBits - 1)) : 0; - if (std::is_same<SignedTag, GenerateSignedTag>::value) { - if (std::is_same<uint_type, uint64_t>::value) { + if (std::is_same_v<SignedTag, GenerateSignedTag>) { + if (std::is_same_v<uint_type, uint64_t>) { sign = bits & uint64_t{0x8000000000000000}; } - if (std::is_same<uint_type, uint32_t>::value) { + if (std::is_same_v<uint_type, uint32_t>) { const uint64_t tmp = bits & uint64_t{0x8000000000000000}; sign = static_cast<uint32_t>(tmp >> 32); }
diff --git a/absl/random/internal/iostream_state_saver.h b/absl/random/internal/iostream_state_saver.h index 5556b67..fcd45a1 100644 --- a/absl/random/internal/iostream_state_saver.h +++ b/absl/random/internal/iostream_state_saver.h
@@ -95,8 +95,8 @@ } template <typename T> -typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value, - null_state_saver<T>> +typename std::enable_if_t<!std::is_base_of_v<std::ios_base, T>, + null_state_saver<T>> make_ostream_state_saver(T& is, // NOLINT(runtime/references) std::ios_base::fmtflags flags = std::ios_base::dec) { using result_type = null_state_saver<T>; @@ -159,8 +159,8 @@ } template <typename T> -typename std::enable_if_t<!std::is_base_of<std::ios_base, T>::value, - null_state_saver<T>> +typename std::enable_if_t<!std::is_base_of_v<std::ios_base, T>, + null_state_saver<T>> make_istream_state_saver(T& is, // NOLINT(runtime/references) std::ios_base::fmtflags flags = std::ios_base::dec) { using result_type = null_state_saver<T>; @@ -223,7 +223,7 @@ template <typename FloatType, typename IStream> inline FloatType read_floating_point(IStream& is) { - static_assert(std::is_floating_point<FloatType>::value, ""); + static_assert(std::is_floating_point_v<FloatType>, ""); FloatType dest; is >> dest; // Parsing a double value may report a subnormal value as an error
diff --git a/absl/random/internal/iostream_state_saver_test.cc b/absl/random/internal/iostream_state_saver_test.cc index 3c1db21..a9bf5fc 100644 --- a/absl/random/internal/iostream_state_saver_test.cc +++ b/absl/random/internal/iostream_state_saver_test.cc
@@ -30,7 +30,7 @@ using absl::random_internal::stream_precision_helper; template <typename T> -typename std::enable_if_t<std::is_integral<T>::value, T> // +typename std::enable_if_t<std::is_integral_v<T>, T> // StreamRoundTrip(T t) { std::stringstream ss; { @@ -54,7 +54,7 @@ } template <typename T> -typename std::enable_if_t<std::is_floating_point<T>::value, T> // +typename std::enable_if_t<std::is_floating_point_v<T>, T> // StreamRoundTrip(T t) { std::stringstream ss; {
diff --git a/absl/random/internal/mock_overload_set.h b/absl/random/internal/mock_overload_set.h index a09f035..a3b15ee 100644 --- a/absl/random/internal/mock_overload_set.h +++ b/absl/random/internal/mock_overload_set.h
@@ -42,7 +42,7 @@ // The underlying KeyT must match the KeyT constructed by DistributionCaller. template <typename DistrT, typename ValidatorT, typename Ret, typename... Args> struct MockSingleOverload<DistrT, ValidatorT, Ret(MockingBitGen&, Args...)> { - static_assert(std::is_same<typename DistrT::result_type, Ret>::value, + static_assert(std::is_same_v<typename DistrT::result_type, Ret>, "Overload signature must have return type matching the " "distribution result_type."); using KeyT = Ret(DistrT, std::tuple<Args...>); @@ -51,7 +51,7 @@ auto gmock_Call(MockURBG& gen, const ::testing::Matcher<Args>&... matchers) -> decltype(MockHelpers::MockFor<KeyT>(gen, ValidatorT()) .gmock_Call(matchers...)) { - static_assert(std::is_base_of<MockingBitGen, MockURBG>::value, + static_assert(std::is_base_of_v<MockingBitGen, MockURBG>, "Mocking requires an absl::MockingBitGen"); return MockHelpers::MockFor<KeyT>(gen, ValidatorT()) .gmock_Call(matchers...); @@ -62,7 +62,7 @@ typename... Args> struct MockSingleOverload<DistrT, ValidatorT, Ret(Arg, MockingBitGen&, Args...)> { - static_assert(std::is_same<typename DistrT::result_type, Ret>::value, + static_assert(std::is_same_v<typename DistrT::result_type, Ret>, "Overload signature must have return type matching the " "distribution result_type."); using KeyT = Ret(DistrT, std::tuple<Arg, Args...>); @@ -72,7 +72,7 @@ const ::testing::Matcher<Args>&... matchers) -> decltype(MockHelpers::MockFor<KeyT>(gen, ValidatorT()) .gmock_Call(matcher, matchers...)) { - static_assert(std::is_base_of<MockingBitGen, MockURBG>::value, + static_assert(std::is_base_of_v<MockingBitGen, MockURBG>, "Mocking requires an absl::MockingBitGen"); return MockHelpers::MockFor<KeyT>(gen, ValidatorT()) .gmock_Call(matcher, matchers...);
diff --git a/absl/random/internal/nonsecure_base.h b/absl/random/internal/nonsecure_base.h index 903dbd9..d1442f8 100644 --- a/absl/random/internal/nonsecure_base.h +++ b/absl/random/internal/nonsecure_base.h
@@ -79,9 +79,9 @@ // capability, however until Abseil's support requirements allow us to // assume C++20, limit checks to a few common cases. using TagType = std::conditional_t< - (std::is_pointer<RandomAccessIterator>::value || - std::is_same<RandomAccessIterator, - typename std::vector<U>::iterator>::value), + (std::is_pointer_v<RandomAccessIterator> || + std::is_same_v<RandomAccessIterator, + typename std::vector<U>::iterator>), ContiguousTag, BufferTag>; generate_impl(TagType{}, begin, end); @@ -107,7 +107,7 @@ // Constructor using a seed template <class SSeq, typename = typename std::enable_if_t< - !std::is_same<SSeq, NonsecureURBGBase>::value>> + !std::is_same_v<SSeq, NonsecureURBGBase>>> explicit NonsecureURBGBase(SSeq&& seq) : urbg_(ConstructURBG(std::forward<SSeq>(seq))) {}
diff --git a/absl/random/internal/nonsecure_base_test.cc b/absl/random/internal/nonsecure_base_test.cc index 3795563..75f40bd 100644 --- a/absl/random/internal/nonsecure_base_test.cc +++ b/absl/random/internal/nonsecure_base_test.cc
@@ -74,19 +74,19 @@ using T = typename E::result_type; - static_assert(!std::is_copy_constructible<E>::value, + static_assert(!std::is_copy_constructible_v<E>, "NonsecureURBGBase should not be copy constructible"); - static_assert(!std::is_copy_assignable<E>::value, + static_assert(!std::is_copy_assignable_v<E>, "NonsecureURBGBase should not be copy assignable"); - static_assert(std::is_move_constructible<E>::value, + static_assert(std::is_move_constructible_v<E>, "NonsecureURBGBase should be move constructible"); - static_assert(std::is_move_assignable<E>::value, + static_assert(std::is_move_assignable_v<E>, "NonsecureURBGBase should be move assignable"); - static_assert(std::is_same<decltype(std::declval<E>()()), T>::value, + static_assert(std::is_same_v<decltype(std::declval<E>()()), T>, "return type of operator() must be result_type"); { @@ -94,10 +94,10 @@ Use(x); Use(y); - static_assert(std::is_same<decltype(x == y), bool>::value, + static_assert(std::is_same_v<decltype(x == y), bool>, "return type of operator== must be bool"); - static_assert(std::is_same<decltype(x != y), bool>::value, + static_assert(std::is_same_v<decltype(x != y), bool>, "return type of operator== must be bool"); }
diff --git a/absl/random/internal/pcg_engine.h b/absl/random/internal/pcg_engine.h index 2f41d58..5184c86 100644 --- a/absl/random/internal/pcg_engine.h +++ b/absl/random/internal/pcg_engine.h
@@ -39,12 +39,12 @@ // template <typename Params, typename Mix> class pcg_engine { - static_assert(std::is_same<typename Params::state_type, - typename Mix::state_type>::value, - "Class-template absl::pcg_engine must be parameterized by " - "Params and Mix with identical state_type"); + static_assert( + std::is_same_v<typename Params::state_type, typename Mix::state_type>, + "Class-template absl::pcg_engine must be parameterized by " + "Params and Mix with identical state_type"); - static_assert(std::is_unsigned<typename Mix::result_type>::value, + static_assert(std::is_unsigned_v<typename Mix::result_type>, "Class-template absl::pcg_engine must be parameterized by " "an unsigned Mix::result_type"); @@ -66,9 +66,8 @@ explicit pcg_engine(uint64_t seed_value = 0) { seed(seed_value); } - template <class SeedSequence, - typename = typename std::enable_if_t< - !std::is_same<SeedSequence, pcg_engine>::value>> + template <class SeedSequence, typename = typename std::enable_if_t< + !std::is_same_v<SeedSequence, pcg_engine>>> explicit pcg_engine(SeedSequence&& seq) { seed(seq); } @@ -90,8 +89,8 @@ } template <class SeedSequence> - typename std::enable_if_t< - !std::is_convertible<SeedSequence, uint64_t>::value, void> + typename std::enable_if_t<!std::is_convertible_v<SeedSequence, uint64_t>, + void> seed(SeedSequence&& seq) { reseed(seq); }
diff --git a/absl/random/internal/pcg_engine_test.cc b/absl/random/internal/pcg_engine_test.cc index 211a849..1861fb6 100644 --- a/absl/random/internal/pcg_engine_test.cc +++ b/absl/random/internal/pcg_engine_test.cc
@@ -167,19 +167,19 @@ using E = engine_type; using T = typename E::result_type; - static_assert(std::is_copy_constructible<E>::value, + static_assert(std::is_copy_constructible_v<E>, "engine_type must be copy constructible"); - static_assert(std::is_copy_assignable<E>::value, + static_assert(std::is_copy_assignable_v<E>, "engine_type must be copy assignable"); - static_assert(std::is_move_constructible<E>::value, + static_assert(std::is_move_constructible_v<E>, "engine_type must be move constructible"); - static_assert(std::is_move_assignable<E>::value, + static_assert(std::is_move_assignable_v<E>, "engine_type must be move assignable"); - static_assert(std::is_same<decltype(std::declval<E>()()), T>::value, + static_assert(std::is_same_v<decltype(std::declval<E>()()), T>, "return type of operator() must be result_type"); // Names after definition of [rand.req.urbg] in C++ standard. @@ -225,10 +225,10 @@ e.discard(z); - static_assert(std::is_same<decltype(x == y), bool>::value, + static_assert(std::is_same_v<decltype(x == y), bool>, "return type of operator== must be bool"); - static_assert(std::is_same<decltype(x != y), bool>::value, + static_assert(std::is_same_v<decltype(x != y), bool>, "return type of operator== must be bool"); }
diff --git a/absl/random/internal/randen_engine.h b/absl/random/internal/randen_engine.h index 4e4fef9..525d40a 100644 --- a/absl/random/internal/randen_engine.h +++ b/absl/random/internal/randen_engine.h
@@ -47,7 +47,7 @@ public: // C++11 URBG interface: using result_type = T; - static_assert(std::is_unsigned<result_type>::value, + static_assert(std::is_unsigned_v<result_type>, "randen_engine template argument must be a built-in unsigned " "integer type"); @@ -64,7 +64,7 @@ template <class SeedSequence, typename = typename std::enable_if_t< - !std::is_same<SeedSequence, randen_engine>::value>> + !std::is_same_v<SeedSequence, randen_engine>>> explicit randen_engine(SeedSequence&& seq) { seed(seq); } @@ -93,8 +93,7 @@ } template <class SeedSequence> - typename std::enable_if_t< - !std::is_convertible<SeedSequence, result_type>::value> + typename std::enable_if_t<!std::is_convertible_v<SeedSequence, result_type>> seed(SeedSequence&& seq) { // Zeroes the state. seed();
diff --git a/absl/random/internal/randen_engine_test.cc b/absl/random/internal/randen_engine_test.cc index 85c0a2b..9709cce 100644 --- a/absl/random/internal/randen_engine_test.cc +++ b/absl/random/internal/randen_engine_test.cc
@@ -168,19 +168,19 @@ using E = randen; using T = typename E::result_type; - static_assert(std::is_copy_constructible<E>::value, + static_assert(std::is_copy_constructible_v<E>, "randen_engine must be copy constructible"); - static_assert(std::is_copy_assignable<E>::value, + static_assert(std::is_copy_assignable_v<E>, "randen_engine must be copy assignable"); - static_assert(std::is_move_constructible<E>::value, + static_assert(std::is_move_constructible_v<E>, "randen_engine must be move constructible"); - static_assert(std::is_move_assignable<E>::value, + static_assert(std::is_move_assignable_v<E>, "randen_engine must be move assignable"); - static_assert(std::is_same<decltype(std::declval<E>()()), T>::value, + static_assert(std::is_same_v<decltype(std::declval<E>()()), T>, "return type of operator() must be result_type"); // Names after definition of [rand.req.urbg] in C++ standard. @@ -226,10 +226,10 @@ e.discard(z); - static_assert(std::is_same<decltype(x == y), bool>::value, + static_assert(std::is_same_v<decltype(x == y), bool>, "return type of operator== must be bool"); - static_assert(std::is_same<decltype(x != y), bool>::value, + static_assert(std::is_same_v<decltype(x != y), bool>, "return type of operator== must be bool"); }
diff --git a/absl/random/internal/randen_test.cc b/absl/random/internal/randen_test.cc index cf94970..44bd907 100644 --- a/absl/random/internal/randen_test.cc +++ b/absl/random/internal/randen_test.cc
@@ -25,16 +25,16 @@ using absl::random_internal::Randen; TEST(RandenTest, CopyAndMove) { - static_assert(std::is_copy_constructible<Randen>::value, + static_assert(std::is_copy_constructible_v<Randen>, "Randen must be copy constructible"); - static_assert(std::is_copy_assignable<Randen>::value, + static_assert(std::is_copy_assignable_v<Randen>, "Randen must be copy assignable"); - static_assert(std::is_move_constructible<Randen>::value, + static_assert(std::is_move_constructible_v<Randen>, "Randen must be move constructible"); - static_assert(std::is_move_assignable<Randen>::value, + static_assert(std::is_move_assignable_v<Randen>, "Randen must be move assignable"); }
diff --git a/absl/random/internal/salted_seed_seq.h b/absl/random/internal/salted_seed_seq.h index b440717..68296e8 100644 --- a/absl/random/internal/salted_seed_seq.h +++ b/absl/random/internal/salted_seed_seq.h
@@ -73,10 +73,10 @@ // to uint arrays. Such contiguous memory regions may be optimized, // which we detect here. using TagType = std::conditional_t< - (std::is_same<U, uint32_t>::value && - (std::is_pointer<RandomAccessIterator>::value || - std::is_same<RandomAccessIterator, - typename std::vector<U>::iterator>::value)), + (std::is_same_v<U, uint32_t> && + (std::is_pointer_v<RandomAccessIterator> || + std::is_same_v<RandomAccessIterator, + typename std::vector<U>::iterator>)), ContiguousAndUint32Tag, DefaultTag>; if (begin != end) { generate_impl(TagType{}, begin, end, std::distance(begin, end)); @@ -132,8 +132,8 @@ template <typename T> struct is_salted_seed_seq< - T, typename std::enable_if<std::is_same< - T, SaltedSeedSeq<typename T::inner_sequence_type>>::value>::type> + T, std::enable_if_t< + std::is_same_v<T, SaltedSeedSeq<typename T::inner_sequence_type>>>> : public std::true_type {}; // MakeSaltedSeedSeq returns a salted variant of the seed sequence. @@ -150,8 +150,8 @@ template < typename SSeq, // typename EnableIf = std::enable_if_t<!is_salted_seed_seq<SSeq>::value>> -SaltedSeedSeq<typename std::decay<SSeq>::type> MakeSaltedSeedSeq(SSeq&& seq) { - using sseq_type = typename std::decay<SSeq>::type; +SaltedSeedSeq<std::decay_t<SSeq>> MakeSaltedSeedSeq(SSeq&& seq) { + using sseq_type = std::decay_t<SSeq>; using result_type = typename sseq_type::result_type; absl::InlinedVector<result_type, 8> data;
diff --git a/absl/random/internal/traits.h b/absl/random/internal/traits.h index f23bcd2..8bde0ce 100644 --- a/absl/random/internal/traits.h +++ b/absl/random/internal/traits.h
@@ -37,15 +37,13 @@ template <typename URBG> struct is_urbg< URBG, - std::enable_if_t<std::is_same< - typename URBG::result_type, - typename std::decay<decltype((URBG::min)())>::type>::value>, - std::enable_if_t<std::is_same< - typename URBG::result_type, - typename std::decay<decltype((URBG::max)())>::type>::value>, - std::enable_if_t<std::is_same< - typename URBG::result_type, - typename std::decay<decltype(std::declval<URBG>()())>::type>::value>> + std::enable_if_t<std::is_same_v<typename URBG::result_type, + std::decay_t<decltype((URBG::min)())>>>, + std::enable_if_t<std::is_same_v<typename URBG::result_type, + std::decay_t<decltype((URBG::max)())>>>, + std::enable_if_t< + std::is_same_v<typename URBG::result_type, + std::decay_t<decltype(std::declval<URBG>()())>>>> : std::true_type {}; // random_internal::is_widening_convertible<A, B>
diff --git a/absl/random/internal/traits_test.cc b/absl/random/internal/traits_test.cc index 100fd9b..08361a4 100644 --- a/absl/random/internal/traits_test.cc +++ b/absl/random/internal/traits_test.cc
@@ -53,7 +53,7 @@ // template <typename T> void CheckNotWideningConvertibleWithSigned() { - using signed_t = typename std::make_signed<T>::type; + using signed_t = std::make_signed_t<T>; static_assert(!is_widening_convertible<T, signed_t>::value, "Unsigned type is convertible to same-sized signed-type!"); @@ -76,9 +76,9 @@ // - Signed(Ti) IS widening-convertible to Ti+1 template <typename T, typename Higher> void CheckWideningConvertsToLargerTypes() { - using signed_t = typename std::make_signed<T>::type; + using signed_t = std::make_signed_t<T>; using higher_t = Higher; - using signed_higher_t = typename std::make_signed<Higher>::type; + using signed_higher_t = std::make_signed_t<Higher>; static_assert(is_widening_convertible<T, higher_t>::value, "Type not embeddable into larger type!");
diff --git a/absl/random/internal/uniform_helper.h b/absl/random/internal/uniform_helper.h index f50be61..aefbd00 100644 --- a/absl/random/internal/uniform_helper.h +++ b/absl/random/internal/uniform_helper.h
@@ -75,11 +75,10 @@ // absl::Uniform() will be discarded, and the call will be ill-formed. // Return-type for absl::Uniform() when the return-type is inferred. template <typename A, typename B> -using uniform_inferred_return_t = - std::enable_if_t<std::disjunction<is_widening_convertible<A, B>, - is_widening_convertible<B, A>>::value, - typename std::conditional< - is_widening_convertible<A, B>::value, B, A>::type>; +using uniform_inferred_return_t = std::enable_if_t< + std::disjunction_v<is_widening_convertible<A, B>, + is_widening_convertible<B, A>>, + std::conditional_t<is_widening_convertible<A, B>::value, B, A>>; // The functions // uniform_lower_bound(tag, a, b) @@ -99,10 +98,10 @@ // template <typename IntType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< IsIntegral<IntType>, std::disjunction<std::is_same<Tag, IntervalOpenClosedTag>, - std::is_same<Tag, IntervalOpenOpenTag>>>::value, + std::is_same<Tag, IntervalOpenOpenTag>>>, IntType> uniform_lower_bound(Tag, IntType a, IntType) { return a < (std::numeric_limits<IntType>::max)() ? (a + 1) : a; @@ -110,10 +109,10 @@ template <typename FloatType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< std::is_floating_point<FloatType>, std::disjunction<std::is_same<Tag, IntervalOpenClosedTag>, - std::is_same<Tag, IntervalOpenOpenTag>>>::value, + std::is_same<Tag, IntervalOpenOpenTag>>>, FloatType> uniform_lower_bound(Tag, FloatType a, FloatType b) { return std::nextafter(a, b); @@ -121,8 +120,8 @@ template <typename NumType, typename Tag> typename std::enable_if_t< - std::disjunction<std::is_same<Tag, IntervalClosedClosedTag>, - std::is_same<Tag, IntervalClosedOpenTag>>::value, + std::disjunction_v<std::is_same<Tag, IntervalClosedClosedTag>, + std::is_same<Tag, IntervalClosedOpenTag>>, NumType> uniform_lower_bound(Tag, NumType a, NumType) { return a; @@ -130,10 +129,10 @@ template <typename IntType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< IsIntegral<IntType>, std::disjunction<std::is_same<Tag, IntervalClosedOpenTag>, - std::is_same<Tag, IntervalOpenOpenTag>>>::value, + std::is_same<Tag, IntervalOpenOpenTag>>>, IntType> uniform_upper_bound(Tag, IntType, IntType b) { return b > (std::numeric_limits<IntType>::min)() ? (b - 1) : b; @@ -141,10 +140,10 @@ template <typename FloatType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< std::is_floating_point<FloatType>, std::disjunction<std::is_same<Tag, IntervalClosedOpenTag>, - std::is_same<Tag, IntervalOpenOpenTag>>>::value, + std::is_same<Tag, IntervalOpenOpenTag>>>, FloatType> uniform_upper_bound(Tag, FloatType, FloatType b) { return b; @@ -152,10 +151,10 @@ template <typename IntType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< IsIntegral<IntType>, std::disjunction<std::is_same<Tag, IntervalClosedClosedTag>, - std::is_same<Tag, IntervalOpenClosedTag>>>::value, + std::is_same<Tag, IntervalOpenClosedTag>>>, IntType> uniform_upper_bound(Tag, IntType, IntType b) { return b; @@ -163,10 +162,10 @@ template <typename FloatType, typename Tag> typename std::enable_if_t< - std::conjunction< + std::conjunction_v< std::is_floating_point<FloatType>, std::disjunction<std::is_same<Tag, IntervalClosedClosedTag>, - std::is_same<Tag, IntervalOpenClosedTag>>>::value, + std::is_same<Tag, IntervalOpenClosedTag>>>, FloatType> uniform_upper_bound(Tag, FloatType, FloatType b) { return std::nextafter(b, (std::numeric_limits<FloatType>::max)()); @@ -195,7 +194,7 @@ // (0, 0] is not legal, but (0, 0+epsilon] is. // template <typename FloatType> -std::enable_if_t<std::is_floating_point<FloatType>::value, bool> +std::enable_if_t<std::is_floating_point_v<FloatType>, bool> is_uniform_range_valid(FloatType a, FloatType b) { return a <= b && std::isfinite(b - a); } @@ -210,9 +209,9 @@ // or absl::uniform_real_distribution depending on the NumType parameter. template <typename NumType> using UniformDistribution = - typename std::conditional<IsIntegral<NumType>::value, - absl::uniform_int_distribution<NumType>, - absl::uniform_real_distribution<NumType>>::type; + std::conditional_t<IsIntegral<NumType>::value, + absl::uniform_int_distribution<NumType>, + absl::uniform_real_distribution<NumType>>; // UniformDistributionWrapper is used as the underlying distribution type // by the absl::Uniform template function. It selects the proper Abseil
diff --git a/absl/random/internal/uniform_helper_test.cc b/absl/random/internal/uniform_helper_test.cc index 5b20b0b..f03bf2c 100644 --- a/absl/random/internal/uniform_helper_test.cc +++ b/absl/random/internal/uniform_helper_test.cc
@@ -215,10 +215,9 @@ template <typename A, typename B, typename Expect> void CheckArgsInferType() { static_assert( - std::conjunction< + std::conjunction_v< std::is_same<Expect, decltype(InferredUniformReturnT<A, B>(0))>, - std::is_same<Expect, - decltype(InferredUniformReturnT<B, A>(0))>>::value, + std::is_same<Expect, decltype(InferredUniformReturnT<B, A>(0))>>, ""); }
diff --git a/absl/random/internal/wide_multiply.h b/absl/random/internal/wide_multiply.h index b125681..f2a5033 100644 --- a/absl/random/internal/wide_multiply.h +++ b/absl/random/internal/wide_multiply.h
@@ -50,7 +50,7 @@ } static input_type lo(result_type r) { return static_cast<input_type>(r); } - static_assert(std::is_unsigned<UIntType>::value, + static_assert(std::is_unsigned_v<UIntType>, "Class-template wide_multiply<> argument must be unsigned."); };
diff --git a/absl/random/mocking_bit_gen.h b/absl/random/mocking_bit_gen.h index 6117e7c..2e3c606 100644 --- a/absl/random/mocking_bit_gen.h +++ b/absl/random/mocking_bit_gen.h
@@ -175,14 +175,13 @@ std::declval<ArgTupleT>())); using WrappedFnType = std::conditional_t< - std::is_same<SelfT, ::testing::NiceMock<MockingBitGen>>::value, + std::is_same_v<SelfT, ::testing::NiceMock<MockingBitGen>>, ::testing::NiceMock<MockFnType>, std::conditional_t< - std::is_same<SelfT, ::testing::NaggyMock<MockingBitGen>>::value, + std::is_same_v<SelfT, ::testing::NaggyMock<MockingBitGen>>, ::testing::NaggyMock<MockFnType>, std::conditional_t< - std::is_same<SelfT, - ::testing::StrictMock<MockingBitGen>>::value, + std::is_same_v<SelfT, ::testing::StrictMock<MockingBitGen>>, ::testing::StrictMock<MockFnType>, MockFnType>>>; using ImplT =
diff --git a/absl/random/uniform_int_distribution_test.cc b/absl/random/uniform_int_distribution_test.cc index 8134ab6..98da12b 100644 --- a/absl/random/uniform_int_distribution_test.cc +++ b/absl/random/uniform_int_distribution_test.cc
@@ -47,8 +47,8 @@ using Limits = std::numeric_limits<TypeParam>; using param_type = typename absl::uniform_int_distribution<TypeParam>::param_type; - const TypeParam kMin = std::is_unsigned<TypeParam>::value ? 37 : -105; - const TypeParam kNegOneOrZero = std::is_unsigned<TypeParam>::value ? 0 : -1; + const TypeParam kMin = std::is_unsigned_v<TypeParam> ? 37 : -105; + const TypeParam kNegOneOrZero = std::is_unsigned_v<TypeParam> ? 0 : -1; constexpr int kCount = 1000; absl::InsecureBitGen gen; @@ -180,7 +180,7 @@ const int kThreshold = absl::random_internal::ChiSquareValue(kBuckets, 0.999999); - const TypeParam min = std::is_unsigned<TypeParam>::value ? 37 : -37; + const TypeParam min = std::is_unsigned_v<TypeParam> ? 37 : -37; const TypeParam max = min + kBuckets; // We use a fixed bit generator for distribution accuracy tests. This allows
diff --git a/absl/random/uniform_real_distribution.h b/absl/random/uniform_real_distribution.h index e5ea6f2..79cf793 100644 --- a/absl/random/uniform_real_distribution.h +++ b/absl/random/uniform_real_distribution.h
@@ -98,7 +98,7 @@ friend class uniform_real_distribution; result_type lo_, hi_, range_; - static_assert(std::is_floating_point<RealType>::value, + static_assert(std::is_floating_point_v<RealType>, "Class-template absl::uniform_real_distribution<> must be " "parameterized using a floating-point type."); }; @@ -159,7 +159,7 @@ using random_internal::GeneratePositiveTag; using random_internal::GenerateRealFromBits; using real_type = - std::conditional_t<std::is_same<RealType, float>::value, float, double>; + std::conditional_t<std::is_same_v<RealType, float>, float, double>; while (true) { const result_type sample =
diff --git a/absl/random/uniform_real_distribution_test.cc b/absl/random/uniform_real_distribution_test.cc index 4d544ca..5193b8c 100644 --- a/absl/random/uniform_real_distribution_test.cc +++ b/absl/random/uniform_real_distribution_test.cc
@@ -64,9 +64,9 @@ // https://bugs.llvm.org/show_bug.cgi?id=49132. Don't bother running these tests // with double doubles until compiler support is better. using RealTypes = - std::conditional<absl::numeric_internal::IsDoubleDouble(), - ::testing::Types<float, double>, - ::testing::Types<float, double, long double>>::type; + std::conditional_t<absl::numeric_internal::IsDoubleDouble(), + ::testing::Types<float, double>, + ::testing::Types<float, double, long double>>; TYPED_TEST_SUITE(UniformRealDistributionTest, RealTypes); @@ -180,7 +180,7 @@ } } - if (!std::is_same<real_type, long double>::value) { + if (!std::is_same_v<real_type, long double>) { // static_cast<double>(long double) can overflow. LOG(INFO) << "Range: " << static_cast<double>(sample_min) << ", " << static_cast<double>(sample_max);
diff --git a/absl/status/internal/status_internal.h b/absl/status/internal/status_internal.h index 2f615e7..2428069 100644 --- a/absl/status/internal/status_internal.h +++ b/absl/status/internal/status_internal.h
@@ -14,6 +14,8 @@ #ifndef ABSL_STATUS_INTERNAL_STATUS_INTERNAL_H_ #define ABSL_STATUS_INTERNAL_STATUS_INTERNAL_H_ +// IWYU pragma: private, include "absl/status/status.h" + #include <atomic> #include <cstdint> #include <memory>
diff --git a/absl/status/internal/status_matchers.h b/absl/status/internal/status_matchers.h index 2eafd13..5446840 100644 --- a/absl/status/internal/status_matchers.h +++ b/absl/status/internal/status_matchers.h
@@ -30,20 +30,12 @@ ABSL_NAMESPACE_BEGIN namespace status_internal { -// TODO(b/323927127): Remove ABSL_REFACTOR_INLINE once callers are cleaned up -// and move it into a namespace like adl_barrier without types to avoid -// accidental ADL. -ABSL_REFACTOR_INLINE inline const absl::Status& GetStatus( - const absl::Status& status) { +inline const absl::Status& GetStatus(const absl::Status& status) { return status; } -// TODO(b/323927127): Remove ABSL_REFACTOR_INLINE once callers are cleaned up -// and move it into a namespace like adl_barrier without types to avoid -// accidental ADL. template <typename T> -ABSL_REFACTOR_INLINE const absl::Status& GetStatus( - const absl::StatusOr<T>& status) { +const absl::Status& GetStatus(const absl::StatusOr<T>& status) { return status.status(); } @@ -56,8 +48,7 @@ class IsOkAndHoldsMatcherImpl : public ::testing::MatcherInterface<StatusOrType> { public: - typedef - typename std::remove_reference<StatusOrType>::type::value_type value_type; + typedef typename std::remove_reference_t<StatusOrType>::value_type value_type; template <typename InnerMatcher> explicit IsOkAndHoldsMatcherImpl(InnerMatcher&& inner_matcher)
diff --git a/absl/status/internal/statusor_internal.h b/absl/status/internal/statusor_internal.h index de56519..c42891f 100644 --- a/absl/status/internal/statusor_internal.h +++ b/absl/status/internal/statusor_internal.h
@@ -53,9 +53,9 @@ template <typename T> struct IsEqualityComparable< - T, std::enable_if_t<std::is_convertible< - decltype(std::declval<T>() == std::declval<T>()), - bool>::value>> : std::true_type {}; + T, std::enable_if_t<std::is_convertible_v< + decltype(std::declval<T>() == std::declval<T>()), bool>>> + : std::true_type {}; // Detects whether `T` is constructible or convertible from `StatusOr<U>`. template <typename T, typename U> @@ -84,7 +84,7 @@ template <typename T, typename U> struct IsDirectInitializationAmbiguous : public std::conditional_t< - std::is_same<absl::remove_cvref_t<U>, U>::value, std::false_type, + std::is_same_v<absl::remove_cvref_t<U>, U>, std::false_type, IsDirectInitializationAmbiguous<T, absl::remove_cvref_t<U>>> {}; template <typename T, typename V> @@ -133,7 +133,7 @@ template <typename T, typename U> struct IsForwardingAssignmentAmbiguous : public std::conditional_t< - std::is_same<absl::remove_cvref_t<U>, U>::value, std::false_type, + std::is_same_v<absl::remove_cvref_t<U>, U>, std::false_type, IsForwardingAssignmentAmbiguous<T, absl::remove_cvref_t<U>>> {}; template <typename T, typename U> @@ -330,9 +330,9 @@ MakeStatus(); } - template <typename U, - std::enable_if_t<std::is_constructible<absl::Status, U&&>::value, - int> = 0> + template < + typename U, + std::enable_if_t<std::is_constructible_v<absl::Status, U&&>, int> = 0> explicit StatusOrData(U&& v) : status_(std::forward<U>(v)) { EnsureNotOk(); } @@ -527,7 +527,7 @@ // operators in `StatusOr`. For example, `CopyCtorBase` will explicitly delete // the copy constructor when T is not copy constructible and `StatusOr` will // inherit that behavior implicitly. -template <typename T, bool = std::is_copy_constructible<T>::value> +template <typename T, bool = std::is_copy_constructible_v<T>> struct CopyCtorBase { CopyCtorBase() = default; CopyCtorBase(const CopyCtorBase&) = default; @@ -545,7 +545,7 @@ CopyCtorBase& operator=(CopyCtorBase&&) = default; }; -template <typename T, bool = std::is_move_constructible<T>::value> +template <typename T, bool = std::is_move_constructible_v<T>> struct MoveCtorBase { MoveCtorBase() = default; MoveCtorBase(const MoveCtorBase&) = default; @@ -563,8 +563,8 @@ MoveCtorBase& operator=(MoveCtorBase&&) = default; }; -template <typename T, bool = (std::is_copy_constructible<T>::value && - std::is_copy_assignable<T>::value) || +template <typename T, bool = (std::is_copy_constructible_v<T> && + std::is_copy_assignable_v<T>) || std::is_reference_v<T>> struct CopyAssignBase { CopyAssignBase() = default; @@ -583,8 +583,8 @@ CopyAssignBase& operator=(CopyAssignBase&&) = default; }; -template <typename T, bool = (std::is_move_constructible<T>::value && - std::is_move_assignable<T>::value) || +template <typename T, bool = (std::is_move_constructible_v<T> && + std::is_move_assignable_v<T>) || std::is_reference_v<T>> struct MoveAssignBase { MoveAssignBase() = default;
diff --git a/absl/status/status_macros.h b/absl/status/status_macros.h index cfa9b09..b823e0d 100644 --- a/absl/status/status_macros.h +++ b/absl/status/status_macros.h
@@ -257,7 +257,7 @@ { \ static_assert( \ absl::status_macro_internal::IsAllowedStatusOrMacroType< \ - typename std::remove_const<decltype(statusor)>::type>(), \ + std::remove_const_t<decltype(statusor)>>(), \ "ABSL_ASSIGN_OR_RETURN should only be used with absl::StatusOr<>"); \ } \ ABSL_INTERNAL_STATUS_MACROS_IMPL_UNPARENTHESIZE_IF_PARENTHESIZED(lhs) = \
diff --git a/absl/status/status_matchers.h b/absl/status/status_matchers.h index c418739..a7d5634 100644 --- a/absl/status/status_matchers.h +++ b/absl/status/status_matchers.h
@@ -28,12 +28,9 @@ // Convenience macros for `EXPECT_THAT(s, IsOk())`, where `s` is either // a `Status` or a `StatusOr<T>`. // -// There are no EXPECT_NOT_OK/ASSERT_NOT_OK macros since they would not -// provide much value (when they fail, they would just print the OK status -// which conveys no more information than `EXPECT_FALSE(s.ok())`. You can -// of course use `EXPECT_THAT(s, Not(IsOk()))` if you prefer _THAT style. +// There are no EXPECT_NOT_OK/ASSERT_NOT_OK macros. +// Prefer to check for the specific expected error: // -// If you want to check for particular errors, better alternatives are: // EXPECT_THAT(s, StatusIs(expected_error)); // EXPECT_THAT(s, StatusIs(_, _, HasSubstr("expected error"))); // @@ -79,6 +76,9 @@ // Status s = ...; // EXPECT_THAT(s, IsOk()); // ``` +// +// There is no NotOk() matcher. Prefer to check for the specific expected +// error. #ifndef ABSL_STATUS_STATUS_MATCHERS_H_ #define ABSL_STATUS_STATUS_MATCHERS_H_ @@ -104,10 +104,9 @@ // Returns a gMock matcher that matches a StatusOr<> whose status is // OK and whose value matches the inner matcher. template <typename InnerMatcherT> -status_internal::IsOkAndHoldsMatcher<typename std::decay<InnerMatcherT>::type> -IsOkAndHolds(InnerMatcherT&& inner_matcher) { - return status_internal::IsOkAndHoldsMatcher< - typename std::decay<InnerMatcherT>::type>( +status_internal::IsOkAndHoldsMatcher<std::decay_t<InnerMatcherT>> IsOkAndHolds( + InnerMatcherT&& inner_matcher) { + return status_internal::IsOkAndHoldsMatcher<std::decay_t<InnerMatcherT>>( std::forward<InnerMatcherT>(inner_matcher)); }
diff --git a/absl/status/statusor.h b/absl/status/statusor.h index eedd99f..ed34bb8 100644 --- a/absl/status/statusor.h +++ b/absl/status/statusor.h
@@ -396,18 +396,18 @@ // StatusOr<bool> s1 = true; // s1.ok() && *s1 == true // StatusOr<bool> s2 = false; // s2.ok() && *s2 == false // s1 = s2; // ambiguous, `s1 = *s2` or `s1 = bool(s2)`? - template <typename U = T, - typename std::enable_if< - internal_statusor::IsAssignmentValid<T, U, false>::value, - int>::type = 0> + template < + typename U = T, + std::enable_if_t<internal_statusor::IsAssignmentValid<T, U, false>::value, + int> = 0> StatusOr& operator=(U&& v) { this->Assign(std::forward<U>(v)); return *this; } - template <typename U = T, - typename std::enable_if< - internal_statusor::IsAssignmentValid<T, U, true>::value, - int>::type = 0> + template < + typename U = T, + std::enable_if_t<internal_statusor::IsAssignmentValid<T, U, true>::value, + int> = 0> StatusOr& operator=(U&& v ABSL_INTERNAL_ATTRIBUTE_CAPTURED_BY(this)) { this->Assign(std::forward<U>(v)); return *this; @@ -622,11 +622,10 @@ return this->data_; } - template < - typename U, typename... Args, - std::enable_if_t< - std::is_constructible<T, std::initializer_list<U>&, Args&&...>::value, - int> = 0> + template <typename U, typename... Args, + std::enable_if_t<std::is_constructible_v< + T, std::initializer_list<U>&, Args&&...>, + int> = 0> T& emplace(std::initializer_list<U> ilist, Args&&... args) ABSL_ATTRIBUTE_LIFETIME_BOUND { if (ok()) { @@ -687,8 +686,8 @@ // // Requires `T` supports `operator<<`. Do not rely on the output format which // may change without notice. -template <typename T, typename std::enable_if< - absl::HasOstreamOperator<T>::value, int>::type = 0> +template <typename T, + std::enable_if_t<absl::HasOstreamOperator<T>::value, int> = 0> std::ostream& operator<<(std::ostream& os, const StatusOr<T>& status_or) { if (status_or.ok()) { os << status_or.value(); @@ -704,9 +703,8 @@ // // Requires `T` has `AbslStringify`. Do not rely on the output format which // may change without notice. -template < - typename Sink, typename T, - typename std::enable_if<absl::HasAbslStringify<T>::value, int>::type = 0> +template <typename Sink, typename T, + std::enable_if_t<absl::HasAbslStringify<T>::value, int> = 0> void AbslStringify(Sink& sink, const StatusOr<T>& status_or) { if (status_or.ok()) { absl::Format(&sink, "%v", status_or.value());
diff --git a/absl/status/statusor_test.cc b/absl/status/statusor_test.cc index fc558f6..2205acf 100644 --- a/absl/status/statusor_test.cc +++ b/absl/status/statusor_test.cc
@@ -582,11 +582,11 @@ TEST(StatusOr, ExplicitConvertingConstructor) { EXPECT_FALSE( - (std::is_convertible<const absl::StatusOr<A>&, - absl::StatusOr<ExplicitConstructibleFromA>>::value)); + (std::is_convertible_v<const absl::StatusOr<A>&, + absl::StatusOr<ExplicitConstructibleFromA>>)); EXPECT_FALSE( - (std::is_convertible<absl::StatusOr<A>&&, - absl::StatusOr<ExplicitConstructibleFromA>>::value)); + (std::is_convertible_v<absl::StatusOr<A>&&, + absl::StatusOr<ExplicitConstructibleFromA>>)); EXPECT_THAT( absl::StatusOr<ExplicitConstructibleFromA>(absl::StatusOr<A>(A{11})), IsOkAndHolds(AllOf(Field(&ExplicitConstructibleFromA::x, 11), @@ -618,9 +618,9 @@ absl::implicit_cast<absl::StatusOr<ImplicitConstructibleFromBool>>( absl::StatusOr<bool>(false)), IsOkAndHolds(Field(&ImplicitConstructibleFromBool::x, false))); - EXPECT_FALSE((std::is_convertible< - absl::StatusOr<ConvertibleToBool>, - absl::StatusOr<ImplicitConstructibleFromBool>>::value)); + EXPECT_FALSE( + (std::is_convertible_v<absl::StatusOr<ConvertibleToBool>, + absl::StatusOr<ImplicitConstructibleFromBool>>)); } TEST(StatusOr, BooleanConstructionWithImplicitCasts) { @@ -782,18 +782,18 @@ }; TEST(StatusOr, CopyAndMoveAbility) { - EXPECT_TRUE(std::is_copy_constructible<Copyable>::value); - EXPECT_TRUE(std::is_copy_assignable<Copyable>::value); - EXPECT_TRUE(std::is_move_constructible<Copyable>::value); - EXPECT_TRUE(std::is_move_assignable<Copyable>::value); - EXPECT_FALSE(std::is_copy_constructible<MoveOnly>::value); - EXPECT_FALSE(std::is_copy_assignable<MoveOnly>::value); - EXPECT_TRUE(std::is_move_constructible<MoveOnly>::value); - EXPECT_TRUE(std::is_move_assignable<MoveOnly>::value); - EXPECT_FALSE(std::is_copy_constructible<NonMovable>::value); - EXPECT_FALSE(std::is_copy_assignable<NonMovable>::value); - EXPECT_FALSE(std::is_move_constructible<NonMovable>::value); - EXPECT_FALSE(std::is_move_assignable<NonMovable>::value); + EXPECT_TRUE(std::is_copy_constructible_v<Copyable>); + EXPECT_TRUE(std::is_copy_assignable_v<Copyable>); + EXPECT_TRUE(std::is_move_constructible_v<Copyable>); + EXPECT_TRUE(std::is_move_assignable_v<Copyable>); + EXPECT_FALSE(std::is_copy_constructible_v<MoveOnly>); + EXPECT_FALSE(std::is_copy_assignable_v<MoveOnly>); + EXPECT_TRUE(std::is_move_constructible_v<MoveOnly>); + EXPECT_TRUE(std::is_move_assignable_v<MoveOnly>); + EXPECT_FALSE(std::is_copy_constructible_v<NonMovable>); + EXPECT_FALSE(std::is_copy_assignable_v<NonMovable>); + EXPECT_FALSE(std::is_move_constructible_v<NonMovable>); + EXPECT_FALSE(std::is_move_assignable_v<NonMovable>); } TEST(StatusOr, StatusOrAnyCopyAndMoveConstructorTests) { @@ -877,8 +877,8 @@ } TEST(StatusOr, AbslAnyAssignment) { - EXPECT_FALSE((std::is_assignable<absl::StatusOr<std::any>, - absl::StatusOr<int>>::value)); + EXPECT_FALSE( + (std::is_assignable_v<absl::StatusOr<std::any>, absl::StatusOr<int>>)); absl::StatusOr<std::any> status_or; status_or = absl::InvalidArgumentError("foo"); EXPECT_THAT(status_or, Not(IsOk())); @@ -912,10 +912,10 @@ struct B : public A {}; struct C : private A {}; - EXPECT_TRUE((std::is_constructible<absl::StatusOr<A*>, B*>::value)); - EXPECT_TRUE((std::is_convertible<B*, absl::StatusOr<A*>>::value)); - EXPECT_FALSE((std::is_constructible<absl::StatusOr<A*>, C*>::value)); - EXPECT_FALSE((std::is_convertible<C*, absl::StatusOr<A*>>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::StatusOr<A*>, B*>)); + EXPECT_TRUE((std::is_convertible_v<B*, absl::StatusOr<A*>>)); + EXPECT_FALSE((std::is_constructible_v<absl::StatusOr<A*>, C*>)); + EXPECT_FALSE((std::is_convertible_v<C*, absl::StatusOr<A*>>)); } TEST(StatusOr, TestAssignmentStatusNotOkConverting) { @@ -1087,21 +1087,19 @@ EXPECT_THAT(status_or, IsOkAndHolds(CopyDetectorHas(kValue2, true, false))); // U != T - EXPECT_TRUE( - (std::is_assignable<absl::StatusOr<MockValue>&, - const FromConstructibleAssignableLvalue&>::value)); - EXPECT_TRUE((std::is_assignable<absl::StatusOr<MockValue>&, - FromConstructibleAssignableLvalue&&>::value)); + EXPECT_TRUE((std::is_assignable_v<absl::StatusOr<MockValue>&, + const FromConstructibleAssignableLvalue&>)); + EXPECT_TRUE((std::is_assignable_v<absl::StatusOr<MockValue>&, + FromConstructibleAssignableLvalue&&>)); EXPECT_FALSE( - (std::is_assignable<absl::StatusOr<MockValue>&, - const FromConstructibleAssignableRvalue&>::value)); - EXPECT_TRUE((std::is_assignable<absl::StatusOr<MockValue>&, - FromConstructibleAssignableRvalue&&>::value)); - EXPECT_TRUE( - (std::is_assignable<absl::StatusOr<MockValue>&, - const FromImplicitConstructibleOnly&>::value)); - EXPECT_FALSE((std::is_assignable<absl::StatusOr<MockValue>&, - const FromAssignableOnly&>::value)); + (std::is_assignable_v<absl::StatusOr<MockValue>&, + const FromConstructibleAssignableRvalue&>)); + EXPECT_TRUE((std::is_assignable_v<absl::StatusOr<MockValue>&, + FromConstructibleAssignableRvalue&&>)); + EXPECT_TRUE((std::is_assignable_v<absl::StatusOr<MockValue>&, + const FromImplicitConstructibleOnly&>)); + EXPECT_FALSE((std::is_assignable_v<absl::StatusOr<MockValue>&, + const FromAssignableOnly&>)); absl::StatusOr<MockValue> from_lvalue(FromConstructibleAssignableLvalue{}); EXPECT_FALSE(from_lvalue->from_rvalue); @@ -1349,7 +1347,7 @@ TEST(StatusOr, StatusOrVectorOfUniquePointerCanReserveAndResize) { using EvilType = std::vector<std::unique_ptr<int>>; - static_assert(std::is_copy_constructible<EvilType>::value, ""); + static_assert(std::is_copy_constructible_v<EvilType>, ""); std::vector<::absl::StatusOr<EvilType>> v(5); v.reserve(v.capacity() + 10); v.resize(v.capacity() + 10); @@ -1364,13 +1362,13 @@ absl::StatusOr<const int> b(a); // Copy-assignment - EXPECT_FALSE(std::is_copy_assignable<absl::StatusOr<const int>>::value); + EXPECT_FALSE(std::is_copy_assignable_v<absl::StatusOr<const int>>); // Move-construction absl::StatusOr<const int> c(std::move(a)); // Move-assignment - EXPECT_FALSE(std::is_move_assignable<absl::StatusOr<const int>>::value); + EXPECT_FALSE(std::is_move_assignable_v<absl::StatusOr<const int>>); } TEST(StatusOr, MapToStatusOrUniquePtr) {
diff --git a/absl/strings/BUILD.bazel b/absl/strings/BUILD.bazel index 805cfc2..4c974ce 100644 --- a/absl/strings/BUILD.bazel +++ b/absl/strings/BUILD.bazel
@@ -435,7 +435,6 @@ visibility = [ "//absl:friends", "//absl/status:__pkg__", - "//visibility:private", ], deps = [ ":string_view",
diff --git a/absl/strings/ascii.cc b/absl/strings/ascii.cc index 4cd9ff9..b5c7e19 100644 --- a/absl/strings/ascii.cc +++ b/absl/strings/ascii.cc
@@ -195,7 +195,7 @@ for (size_t i = 0; i < size; ++i) { unsigned char v = static_cast<unsigned char>(src[i]); - if ABSL_INTERNAL_CONSTEXPR_SINCE_CXX17 (Naive) { + if constexpr (Naive) { v ^= AsciiInAZRangeNaive<ToUpper>(v) ? kAsciiCaseBitFlip : 0; } else { v ^= AsciiInAZRange<ToUpper>(v) ? kAsciiCaseBitFlip : 0;
diff --git a/absl/strings/cord.cc b/absl/strings/cord.cc index d15b5c3..f2912d1 100644 --- a/absl/strings/cord.cc +++ b/absl/strings/cord.cc
@@ -163,35 +163,6 @@ // -------------------------------------------------------------------- // Cord::InlineRep functions -inline void Cord::InlineRep::set_data(const char* absl_nullable data, - size_t n) { - static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15"); - assert(data != nullptr || n == 0); - data_.set_inline_data(data, n); -} - -inline char* absl_nonnull Cord::InlineRep::set_data(size_t n) { - assert(n <= kMaxInline); - ResetToEmpty(); - set_inline_size(n); - return data_.as_chars(); -} - -inline void Cord::InlineRep::reduce_size(size_t n) { - size_t tag = inline_size(); - assert(tag <= kMaxInline); - assert(tag >= n); - tag -= n; - memset(data_.as_chars() + tag, 0, n); - set_inline_size(tag); -} - -inline void Cord::InlineRep::remove_prefix(size_t n) { - cord_internal::SmallMemmove(data_.as_chars(), data_.as_chars() + n, - inline_size() - n); - reduce_size(n); -} - // Returns `rep` converted into a CordRepBtree. // Directly returns `rep` if `rep` is already a CordRepBtree. static CordRepBtree* absl_nonnull ForceBtree(CordRep* rep) {
diff --git a/absl/strings/cord.h b/absl/strings/cord.h index d00f5a1..22193b7 100644 --- a/absl/strings/cord.h +++ b/absl/strings/cord.h
@@ -176,8 +176,7 @@ class Cord { private: template <typename T> - using EnableIfString = - std::enable_if_t<std::is_same<T, std::string>::value, int>; + using EnableIfString = std::enable_if_t<std::is_same_v<T, std::string>, int>; public: // Cord::Cord() Constructors. @@ -1231,6 +1230,35 @@ return is_tree() ? nullptr : data_.as_chars(); } +inline char* absl_nonnull Cord::InlineRep::set_data(size_t n) { + assert(n <= kMaxInline); + ResetToEmpty(); + set_inline_size(n); + return data_.as_chars(); +} + +inline void Cord::InlineRep::set_data(const char* absl_nullable data, + size_t n) { + static_assert(kMaxInline == 15, "set_data is hard-coded for a length of 15"); + assert(data != nullptr || n == 0); + data_.set_inline_data(data, n); +} + +inline void Cord::InlineRep::reduce_size(size_t n) { + size_t tag = inline_size(); + assert(tag <= kMaxInline); + assert(tag >= n); + tag -= n; + memset(data_.as_chars() + tag, 0, n); + set_inline_size(tag); +} + +inline void Cord::InlineRep::remove_prefix(size_t n) { + cord_internal::SmallMemmove(data_.as_chars(), data_.as_chars() + n, + inline_size() - n); + reduce_size(n); +} + inline const char* absl_nonnull Cord::InlineRep::as_chars() const { assert(!data_.is_tree()); return data_.as_chars();
diff --git a/absl/strings/cord_test.cc b/absl/strings/cord_test.cc index 7591758..5c773e7 100644 --- a/absl/strings/cord_test.cc +++ b/absl/strings/cord_test.cc
@@ -1649,8 +1649,8 @@ EXPECT_TRUE(a == a); // For pointer type (i.e. `const char*`), operator== compares the address // instead of the string, so `a == const char*("a")` isn't necessarily true. - EXPECT_TRUE(std::is_pointer<T1>::value || a == T1("a")); - EXPECT_TRUE(std::is_pointer<T2>::value || a == T2("a")); + EXPECT_TRUE(std::is_pointer_v<T1> || a == T1("a")); + EXPECT_TRUE(std::is_pointer_v<T2> || a == T2("a")); EXPECT_FALSE(a == b); EXPECT_TRUE(a != b); @@ -2365,36 +2365,34 @@ } TEST_P(CordTest, CordChunkIteratorTraits) { - static_assert(std::is_copy_constructible<absl::Cord::ChunkIterator>::value, - ""); - static_assert(std::is_copy_assignable<absl::Cord::ChunkIterator>::value, ""); + static_assert(std::is_copy_constructible_v<absl::Cord::ChunkIterator>, ""); + static_assert(std::is_copy_assignable_v<absl::Cord::ChunkIterator>, ""); // Move semantics to satisfy swappable via std::swap - static_assert(std::is_move_constructible<absl::Cord::ChunkIterator>::value, - ""); - static_assert(std::is_move_assignable<absl::Cord::ChunkIterator>::value, ""); + static_assert(std::is_move_constructible_v<absl::Cord::ChunkIterator>, ""); + static_assert(std::is_move_assignable_v<absl::Cord::ChunkIterator>, ""); static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<absl::Cord::ChunkIterator>::iterator_category, - std::input_iterator_tag>::value, + std::input_iterator_tag>, ""); + static_assert(std::is_same_v< + std::iterator_traits<absl::Cord::ChunkIterator>::value_type, + absl::string_view>, + ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::value_type, - absl::string_view>::value, - ""); - static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<absl::Cord::ChunkIterator>::difference_type, - ptrdiff_t>::value, + ptrdiff_t>, ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::pointer, - const absl::string_view*>::value, + std::is_same_v<std::iterator_traits<absl::Cord::ChunkIterator>::pointer, + const absl::string_view*>, ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::ChunkIterator>::reference, - absl::string_view>::value, + std::is_same_v<std::iterator_traits<absl::Cord::ChunkIterator>::reference, + absl::string_view>, ""); } @@ -2554,36 +2552,34 @@ } TEST_P(CordTest, CharIteratorTraits) { - static_assert(std::is_copy_constructible<absl::Cord::CharIterator>::value, - ""); - static_assert(std::is_copy_assignable<absl::Cord::CharIterator>::value, ""); + static_assert(std::is_copy_constructible_v<absl::Cord::CharIterator>, ""); + static_assert(std::is_copy_assignable_v<absl::Cord::CharIterator>, ""); // Move semantics to satisfy swappable via std::swap - static_assert(std::is_move_constructible<absl::Cord::CharIterator>::value, - ""); - static_assert(std::is_move_assignable<absl::Cord::CharIterator>::value, ""); + static_assert(std::is_move_constructible_v<absl::Cord::CharIterator>, ""); + static_assert(std::is_move_assignable_v<absl::Cord::CharIterator>, ""); static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<absl::Cord::CharIterator>::iterator_category, - std::input_iterator_tag>::value, + std::input_iterator_tag>, ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::CharIterator>::value_type, - char>::value, + std::is_same_v<std::iterator_traits<absl::Cord::CharIterator>::value_type, + char>, ""); static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<absl::Cord::CharIterator>::difference_type, - ptrdiff_t>::value, + ptrdiff_t>, ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::CharIterator>::pointer, - const char*>::value, + std::is_same_v<std::iterator_traits<absl::Cord::CharIterator>::pointer, + const char*>, ""); static_assert( - std::is_same<std::iterator_traits<absl::Cord::CharIterator>::reference, - const char&>::value, + std::is_same_v<std::iterator_traits<absl::Cord::CharIterator>::reference, + const char&>, ""); }
diff --git a/absl/strings/escaping.h b/absl/strings/escaping.h index 9b27014..90ba5ef 100644 --- a/absl/strings/escaping.h +++ b/absl/strings/escaping.h
@@ -82,7 +82,7 @@ // CEscape() // -// Escapes a 'src' string using C-style escapes sequences +// Escapes a `src` string using C-style escapes sequences // (https://en.cppreference.com/w/cpp/language/escape), escaping other // non-printable/non-whitespace bytes as octal sequences (e.g. "\377"). // @@ -95,7 +95,7 @@ // CHexEscape() // -// Escapes a 'src' string using C-style escape sequences, escaping +// Escapes a `src` string using C-style escape sequences, escaping // other non-printable/non-whitespace bytes as hexadecimal sequences (e.g. // "\xFF"). // @@ -108,7 +108,7 @@ // Utf8SafeCEscape() // -// Escapes a 'src' string using C-style escape sequences, escaping bytes as +// Escapes a `src` string using C-style escape sequences, escaping bytes as // octal sequences, and passing through UTF-8 characters without conversion. // I.e., when encountering any bytes with their high bit set, this function // will not escape those values, whether or not they are valid UTF-8. @@ -116,14 +116,14 @@ // Utf8SafeCHexEscape() // -// Escapes a 'src' string using C-style escape sequences, escaping bytes as +// Escapes a `src` string using C-style escape sequences, escaping bytes as // hexadecimal sequences, and passing through UTF-8 characters without // conversion. std::string Utf8SafeCHexEscape(absl::string_view src); // Base64Escape() // -// Encodes a `src` string into a base64-encoded 'dest' string with padding +// Encodes a `src` string into a base64-encoded `dest` string with padding // characters. This function conforms with RFC 4648 section 4 (base64) and RFC // 2045. std::string Base64Escape(absl::string_view src); @@ -135,7 +135,7 @@ // WebSafeBase64Escape() // // Encodes a `src` string into a base64 string, like Base64Escape() does, but -// outputs '-' instead of '+' and '_' instead of '/', and does not pad 'dest'. +// outputs '-' instead of '+' and '_' instead of '/', and does not pad `dest`. // This function conforms with RFC 4648 section 5 (base64url). std::string WebSafeBase64Escape(absl::string_view src); ABSL_REFACTOR_INLINE inline void @@ -155,10 +155,11 @@ // WebSafeBase64Unescape() // // Converts a `src` string encoded in "web safe" Base64 (RFC 4648 section 5) to -// its binary equivalent, writing it to a `dest` buffer. If `src` contains -// invalid characters, `dest` is cleared and returns `false`. If padding is -// included (note that `WebSafeBase64Escape()` does not produce it), it must be -// correct. In the padding, '=' and '.' are treated identically. +// its binary equivalent, writing it to a `dest` buffer, returning `true` on +// success. If `src` contains invalid characters, `dest` is cleared and returns +// `false`. If padding is included (note that `WebSafeBase64Escape()` does not +// produce it), it must be correct. In the padding, '=' and '.' are treated +// identically. bool WebSafeBase64Unescape(absl::string_view src, std::string* absl_nonnull dest);
diff --git a/absl/strings/has_absl_stringify.h b/absl/strings/has_absl_stringify.h index 9af0191..45843ae 100644 --- a/absl/strings/has_absl_stringify.h +++ b/absl/strings/has_absl_stringify.h
@@ -54,9 +54,9 @@ template <typename T> struct HasAbslStringify< - T, std::enable_if_t<std::is_void<decltype(AbslStringify( + T, std::enable_if_t<std::is_void_v<decltype(AbslStringify( std::declval<strings_internal::UnimplementedSink&>(), - std::declval<const T&>()))>::value>> : std::true_type {}; + std::declval<const T&>()))>>> : std::true_type {}; ABSL_NAMESPACE_END } // namespace absl
diff --git a/absl/strings/internal/cordz_sample_token_test.cc b/absl/strings/internal/cordz_sample_token_test.cc index 487396b..22ef21c 100644 --- a/absl/strings/internal/cordz_sample_token_test.cc +++ b/absl/strings/internal/cordz_sample_token_test.cc
@@ -44,34 +44,33 @@ auto constexpr kTrackCordMethod = CordzUpdateTracker::kConstructorString; TEST(CordzSampleTokenTest, IteratorTraits) { - static_assert(std::is_copy_constructible<CordzSampleToken::Iterator>::value, - ""); - static_assert(std::is_copy_assignable<CordzSampleToken::Iterator>::value, ""); - static_assert(std::is_move_constructible<CordzSampleToken::Iterator>::value, - ""); - static_assert(std::is_move_assignable<CordzSampleToken::Iterator>::value, ""); + static_assert(std::is_copy_constructible_v<CordzSampleToken::Iterator>, ""); + static_assert(std::is_copy_assignable_v<CordzSampleToken::Iterator>, ""); + static_assert(std::is_move_constructible_v<CordzSampleToken::Iterator>, ""); + static_assert(std::is_move_assignable_v<CordzSampleToken::Iterator>, ""); static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<CordzSampleToken::Iterator>::iterator_category, - std::input_iterator_tag>::value, + std::input_iterator_tag>, ""); static_assert( - std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::value_type, - const CordzInfo&>::value, + std::is_same_v< + std::iterator_traits<CordzSampleToken::Iterator>::value_type, + const CordzInfo&>, ""); static_assert( - std::is_same< + std::is_same_v< std::iterator_traits<CordzSampleToken::Iterator>::difference_type, - ptrdiff_t>::value, + ptrdiff_t>, ""); static_assert( - std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::pointer, - const CordzInfo*>::value, + std::is_same_v<std::iterator_traits<CordzSampleToken::Iterator>::pointer, + const CordzInfo*>, ""); - static_assert( - std::is_same<std::iterator_traits<CordzSampleToken::Iterator>::reference, - const CordzInfo&>::value, - ""); + static_assert(std::is_same_v< + std::iterator_traits<CordzSampleToken::Iterator>::reference, + const CordzInfo&>, + ""); } TEST(CordzSampleTokenTest, IteratorEmpty) {
diff --git a/absl/strings/internal/generic_printer_test.cc b/absl/strings/internal/generic_printer_test.cc index 85c7a75..f5b737b 100644 --- a/absl/strings/internal/generic_printer_test.cc +++ b/absl/strings/internal/generic_printer_test.cc
@@ -296,10 +296,9 @@ TEST(GenericPrinterTest, StreamAdapter) { std::stringstream ss; static_assert( - std::is_same< - typename std::remove_reference<decltype(ss << GenericPrint())>::type, - internal_generic_printer::GenericPrintStreamAdapter::Impl< - std::stringstream>>::value, + std::is_same<std::remove_reference_t<decltype(ss << GenericPrint())>, + internal_generic_printer::GenericPrintStreamAdapter::Impl< + std::stringstream>>::value, "expected ostream << GenericPrint() to yield adapter impl"); ss << GenericPrint() << "again, " << "back-up, " << "cue, "
diff --git a/absl/strings/internal/stl_type_traits.h b/absl/strings/internal/stl_type_traits.h index cffbe55..ae8454d 100644 --- a/absl/strings/internal/stl_type_traits.h +++ b/absl/strings/internal/stl_type_traits.h
@@ -98,8 +98,8 @@ template <typename C, template <typename, typename, typename, typename> class T> struct IsBaseOfSpecializationImpl< C, T, - absl::void_t<typename C::key_type, typename C::mapped_type, - typename C::key_compare, typename C::allocator_type>> + std::void_t<typename C::key_type, typename C::mapped_type, + typename C::key_compare, typename C::allocator_type>> : std::is_base_of<C, T<typename C::key_type, typename C::mapped_type, typename C::key_compare, typename C::allocator_type>> { @@ -107,8 +107,12 @@ template <typename C, template <typename, typename, typename, typename> class T> struct IsBaseOfSpecializationImpl< C, T, - absl::void_t<typename C::key_type, typename C::hasher, - typename C::key_equal, typename C::allocator_type>> + // Roundabout equivalent of std::void_t that works around a template + // redefinition error from Clang. + std::conditional_t< + true, void, + std::common_type<typename C::key_type, typename C::hasher, + typename C::key_equal, typename C::allocator_type>>> : std::is_base_of<C, T<typename C::key_type, typename C::hasher, typename C::key_equal, typename C::allocator_type>> { }; @@ -176,16 +180,20 @@ template <typename C, template <typename, typename, typename, typename> class T> struct IsConvertibleToSpecializationImpl< C, T, - absl::void_t<typename C::key_type, typename C::mapped_type, - typename C::key_compare, typename C::allocator_type>> + std::void_t<typename C::key_type, typename C::mapped_type, + typename C::key_compare, typename C::allocator_type>> : std::is_convertible< C, T<typename C::key_type, typename C::mapped_type, typename C::key_compare, typename C::allocator_type>> {}; template <typename C, template <typename, typename, typename, typename> class T> struct IsConvertibleToSpecializationImpl< C, T, - absl::void_t<typename C::key_type, typename C::hasher, - typename C::key_equal, typename C::allocator_type>> + // Roundabout equivalent of std::void_t that works around a template + // redefinition error from Clang. + std::conditional_t< + true, void, + std::common_type<typename C::key_type, typename C::hasher, + typename C::key_equal, typename C::allocator_type>>> : std::is_convertible< C, T<typename C::key_type, typename C::hasher, typename C::key_equal, typename C::allocator_type>> {};
diff --git a/absl/strings/internal/str_format/arg.cc b/absl/strings/internal/str_format/arg.cc index 01e4e42..a51f7d7 100644 --- a/absl/strings/internal/str_format/arg.cc +++ b/absl/strings/internal/str_format/arg.cc
@@ -95,7 +95,7 @@ // Supports all integral types. template <typename T> void PrintAsDec(T v) { - static_assert(std::is_integral<T>::value, ""); + static_assert(std::is_integral_v<T>, ""); start_ = storage_; size_ = static_cast<size_t>(numbers_internal::FastIntToBuffer(v, storage_) - storage_); @@ -356,8 +356,7 @@ // FormatConversionChar is declared, but not defined. switch (static_cast<uint8_t>(conv.conversion_char())) { case static_cast<uint8_t>(FormatConversionCharInternal::c): - return (std::is_same<T, wchar_t>::value || - (conv.length_mod() == LengthMod::l)) + return (std::is_same_v<T, wchar_t> || (conv.length_mod() == LengthMod::l)) ? ConvertWCharTImpl(static_cast<wchar_t>(v), conv, sink) : ConvertCharImpl(static_cast<char>(v), conv, sink);
diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h index add64e7..a48a76f 100644 --- a/absl/strings/internal/str_format/arg.h +++ b/absl/strings/internal/str_format/arg.h
@@ -143,9 +143,9 @@ template <typename T> auto FormatConvertImpl(const T& v, FormatConversionSpecImpl conv, FormatSinkImpl* sink) - -> std::enable_if_t<std::is_enum<T>::value && - std::is_void<decltype(AbslStringify( - std::declval<FormatSink&>(), v))>::value, + -> std::enable_if_t<std::is_enum_v<T> && + std::is_void_v<decltype(AbslStringify( + std::declval<FormatSink&>(), v))>, IntegralConvertResult> { if (conv.conversion_char() == FormatConversionCharInternal::v) { using FormatSinkT = @@ -154,18 +154,17 @@ AbslStringify(fs, v); return {true}; } else { - return {ConvertIntArg( - static_cast<typename std::underlying_type<T>::type>(v), conv, sink)}; + return { + ConvertIntArg(static_cast<std::underlying_type_t<T>>(v), conv, sink)}; } } template <typename T> auto FormatConvertImpl(const T& v, FormatConversionSpecImpl, FormatSinkImpl* sink) - -> std::enable_if_t<!std::is_enum<T>::value && - !std::is_same<T, absl::Cord>::value && - std::is_void<decltype(AbslStringify( - std::declval<FormatSink&>(), v))>::value, + -> std::enable_if_t<!std::is_enum_v<T> && !std::is_same_v<T, absl::Cord> && + std::is_void_v<decltype(AbslStringify( + std::declval<FormatSink&>(), v))>, ArgConvertResult<FormatConversionCharSetInternal::v>> { using FormatSinkT = std::enable_if_t<sizeof(const T& (*)()) != 0, FormatSink>; auto fs = sink->Wrap<FormatSinkT>(); @@ -247,8 +246,8 @@ FormatConversionSpecImpl conv, FormatSinkImpl* sink); -template <class AbslCord, typename std::enable_if<std::is_same< - AbslCord, absl::Cord>::value>::type* = nullptr> +template <class AbslCord, + std::enable_if_t<std::is_same_v<AbslCord, absl::Cord>>* = nullptr> StringConvertResult FormatConvertImpl(const AbslCord& value, FormatConversionSpecImpl conv, FormatSinkImpl* sink) { @@ -340,7 +339,7 @@ // This function needs to be a template due to ambiguity regarding type // conversions. -template <typename T, std::enable_if_t<std::is_same<T, bool>::value, int> = 0> +template <typename T, std::enable_if_t<std::is_same_v<T, bool>, int> = 0> IntegralConvertResult FormatConvertImpl(T v, FormatConversionSpecImpl conv, FormatSinkImpl* sink) { if (conv.conversion_char() == FormatConversionCharInternal::v) { @@ -353,10 +352,9 @@ // We provide this function to help the checker, but it is never defined. // FormatArgImpl will use the underlying Convert functions instead. template <typename T> -typename std::enable_if<std::is_enum<T>::value && - !HasUserDefinedConvert<T>::value && - !HasAbslStringify<T>::value, - IntegralConvertResult>::type +std::enable_if_t<std::is_enum_v<T> && !HasUserDefinedConvert<T>::value && + !HasAbslStringify<T>::value, + IntegralConvertResult> FormatConvertImpl(T v, FormatConversionSpecImpl conv, FormatSinkImpl* sink); template <typename T> @@ -442,17 +440,16 @@ template <typename T> struct store_by_value - : std::integral_constant<bool, (sizeof(T) <= kInlinedSpace) && - (std::is_integral<T>::value || - std::is_floating_point<T>::value || - std::is_pointer<T>::value || - std::is_same<VoidPtr, T>::value)> {}; + : std::integral_constant< + bool, (sizeof(T) <= kInlinedSpace) && + (std::is_integral_v<T> || std::is_floating_point_v<T> || + std::is_pointer_v<T> || std::is_same_v<VoidPtr, T>)> {}; enum StoragePolicy { ByPointer, ByVolatilePointer, ByValue }; template <typename T> struct storage_policy : std::integral_constant<StoragePolicy, - (std::is_volatile<T>::value + (std::is_volatile_v<T> ? ByVolatilePointer : (store_by_value<T>::value ? ByValue : ByPointer))> { @@ -471,22 +468,21 @@ static constexpr bool kHasUserDefined = str_format_internal::HasUserDefinedConvert<T>::value || HasAbslStringify<T>::value; - using type = typename std::conditional< - !kHasUserDefined && std::is_convertible<T, const char*>::value, - const char*, - typename std::conditional< - !kHasUserDefined && std::is_convertible<T, const wchar_t*>::value, + using type = std::conditional_t< + !kHasUserDefined && std::is_convertible_v<T, const char*>, const char*, + std::conditional_t< + !kHasUserDefined && std::is_convertible_v<T, const wchar_t*>, const wchar_t*, - typename std::conditional< - !kHasUserDefined && std::is_convertible<T, VoidPtr>::value, - VoidPtr, const T&>::type>::type>::type; + std::conditional_t<!kHasUserDefined && + std::is_convertible_v<T, VoidPtr>, + VoidPtr, const T&>>>; }; template <typename T> struct DecayType< - T, typename std::enable_if< - !str_format_internal::HasUserDefinedConvert<T>::value && - !HasAbslStringify<T>::value && std::is_enum<T>::value>::type> { - using type = decltype(+typename std::underlying_type<T>::type()); + T, + std::enable_if_t<!str_format_internal::HasUserDefinedConvert<T>::value && + !HasAbslStringify<T>::value && std::is_enum_v<T>>> { + using type = decltype(+std::underlying_type_t<T>()); }; public: @@ -494,7 +490,7 @@ explicit FormatArgImpl(const T& value) { using D = typename DecayType<T>::type; static_assert( - std::is_same<D, const T&>::value || storage_policy<D>::value == ByValue, + std::is_same_v<D, const T&> || storage_policy<D>::value == ByValue, "Decayed types must be stored by value"); Init(static_cast<D>(value)); } @@ -551,12 +547,12 @@ template <typename T> static int ToIntVal(const T& val) { - using CommonType = typename std::conditional<std::is_signed<T>::value, - int64_t, uint64_t>::type; + using CommonType = + std::conditional_t<std::is_signed_v<T>, int64_t, uint64_t>; if (static_cast<CommonType>(val) > static_cast<CommonType>((std::numeric_limits<int>::max)())) { return (std::numeric_limits<int>::max)(); - } else if (std::is_signed<T>::value && + } else if (std::is_signed_v<T> && static_cast<CommonType>(val) < static_cast<CommonType>((std::numeric_limits<int>::min)())) { return (std::numeric_limits<int>::min)(); @@ -574,8 +570,8 @@ template <typename T> static bool ToInt(Data arg, int* out, std::false_type, std::true_type /* is_enum */) { - *out = ToIntVal(static_cast<typename std::underlying_type<T>::type>( - Manager<T>::Value(arg))); + *out = ToIntVal( + static_cast<std::underlying_type_t<T>>(Manager<T>::Value(arg))); return true; }
diff --git a/absl/strings/internal/str_format/convert_test.cc b/absl/strings/internal/str_format/convert_test.cc index 4b06138..1c3d1a3 100644 --- a/absl/strings/internal/str_format/convert_test.cc +++ b/absl/strings/internal/str_format/convert_test.cc
@@ -120,7 +120,7 @@ // An integral type of the same rank and signedness as `wchar_t`, that isn't // `wchar_t`. using IntegralTypeForWCharT = - std::conditional_t<std::is_signed<wchar_t>::value, + std::conditional_t<std::is_signed_v<wchar_t>, // Some STLs are broken and return `wchar_t` from // `std::make_[un]signed_t<wchar_t>` when the signedness // matches. Work around by round-tripping through the @@ -131,8 +131,8 @@ // Given an integral type `T`, returns a type of the same rank and signedness // that is guaranteed to not be `wchar_t`. template <typename T> -using MatchingIntegralType = std::conditional_t<std::is_same<T, wchar_t>::value, - IntegralTypeForWCharT, T>; +using MatchingIntegralType = + std::conditional_t<std::is_same_v<T, wchar_t>, IntegralTypeForWCharT, T>; std::string EscCharImpl(int v) { char buf[64]; @@ -502,8 +502,8 @@ TYPED_TEST_P(TypedFormatConvertTest, AllIntsWithFlags) { typedef TypeParam T; - typedef typename std::make_unsigned<T>::type UnsignedT; - using remove_volatile_t = typename std::remove_volatile<T>::type; + typedef std::make_unsigned_t<T> UnsignedT; + using remove_volatile_t = std::remove_volatile_t<T>; const T kMin = std::numeric_limits<remove_volatile_t>::min(); const T kMax = std::numeric_limits<remove_volatile_t>::max(); const T kVals[] = { @@ -542,7 +542,7 @@ const bool is_signed_conv = (conv_char == 'd' || conv_char == 'i'); const bool is_unsigned_to_signed = - !std::is_signed<T>::value && is_signed_conv; + !std::is_signed_v<T> && is_signed_conv; // Don't consider sign-related flags '+' and ' ' when doing // unsigned to signed conversions. if (is_unsigned_to_signed && @@ -616,8 +616,8 @@ } template <typename T> -typename std::remove_volatile<T>::type GetMaxForConversion() { - return static_cast<typename std::remove_volatile<T>::type>( +std::remove_volatile_t<T> GetMaxForConversion() { + return static_cast<std::remove_volatile_t<T>>( std::numeric_limits<int>::max()); } @@ -635,7 +635,7 @@ // vsnprintf("%c", ...) (wrapped in StrPrint) to make sure we get the same // value. typedef TypeParam T; - using remove_volatile_t = typename std::remove_volatile<T>::type; + using remove_volatile_t = std::remove_volatile_t<T>; std::vector<remove_volatile_t> vals = { remove_volatile_t(1), remove_volatile_t(2), remove_volatile_t(10), // remove_volatile_t(-1), remove_volatile_t(-2), remove_volatile_t(-10), // @@ -649,8 +649,7 @@ // Special case: Formatting a wchar_t should behave like vsnprintf("%lc"). // Technically vsnprintf can accept a wint_t in this case, but since we must // pass a wchar_t to FormatPack, the largest type we can use here is wchar_t. - using ArgType = - std::conditional_t<std::is_same<T, wchar_t>::value, wchar_t, int>; + using ArgType = std::conditional_t<std::is_same_v<T, wchar_t>, wchar_t, int>; static const T kMin = static_cast<remove_volatile_t>(std::numeric_limits<ArgType>::min()); static const T kMax = GetMaxForConversion<T>();
diff --git a/absl/strings/internal/str_format/float_conversion.cc b/absl/strings/internal/str_format/float_conversion.cc index fe0bdc7..f69b8ef 100644 --- a/absl/strings/internal/str_format/float_conversion.cc +++ b/absl/strings/internal/str_format/float_conversion.cc
@@ -124,8 +124,7 @@ return static_cast<char>(next_carry % divisor); } -using MaxFloatType = - typename std::conditional<IsDoubleDouble(), double, long double>::type; +using MaxFloatType = std::conditional_t<IsDoubleDouble(), double, long double>; // Generates the decimal representation for an integer of the form `v * 2^exp`, // where `v` and `exp` are both positive integers. @@ -1170,8 +1169,7 @@ #if defined(__clang__) && (__clang_major__ < 9) && !defined(__SSE3__) // Workaround for clang bug: https://bugs.llvm.org/show_bug.cgi?id=38289 // Casting from long double to uint64_t is miscompiled and drops bits. - (!std::is_same<Float, long double>::value || - !std::is_same<Int, uint64_t>::value) && + (!std::is_same_v<Float, long double> || !std::is_same_v<Int, uint64_t>) && #endif std::numeric_limits<Float>::digits <= std::numeric_limits<Int>::digits; } @@ -1179,8 +1177,7 @@ template <typename Float> struct Decomposed { using MantissaType = - std::conditional_t<std::is_same<long double, Float>::value, uint128, - uint64_t>; + std::conditional_t<std::is_same_v<long double, Float>, uint128, uint64_t>; static_assert(std::numeric_limits<Float>::digits <= sizeof(MantissaType) * 8, ""); MantissaType mantissa;
diff --git a/absl/strings/internal/str_split_internal.h b/absl/strings/internal/str_split_internal.h index 9556f6a..1cec468 100644 --- a/absl/strings/internal/str_split_internal.h +++ b/absl/strings/internal/str_split_internal.h
@@ -234,8 +234,7 @@ #ifdef _GLIBCXX_DEBUG !IsStrictlyBaseOfAndConvertibleToSTLContainer<C>::value && #endif // _GLIBCXX_DEBUG - !IsInitializerList< - typename std::remove_reference<C>::type>::value && + !IsInitializerList<std::remove_reference_t<C>>::value && HasValueType<C>::value && HasConstIterator<C>::value, HasMappedType<C>::value> { }; @@ -247,20 +246,22 @@ struct ShouldUseLifetimeBound< StringType, Container, std::enable_if_t< - std::is_same<StringType, std::string>::value && - std::is_same<typename Container::value_type, absl::string_view>::value>> + std::is_same_v<StringType, std::string> && + std::is_same_v<typename Container::value_type, absl::string_view>>> : std::true_type {}; template <typename StringType, typename First, typename Second> -using ShouldUseLifetimeBoundForPair = std::integral_constant< - bool, std::is_same<StringType, std::string>::value && - (std::is_same<First, absl::string_view>::value || - std::is_same<Second, absl::string_view>::value)>; +using ShouldUseLifetimeBoundForPair = + std::integral_constant<bool, + std::is_same_v<StringType, std::string> && + (std::is_same_v<First, absl::string_view> || + std::is_same_v<Second, absl::string_view>)>; template <typename StringType, typename ElementType, std::size_t Size> -using ShouldUseLifetimeBoundForArray = std::integral_constant< - bool, std::is_same<StringType, std::string>::value && - std::is_same<ElementType, absl::string_view>::value>; +using ShouldUseLifetimeBoundForArray = + std::integral_constant<bool, + std::is_same_v<StringType, std::string> && + std::is_same_v<ElementType, absl::string_view>>; // This class implements the range that is returned by absl::StrSplit(). This // class has templated conversion operators that allow it to be implicitly
diff --git a/absl/strings/internal/string_constant_test.cc b/absl/strings/internal/string_constant_test.cc index c8b3591..86914d6 100644 --- a/absl/strings/internal/string_constant_test.cc +++ b/absl/strings/internal/string_constant_test.cc
@@ -33,12 +33,12 @@ constexpr auto str = MakeStringConstant(Callable{}); using T = decltype(str); - EXPECT_TRUE(std::is_empty<T>::value); - EXPECT_TRUE(std::is_trivial<T>::value); - EXPECT_TRUE(std::is_trivially_default_constructible<T>::value); - EXPECT_TRUE(std::is_trivially_copy_constructible<T>::value); - EXPECT_TRUE(std::is_trivially_move_constructible<T>::value); - EXPECT_TRUE(std::is_trivially_destructible<T>::value); + EXPECT_TRUE(std::is_empty_v<T>); + EXPECT_TRUE(std::is_trivial_v<T>); + EXPECT_TRUE(std::is_trivially_default_constructible_v<T>); + EXPECT_TRUE(std::is_trivially_copy_constructible_v<T>); + EXPECT_TRUE(std::is_trivially_move_constructible_v<T>); + EXPECT_TRUE(std::is_trivially_destructible_v<T>); } TEST(StringConstant, MakeFromCallable) {
diff --git a/absl/strings/numbers.h b/absl/strings/numbers.h index b4f81a3..7e9c6bb 100644 --- a/absl/strings/numbers.h +++ b/absl/strings/numbers.h
@@ -128,7 +128,7 @@ template <typename int_type> constexpr bool is_signed() { - if constexpr (std::is_arithmetic<int_type>::value) { + if constexpr (std::is_arithmetic_v<int_type>) { // Use std::numeric_limits<T>::is_signed where it's defined to work. return std::numeric_limits<int_type>::is_signed; } @@ -248,7 +248,7 @@ static_assert(sizeof(*out) == 1 || sizeof(*out) == 2 || sizeof(*out) == 4 || sizeof(*out) == 8, "SimpleAtoi works only with 8, 16, 32, or 64-bit integers."); - static_assert(!std::is_floating_point<int_type>::value, + static_assert(!std::is_floating_point_v<int_type>, "Use SimpleAtof or SimpleAtod instead."); bool parsed; // These conditions are constexpr bools to suppress MSVC warning C4127.
diff --git a/absl/strings/numbers_benchmark.cc b/absl/strings/numbers_benchmark.cc index c58f861..9511024 100644 --- a/absl/strings/numbers_benchmark.cc +++ b/absl/strings/numbers_benchmark.cc
@@ -34,7 +34,7 @@ char buf[absl::numbers_internal::kFastToBufferSize]; // Use the unsigned type to increment to take advantage of well-defined // modular arithmetic. - typename std::make_unsigned<T>::type x = 0; + std::make_unsigned_t<T> x = 0; for (auto _ : state) { absl::numbers_internal::FastIntToBuffer(static_cast<T>(x), buf); x += inc;
diff --git a/absl/strings/numbers_test.cc b/absl/strings/numbers_test.cc index 41f8c73..dd57a88 100644 --- a/absl/strings/numbers_test.cc +++ b/absl/strings/numbers_test.cc
@@ -808,7 +808,7 @@ std::string s; absl::strings_internal::OStringStream strm(&s); if (in_value >= 0) { - if constexpr (std::is_arithmetic<in_val_type>::value) { + if constexpr (std::is_arithmetic_v<in_val_type>) { absl::StrAppend(&s, absl::Hex(in_value)); } else { // absl::Hex doesn't work with absl::(u)int128. @@ -833,7 +833,7 @@ std::string s; absl::strings_internal::OStringStream strm(&s); if (in_value >= 0) { - if constexpr (std::is_arithmetic<in_val_type>::value) { + if constexpr (std::is_arithmetic_v<in_val_type>) { absl::StrAppend(&s, absl::Hex(in_value)); } else { // absl::Hex doesn't work with absl::(u)int128.
diff --git a/absl/strings/str_cat.h b/absl/strings/str_cat.h index 18e7058..d682cea 100644 --- a/absl/strings/str_cat.h +++ b/absl/strings/str_cat.h
@@ -196,28 +196,24 @@ char fill; template <typename Int> - explicit Hex( - Int v, PadSpec spec = absl::kNoPad, - std::enable_if_t<sizeof(Int) == 1 && !std::is_pointer<Int>::value, bool> = - true) + explicit Hex(Int v, PadSpec spec = absl::kNoPad, + std::enable_if_t<sizeof(Int) == 1 && !std::is_pointer_v<Int>, + bool> = true) : Hex(spec, static_cast<uint8_t>(v)) {} template <typename Int> - explicit Hex( - Int v, PadSpec spec = absl::kNoPad, - std::enable_if_t<sizeof(Int) == 2 && !std::is_pointer<Int>::value, bool> = - true) + explicit Hex(Int v, PadSpec spec = absl::kNoPad, + std::enable_if_t<sizeof(Int) == 2 && !std::is_pointer_v<Int>, + bool> = true) : Hex(spec, static_cast<uint16_t>(v)) {} template <typename Int> - explicit Hex( - Int v, PadSpec spec = absl::kNoPad, - std::enable_if_t<sizeof(Int) == 4 && !std::is_pointer<Int>::value, bool> = - true) + explicit Hex(Int v, PadSpec spec = absl::kNoPad, + std::enable_if_t<sizeof(Int) == 4 && !std::is_pointer_v<Int>, + bool> = true) : Hex(spec, static_cast<uint32_t>(v)) {} template <typename Int> - explicit Hex( - Int v, PadSpec spec = absl::kNoPad, - std::enable_if_t<sizeof(Int) == 8 && !std::is_pointer<Int>::value, bool> = - true) + explicit Hex(Int v, PadSpec spec = absl::kNoPad, + std::enable_if_t<sizeof(Int) == 8 && !std::is_pointer_v<Int>, + bool> = true) : Hex(spec, static_cast<uint64_t>(v)) {} template <typename Pointee> explicit Hex(Pointee* absl_nullable v, PadSpec spec = absl::kNoPad) @@ -408,8 +404,7 @@ : piece_(pc.data(), pc.size()) {} #endif // !ABSL_USES_STD_STRING_VIEW - template <typename T, typename = typename std::enable_if< - HasAbslStringify<T>::value>::type> + template <typename T, typename = std::enable_if_t<HasAbslStringify<T>::value>> AlphaNum( // NOLINT(runtime/explicit) const T& v ABSL_ATTRIBUTE_LIFETIME_BOUND, strings_internal::StringifySink&& sink ABSL_ATTRIBUTE_LIFETIME_BOUND = {}) @@ -434,31 +429,29 @@ // Match unscoped enums. Use integral promotion so that a `char`-backed // enum becomes a wider integral type AlphaNum will accept. template <typename T, - typename = typename std::enable_if< - std::is_enum<T>{} && std::is_convertible<T, int>{} && - !HasAbslStringify<T>::value>::type> + typename = std::enable_if_t<std::is_enum<T>{} && + std::is_convertible<T, int>{} && + !HasAbslStringify<T>::value>> AlphaNum(T e) // NOLINT(runtime/explicit) : AlphaNum(+e) {} // This overload matches scoped enums. We must explicitly cast to the // underlying type, but use integral promotion for the same reason as above. - template <typename T, - typename std::enable_if<std::is_enum<T>{} && - !std::is_convertible<T, int>{} && - !HasAbslStringify<T>::value, - char*>::type = nullptr> + template <typename T, std::enable_if_t<std::is_enum<T>{} && + !std::is_convertible<T, int>{} && + !HasAbslStringify<T>::value, + char*> = nullptr> AlphaNum(T e) // NOLINT(runtime/explicit) - : AlphaNum(+static_cast<typename std::underlying_type<T>::type>(e)) {} + : AlphaNum(+static_cast<std::underlying_type_t<T>>(e)) {} // vector<bool>::reference and const_reference require special help to // convert to `AlphaNum` because it requires two user defined conversions. template < typename T, - typename std::enable_if< - std::is_class<T>::value && - (std::is_same<T, std::vector<bool>::reference>::value || - std::is_same<T, std::vector<bool>::const_reference>::value)>::type* = - nullptr> + std::enable_if_t< + std::is_class_v<T> && + (std::is_same_v<T, std::vector<bool>::reference> || + std::is_same_v<T, std::vector<bool>::const_reference>)>* = nullptr> AlphaNum(T e) : AlphaNum(static_cast<bool>(e)) {} // NOLINT(runtime/explicit) private:
diff --git a/absl/strings/str_format.h b/absl/strings/str_format.h index ffa7f11..d02fe20 100644 --- a/absl/strings/str_format.h +++ b/absl/strings/str_format.h
@@ -49,7 +49,8 @@ // * A `FormatSpec` class template fully encapsulates a format string and its // type arguments and is usually provided to `str_format` functions as a // variadic argument of type `FormatSpec<Arg...>`. The `FormatSpec<Args...>` -// template is evaluated at compile-time, providing type safety. +// template is evaluated at compile-time, providing type safety (supported +// on GCC and Clang; on MSVC, these checks are deferred to runtime). // * A `ParsedFormat` instance, which encapsulates a specific, pre-compiled // format string for a specific set of type(s), and which can be passed // between API boundaries. (The `FormatSpec` type should not be used @@ -275,7 +276,9 @@ // any string-like argument, so `std::string`, `std::wstring`, // `absl::string_view`, `const char*`, and `const wchar_t*` are all accepted. // Likewise, `%d` accepts any integer-like argument, etc. - +// +// Note: Compile-time format string checking is supported on GCC and +// Clang. On MSVC, these checks are performed at runtime instead. template <typename... Args> using FormatSpec = str_format_internal::FormatSpecTemplate< str_format_internal::ArgumentToConv<Args>()...>; @@ -497,9 +500,8 @@ public: // Implicitly convert from any type that provides the hook function as // described above. - template <typename T, - typename = typename std::enable_if<std::is_constructible< - str_format_internal::FormatRawSinkImpl, T*>::value>::type> + template <typename T, typename = std::enable_if_t<std::is_constructible_v< + str_format_internal::FormatRawSinkImpl, T*>>> FormatRawSink(T* absl_nonnull raw) // NOLINT : sink_(raw) {}
diff --git a/absl/strings/str_join.h b/absl/strings/str_join.h index 8d7bc6b..dd9f7f4 100644 --- a/absl/strings/str_join.h +++ b/absl/strings/str_join.h
@@ -247,9 +247,9 @@ return strings_internal::JoinRange(range, separator, fmt); } -template <typename T, typename Formatter, - typename = typename std::enable_if< - !std::is_convertible<T, absl::string_view>::value>::type> +template < + typename T, typename Formatter, + typename = std::enable_if_t<!std::is_convertible_v<T, absl::string_view>>> std::string StrJoin(std::initializer_list<T> il, absl::string_view separator, Formatter&& fmt) { return strings_internal::JoinRange(il, separator, fmt); @@ -277,8 +277,8 @@ return strings_internal::JoinRange(range, separator); } -template <typename T, typename = typename std::enable_if<!std::is_convertible< - T, absl::string_view>::value>::type> +template <typename T, typename = std::enable_if_t< + !std::is_convertible_v<T, absl::string_view>>> std::string StrJoin(std::initializer_list<T> il, absl::string_view separator) { return strings_internal::JoinRange(il, separator); }
diff --git a/absl/strings/str_split.h b/absl/strings/str_split.h index e9b7378..a0931a8 100644 --- a/absl/strings/str_split.h +++ b/absl/strings/str_split.h
@@ -389,9 +389,9 @@ template <typename T> using EnableSplitIfString = - typename std::enable_if<std::is_same<T, std::string>::value || - std::is_same<T, const std::string>::value, - int>::type; + std::enable_if_t<std::is_same_v<T, std::string> || + std::is_same_v<T, const std::string>, + int>; //------------------------------------------------------------------------------ // StrSplit()
diff --git a/absl/strings/substitute.h b/absl/strings/substitute.h index 3e6a8c7..626d52d 100644 --- a/absl/strings/substitute.h +++ b/absl/strings/substitute.h
@@ -176,8 +176,7 @@ Arg(bool value) // NOLINT(google-explicit-constructor) : piece_(value ? "true" : "false") {} - template <typename T, typename = typename std::enable_if< - HasAbslStringify<T>::value>::type> + template <typename T, typename = std::enable_if_t<HasAbslStringify<T>::value>> Arg( // NOLINT(google-explicit-constructor) const T& v, strings_internal::StringifySink&& sink = {}) : piece_(strings_internal::ExtractStringification(sink, v)) {} @@ -187,13 +186,12 @@ // vector<bool>::reference and const_reference require special help to convert // to `Arg` because it requires two user defined conversions. - template < - typename T, - std::enable_if_t< - std::is_class<T>::value && - (std::is_same<T, std::vector<bool>::reference>::value || - std::is_same<T, std::vector<bool>::const_reference>::value), - bool> = true> + template <typename T, + std::enable_if_t< + std::is_class_v<T> && + (std::is_same_v<T, std::vector<bool>::reference> || + std::is_same_v<T, std::vector<bool>::const_reference>), + bool> = true> Arg(T value) // NOLINT(google-explicit-constructor) : Arg(static_cast<bool>(value)) {} @@ -205,11 +203,11 @@ // Normal enums are already handled by the integer formatters. // This overload matches only scoped enums. template <typename T, - typename = typename std::enable_if< - std::is_enum<T>{} && !std::is_convertible<T, int>{} && - !HasAbslStringify<T>::value>::type> + typename = std::enable_if_t<std::is_enum<T>{} && + !std::is_convertible<T, int>{} && + !HasAbslStringify<T>::value>> Arg(T value) // NOLINT(google-explicit-constructor) - : Arg(static_cast<typename std::underlying_type<T>::type>(value)) {} + : Arg(static_cast<std::underlying_type_t<T>>(value)) {} Arg(const Arg&) = delete; Arg& operator=(const Arg&) = delete;
diff --git a/absl/synchronization/internal/win32_waiter.cc b/absl/synchronization/internal/win32_waiter.cc index b2fe402..eade1ca 100644 --- a/absl/synchronization/internal/win32_waiter.cc +++ b/absl/synchronization/internal/win32_waiter.cc
@@ -52,14 +52,14 @@ // The SRWLOCK and CONDITION_VARIABLE types must be trivially constructible // and destructible because we never call their constructors or destructors. - static_assert(std::is_trivially_constructible<SRWLOCK>::value, + static_assert(std::is_trivially_constructible_v<SRWLOCK>, "The `SRWLOCK` type must be trivially constructible"); static_assert( - std::is_trivially_constructible<CONDITION_VARIABLE>::value, + std::is_trivially_constructible_v<CONDITION_VARIABLE>, "The `CONDITION_VARIABLE` type must be trivially constructible"); - static_assert(std::is_trivially_destructible<SRWLOCK>::value, + static_assert(std::is_trivially_destructible_v<SRWLOCK>, "The `SRWLOCK` type must be trivially destructible"); - static_assert(std::is_trivially_destructible<CONDITION_VARIABLE>::value, + static_assert(std::is_trivially_destructible_v<CONDITION_VARIABLE>, "The `CONDITION_VARIABLE` type must be trivially destructible"); };
diff --git a/absl/synchronization/mutex_test.cc b/absl/synchronization/mutex_test.cc index 7b13eec..5663cf6 100644 --- a/absl/synchronization/mutex_test.cc +++ b/absl/synchronization/mutex_test.cc
@@ -925,11 +925,11 @@ EXPECT_FALSE(absl::Condition(TemplateEquals43, &const_x).Eval()); // Parameter non-const, argument const is not well-formed. - EXPECT_FALSE((std::is_constructible<absl::Condition, decltype(Equals42), - decltype(&const_x)>::value)); + EXPECT_FALSE((std::is_constructible_v<absl::Condition, decltype(Equals42), + decltype(&const_x)>)); // Validate use of is_constructible by contrasting to a well-formed case. - EXPECT_TRUE((std::is_constructible<absl::Condition, decltype(ConstEquals42), - decltype(&const_x)>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::Condition, decltype(ConstEquals42), + decltype(&const_x)>)); } // Example base and derived class for use in predicates and test below. Not a @@ -973,15 +973,15 @@ // Parameter derived, argument base is not well-formed. bool (*derived_pred)(const Derived *) = [](const Derived *) { return true; }; - EXPECT_FALSE((std::is_constructible<absl::Condition, decltype(derived_pred), - Base *>::value)); - EXPECT_FALSE((std::is_constructible<absl::Condition, decltype(derived_pred), - const Base *>::value)); + EXPECT_FALSE(( + std::is_constructible_v<absl::Condition, decltype(derived_pred), Base*>)); + EXPECT_FALSE((std::is_constructible_v<absl::Condition, decltype(derived_pred), + const Base*>)); // Validate use of is_constructible by contrasting to well-formed cases. - EXPECT_TRUE((std::is_constructible<absl::Condition, decltype(derived_pred), - Derived *>::value)); - EXPECT_TRUE((std::is_constructible<absl::Condition, decltype(derived_pred), - const Derived *>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::Condition, decltype(derived_pred), + Derived*>)); + EXPECT_TRUE((std::is_constructible_v<absl::Condition, decltype(derived_pred), + const Derived*>)); } struct Constable {
diff --git a/absl/time/civil_time_test.cc b/absl/time/civil_time_test.cc index a0cb29c..59c04d3 100644 --- a/absl/time/civil_time_test.cc +++ b/absl/time/civil_time_test.cc
@@ -217,32 +217,25 @@ EXPECT_EQ(month, year); // Ensures unsafe conversions are not allowed. - EXPECT_FALSE( - (std::is_convertible<absl::CivilSecond, absl::CivilMinute>::value)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilSecond, absl::CivilHour>::value)); - EXPECT_FALSE((std::is_convertible<absl::CivilSecond, absl::CivilDay>::value)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilSecond, absl::CivilMonth>::value)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilSecond, absl::CivilYear>::value)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilSecond, absl::CivilMinute>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilSecond, absl::CivilHour>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilSecond, absl::CivilDay>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilSecond, absl::CivilMonth>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilSecond, absl::CivilYear>)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilMinute, absl::CivilHour>::value)); - EXPECT_FALSE((std::is_convertible<absl::CivilMinute, absl::CivilDay>::value)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilMinute, absl::CivilMonth>::value)); - EXPECT_FALSE( - (std::is_convertible<absl::CivilMinute, absl::CivilYear>::value)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilMinute, absl::CivilHour>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilMinute, absl::CivilDay>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilMinute, absl::CivilMonth>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilMinute, absl::CivilYear>)); - EXPECT_FALSE((std::is_convertible<absl::CivilHour, absl::CivilDay>::value)); - EXPECT_FALSE((std::is_convertible<absl::CivilHour, absl::CivilMonth>::value)); - EXPECT_FALSE((std::is_convertible<absl::CivilHour, absl::CivilYear>::value)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilHour, absl::CivilDay>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilHour, absl::CivilMonth>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilHour, absl::CivilYear>)); - EXPECT_FALSE((std::is_convertible<absl::CivilDay, absl::CivilMonth>::value)); - EXPECT_FALSE((std::is_convertible<absl::CivilDay, absl::CivilYear>::value)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilDay, absl::CivilMonth>)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilDay, absl::CivilYear>)); - EXPECT_FALSE((std::is_convertible<absl::CivilMonth, absl::CivilYear>::value)); + EXPECT_FALSE((std::is_convertible_v<absl::CivilMonth, absl::CivilYear>)); } TEST(CivilTime, ExplicitCrossAlignment) {
diff --git a/absl/time/duration_test.cc b/absl/time/duration_test.cc index dc14665..f56df40 100644 --- a/absl/time/duration_test.cc +++ b/absl/time/duration_test.cc
@@ -74,7 +74,7 @@ } TEST(Duration, ConstExpr) { - static_assert(std::is_trivially_destructible<absl::Duration>::value, + static_assert(std::is_trivially_destructible_v<absl::Duration>, "Duration is documented as being trivially destructible"); constexpr absl::Duration d0 = absl::ZeroDuration(); static_assert(d0 == absl::ZeroDuration(), "ZeroDuration()");
diff --git a/absl/time/format.cc b/absl/time/format.cc index bd06f8f..aa2ae2c 100644 --- a/absl/time/format.cc +++ b/absl/time/format.cc
@@ -18,6 +18,7 @@ #include <cstdint> #include <utility> +#include "absl/strings/ascii.h" #include "absl/strings/match.h" #include "absl/strings/string_view.h" #include "absl/time/internal/cctz/include/cctz/time_zone.h" @@ -36,8 +37,8 @@ namespace { -const char kInfiniteFutureStr[] = "infinite-future"; -const char kInfinitePastStr[] = "infinite-past"; +constexpr absl::string_view kInfiniteFutureStr = "infinite-future"; +constexpr absl::string_view kInfinitePastStr = "infinite-past"; struct cctz_parts { cctz::time_point<cctz::seconds> sec; @@ -99,30 +100,19 @@ // the fields with respect to the given TimeZone. bool ParseTime(absl::string_view format, absl::string_view input, absl::TimeZone tz, absl::Time* time, std::string* err) { - auto strip_leading_space = [](absl::string_view* sv) { - while (!sv->empty()) { - if (!std::isspace(sv->front())) return; - sv->remove_prefix(1); - } - }; - - // Portable toolchains means we don't get nice constexpr here. - struct Literal { - const char* name; - size_t size; + static constexpr struct Literal { + absl::string_view name; absl::Time value; + } kLiterals[] = { + {kInfiniteFutureStr, InfiniteFuture()}, + {kInfinitePastStr, InfinitePast()}, }; - static Literal literals[] = { - {kInfiniteFutureStr, strlen(kInfiniteFutureStr), InfiniteFuture()}, - {kInfinitePastStr, strlen(kInfinitePastStr), InfinitePast()}, - }; - strip_leading_space(&input); - for (const auto& lit : literals) { - if (absl::StartsWith(input, absl::string_view(lit.name, lit.size))) { - absl::string_view tail = input; - tail.remove_prefix(lit.size); - strip_leading_space(&tail); - if (tail.empty()) { + input = StripLeadingAsciiWhitespace(input); + for (const auto& lit : kLiterals) { + if (absl::StartsWith(input, lit.name)) { + absl::string_view tail = input.substr(lit.name.size()); + // The trailing portion must be empty or whitespace. + if (StripLeadingAsciiWhitespace(tail).empty()) { *time = lit.value; return true; } @@ -150,13 +140,6 @@ std::string AbslUnparseFlag(absl::Time t) { return absl::FormatTime(RFC3339_full, t, absl::UTCTimeZone()); } -bool ParseFlag(const std::string& text, absl::Time* t, std::string* error) { - return absl::ParseTime(RFC3339_full, text, absl::UTCTimeZone(), t, error); -} - -std::string UnparseFlag(absl::Time t) { - return absl::FormatTime(RFC3339_full, t, absl::UTCTimeZone()); -} ABSL_NAMESPACE_END } // namespace absl
diff --git a/absl/time/format_test.cc b/absl/time/format_test.cc index 0e145a8..38c0e3d 100644 --- a/absl/time/format_test.cc +++ b/absl/time/format_test.cc
@@ -250,6 +250,13 @@ EXPECT_FALSE( absl::ParseTime("%Y", std::string("2026\0payload", 12), &t, &err)); EXPECT_THAT(err, HasSubstr("Illegal trailing data")); + + // High-bit character test for sign-extension bugs. + for (int i = 128; i < 256; ++i) { + char c = static_cast<char>(i); + std::string input = std::string(1, c) + "2015-01-02"; + EXPECT_FALSE(absl::ParseTime("%Y-%m-%d", input, &t, &err)); + } } TEST(ParseTime, ExtendedSeconds) {
diff --git a/absl/time/time.h b/absl/time/time.h index 8e8df2e..fc1456b 100644 --- a/absl/time/time.h +++ b/absl/time/time.h
@@ -134,11 +134,10 @@ ABSL_ATTRIBUTE_CONST_FUNCTION constexpr Duration FromInt64(int64_t v, std::ratio<3600>); template <typename T> -using EnableIfIntegral = typename std::enable_if< - std::is_integral<T>::value || std::is_enum<T>::value, int>::type; +using EnableIfIntegral = + std::enable_if_t<std::is_integral_v<T> || std::is_enum_v<T>, int>; template <typename T> -using EnableIfFloat = - typename std::enable_if<std::is_floating_point<T>::value, int>::type; +using EnableIfFloat = std::enable_if_t<std::is_floating_point_v<T>, int>; } // namespace time_internal // Duration @@ -1065,11 +1064,6 @@ // the format specified by `absl::ParseTime()`. std::string AbslUnparseFlag(Time t); -ABSL_DEPRECATED("Use AbslParseFlag() instead.") -bool ParseFlag(const std::string& text, Time* t, std::string* error); -ABSL_DEPRECATED("Use AbslUnparseFlag() instead.") -std::string UnparseFlag(Time t); - // TimeZone // // The `absl::TimeZone` is an opaque, small, value-type class representing a
diff --git a/absl/time/time_test.cc b/absl/time/time_test.cc index 6714a27..35b1f0e 100644 --- a/absl/time/time_test.cc +++ b/absl/time/time_test.cc
@@ -92,7 +92,7 @@ } TEST(Time, ConstExpr) { - static_assert(std::is_trivially_destructible<absl::Time>::value, + static_assert(std::is_trivially_destructible_v<absl::Time>, "Time is documented as being trivially destructible"); constexpr absl::Time t0 = absl::UnixEpoch(); static_assert(t0 == absl::UnixEpoch(), "UnixEpoch");
diff --git a/absl/types/BUILD.bazel b/absl/types/BUILD.bazel index ff76679..2670c0c 100644 --- a/absl/types/BUILD.bazel +++ b/absl/types/BUILD.bazel
@@ -47,11 +47,6 @@ ) cc_library( - name = "bad_any_cast", - deprecation = "bad_any_cast dependency is empty can be removed", -) - -cc_library( name = "source_location", srcs = ["source_location.cc"], hdrs = ["source_location.h"], @@ -193,11 +188,6 @@ ) cc_library( - name = "bad_optional_access", - deprecation = "bad_optional_access dependency is empty can be removed", -) - -cc_library( name = "variant", hdrs = ["variant.h"], copts = ABSL_DEFAULT_COPTS, @@ -209,11 +199,6 @@ ], ) -cc_library( - name = "bad_variant_access", - deprecation = "bad_variant_access dependency is empty can be removed", -) - cc_test( name = "variant_test", size = "small",
diff --git a/absl/types/any_span.h b/absl/types/any_span.h index d20f7bf..bca47bc 100644 --- a/absl/types/any_span.h +++ b/absl/types/any_span.h
@@ -288,8 +288,8 @@ class Range { public: static_assert( - std::is_same<typename std::iterator_traits<Iter>::iterator_category, - std::random_access_iterator_tag>::value, + std::is_same_v<typename std::iterator_traits<Iter>::iterator_category, + std::random_access_iterator_tag>, "Iter must be a random access iterator."); Range(Iter begin, Iter end) { @@ -339,10 +339,10 @@ class IteratorBase; template <typename U> - using EnableIfMutable = std::enable_if_t<!std::is_const<T>::value, U>; + using EnableIfMutable = std::enable_if_t<!std::is_const_v<T>, U>; template <typename U> - using EnableIfConst = std::enable_if_t<std::is_const<T>::value, U>; + using EnableIfConst = std::enable_if_t<std::is_const_v<T>, U>; static std::true_type CreatesATemporaryImpl(std::decay_t<T>&&); static std::false_type CreatesATemporaryImpl(const T&); @@ -373,8 +373,8 @@ template <typename Element> using EnableIfDifferentElementType = - std::enable_if_t<!std::is_same<T, Element>::value && - !std::is_same<T, const Element>::value>; + std::enable_if_t<!std::is_same_v<T, Element> && + !std::is_same_v<T, const Element>>; template <typename Transform> using EnableIfTransformIsByCopy = @@ -385,7 +385,7 @@ public: using element_type = T; - using value_type = typename std::remove_const<T>::type; + using value_type = std::remove_const_t<T>; using size_type = std::size_t; using difference_type = std::ptrdiff_t; using absl_internal_is_view = std::true_type; @@ -393,10 +393,10 @@ static const size_type npos = static_cast<size_type>(-1); // NOLINT using reference = T&; - using const_reference = typename std::add_const<T>::type&; + using const_reference = std::add_const_t<T>&; using pointer = T*; - using const_pointer = typename std::add_const<T>::type*; + using const_pointer = std::add_const_t<T>*; // Note that iterator will be const if T is const. class iterator; @@ -660,7 +660,7 @@ // TODO(b/179783710): add ABSL_ATTRIBUTE_LIFETIME_BOUND. template <typename LazyT = T, typename = EnableIfConst<LazyT>> constexpr AnySpan( // NOLINT(google-explicit-constructor) - const AnySpan<typename std::remove_const<T>::type>& other) + const AnySpan<std::remove_const_t<T>>& other) : getter_(other.getter_), size_(other.size()) {} // Creates a span that wraps around another span of different type. @@ -915,7 +915,7 @@ public: using iterator_category = std::random_access_iterator_tag; - using value_type = typename std::remove_const<Value>::type; + using value_type = std::remove_const_t<Value>; using difference_type = std::ptrdiff_t; using reference = Value&; using pointer = Value*; @@ -1035,9 +1035,9 @@ // but also provides conversion from MutableIterator. template <typename T> class AnySpan<T>::const_iterator - : public IteratorBase<const_iterator, typename std::add_const<T>::type> { + : public IteratorBase<const_iterator, std::add_const_t<T>> { private: - using Base = IteratorBase<const_iterator, typename std::add_const<T>::type>; + using Base = IteratorBase<const_iterator, std::add_const_t<T>>; public: using typename Base::difference_type;
diff --git a/absl/types/any_span_benchmark.cc b/absl/types/any_span_benchmark.cc index 24e9644..a2c4836 100644 --- a/absl/types/any_span_benchmark.cc +++ b/absl/types/any_span_benchmark.cc
@@ -107,7 +107,7 @@ // dereferences it. template <typename Container> void BM_Sequential_DerefSpan(benchmark::State& state) { - using T = typename std::remove_pointer<typename Container::value_type>::type; + using T = std::remove_pointer_t<typename Container::value_type>; auto values = MakeContainer<std::vector<T>>(); const auto container = MakePointerContainer<Container>(&values); absl::Span<T* const> array_span(container); @@ -137,7 +137,7 @@ // Same as BM_Sequential_AnySpan, but dereferences the elements. template <typename Container> void BM_Sequential_AnySpanDeref(benchmark::State& state) { - using T = typename std::remove_pointer<typename Container::value_type>::type; + using T = std::remove_pointer_t<typename Container::value_type>; auto values = MakeContainer<std::vector<T>>(); auto container = MakePointerContainer<Container>(&values); AnySpan<T> span(container, any_span_transform::Deref()); @@ -207,7 +207,7 @@ // Same as BM_Random_AnySpan, but dereferences elements. template <typename Container> void BM_Random_AnySpanDeref(benchmark::State& state) { - using T = typename std::remove_pointer<typename Container::value_type>::type; + using T = std::remove_pointer_t<typename Container::value_type>; auto values = MakeContainer<std::vector<T>>(); auto container = MakePointerContainer<Container>(&values); AnySpan<T> span(container, any_span_transform::Deref());
diff --git a/absl/types/any_span_test.cc b/absl/types/any_span_test.cc index 8ff1fdd..e5960c6 100644 --- a/absl/types/any_span_test.cc +++ b/absl/types/any_span_test.cc
@@ -84,8 +84,7 @@ // Const T if this test instantiation is supposed to cover const AnySpans. // T if this test instantiation is supposed to cover mutable AnySpans. template <typename T> - using MaybeConst = - typename std::conditional<IsConstTest::value, const T, T>::type; + using MaybeConst = std::conditional_t<IsConstTest::value, const T, T>; // Initalizes a AnySpan around the given container and tests for // equality in a variety of ways. @@ -498,9 +497,8 @@ // For const span tests, we need a pointer to constant member function. We // choose the correct type of member function here. - using MemFunPtr = - typename std::conditional<TestFixture::IsConstTest::value, - T& (S::*)() const, T& (S::*)()>::type; + using MemFunPtr = std::conditional_t<TestFixture::IsConstTest::value, + T& (S::*)() const, T& (S::*)()>; std::vector<S> v = {{"1", "2"}, {"3", "4"}}; S a[] = {{"1", "2"}, {"3", "4"}}; @@ -779,9 +777,9 @@ using T = typename TestFixture::template MaybeConst<std::string>; // Note: we could use is_trivially_copyable, but it is not implemented in // Crosstool v18 which is the current version at the time of writing. - EXPECT_TRUE(std::is_trivially_copy_constructible<AnySpan<T>>::value); - EXPECT_TRUE(std::is_trivially_copy_assignable<AnySpan<T>>::value); - EXPECT_TRUE(std::is_trivially_destructible<AnySpan<T>>::value); + EXPECT_TRUE(std::is_trivially_copy_constructible_v<AnySpan<T>>); + EXPECT_TRUE(std::is_trivially_copy_assignable_v<AnySpan<T>>); + EXPECT_TRUE(std::is_trivially_destructible_v<AnySpan<T>>); } TYPED_TEST(AnySpanTest, IsConstructible) { @@ -790,16 +788,16 @@ using VectorT = typename TestFixture::template MaybeConst<std::vector<std::string>>; using VectorU = typename TestFixture::template MaybeConst<std::vector<int>>; - EXPECT_FALSE((std::is_constructible<AnySpan<T>, T>::value)); - EXPECT_FALSE((std::is_constructible<AnySpan<T>, T*>::value)); - EXPECT_FALSE((std::is_constructible<AnySpan<T>, U>::value)); - EXPECT_FALSE((std::is_constructible<AnySpan<T>, U(&)[5]>::value)); - EXPECT_FALSE((std::is_constructible<AnySpan<T>, U*, std::size_t>::value)); - EXPECT_FALSE((std::is_constructible<AnySpan<T>, VectorU&>::value)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, T>)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, T*>)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, U>)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, U(&)[5]>)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, U*, std::size_t>)); + EXPECT_FALSE((std::is_constructible_v<AnySpan<T>, VectorU&>)); - EXPECT_TRUE((std::is_constructible<AnySpan<T>, VectorT&>::value)); - EXPECT_TRUE((std::is_constructible<AnySpan<T>, T(&)[5]>::value)); - EXPECT_TRUE((std::is_constructible<AnySpan<T>, T*, std::size_t>::value)); + EXPECT_TRUE((std::is_constructible_v<AnySpan<T>, VectorT&>)); + EXPECT_TRUE((std::is_constructible_v<AnySpan<T>, T(&)[5]>)); + EXPECT_TRUE((std::is_constructible_v<AnySpan<T>, T*, std::size_t>)); } //
diff --git a/absl/types/compare.h b/absl/types/compare.h index abc8616..be59d92 100644 --- a/absl/types/compare.h +++ b/absl/types/compare.h
@@ -91,10 +91,9 @@ // has type `int`. Literal `0` arguments will be implicitly converted to // `std::nullptr_t` and accepted by the above constructor, while other `int` // arguments will fail to be converted and cause compilation failure. - template <typename T, typename = typename std::enable_if< - std::is_same<T, std::nullptr_t>::value || - (std::is_integral<T>::value && - !std::is_same<T, int>::value)>::type> + template <typename T, typename = std::enable_if_t< + std::is_same_v<T, std::nullptr_t> || + (std::is_integral_v<T> && !std::is_same_v<T, int>)>> OnlyLiteralZero(T) { // NOLINT static_assert(sizeof(T) < 0, "Only literal `0` is allowed."); } @@ -449,7 +448,7 @@ // or three-way comparator. // SFINAE prevents implicit conversions to bool (such as from int). template <typename BoolT, - std::enable_if_t<std::is_same<bool, BoolT>::value, int> = 0> + std::enable_if_t<std::is_same_v<bool, BoolT>, int> = 0> constexpr bool compare_result_as_less_than(const BoolT r) { return r; } @@ -466,8 +465,7 @@ // Helper functions to do a three-way comparison of two keys given a boolean or // three-way comparator. // SFINAE prevents implicit conversions to int (such as from bool). -template <typename Int, - std::enable_if_t<std::is_same<int, Int>::value, int> = 0> +template <typename Int, std::enable_if_t<std::is_same_v<int, Int>, int> = 0> constexpr absl::weak_ordering compare_result_as_ordering(const Int c) { return c < 0 ? absl::weak_ordering::less : c == 0 ? absl::weak_ordering::equivalent @@ -478,20 +476,20 @@ return c; } -template <typename Compare, typename K, typename LK, - std::enable_if_t< - !std::is_same< - bool, absl::result_of_t<Compare(const K&, const LK&)>>::value, - int> = 0> +template < + typename Compare, typename K, typename LK, + std::enable_if_t< + !std::is_same_v<bool, absl::result_of_t<Compare(const K&, const LK&)>>, + int> = 0> constexpr absl::weak_ordering do_three_way_comparison(const Compare& compare, const K& x, const LK& y) { return compare_result_as_ordering(compare(x, y)); } -template <typename Compare, typename K, typename LK, - std::enable_if_t< - std::is_same< - bool, absl::result_of_t<Compare(const K&, const LK&)>>::value, - int> = 0> +template < + typename Compare, typename K, typename LK, + std::enable_if_t< + std::is_same_v<bool, absl::result_of_t<Compare(const K&, const LK&)>>, + int> = 0> constexpr absl::weak_ordering do_three_way_comparison(const Compare& compare, const K& x, const LK& y) { return compare(x, y) ? absl::weak_ordering::less
diff --git a/absl/types/internal/any_span.h b/absl/types/internal/any_span.h index 47cb86b..cd0e4c4 100644 --- a/absl/types/internal/any_span.h +++ b/absl/types/internal/any_span.h
@@ -239,13 +239,13 @@ // Element type of container based on operator[]. template <class Container> -using ElementType = typename std::remove_reference< - decltype(std::declval<Container&>()[0])>::type; +using ElementType = + std::remove_reference_t<decltype(std::declval<Container&>()[0])>; // Element type of container when elements are dereferenced. template <class Container> -using DerefElementType = typename std::remove_reference< - decltype(*std::declval<ElementType<Container>>())>::type; +using DerefElementType = + std::remove_reference_t<decltype(*std::declval<ElementType<Container>>())>; // DataIsValid is true_type if Container has a data() member that returns a // pointer to the type returned by operator[], false_type if there is no data() @@ -260,8 +260,8 @@ Getter() {} // Handle mutable -> const conversion. - template <typename LazyT = T, typename = typename std::enable_if< - std::is_const<LazyT>::value>::type> + template <typename LazyT = T, + typename = std::enable_if_t<std::is_const_v<LazyT>>> explicit Getter(const Getter<std::remove_const_t<T>>& other) { using MutableT = std::remove_const_t<T>; if (other.fun == &ArrayTag<MutableT>) { @@ -450,7 +450,7 @@ Getter<T> MakeContainerGetter( Container& container, // NOLINT(runtime/references) const Transform& transform) { - static_assert(std::is_reference<decltype(container[0])>::value, + static_assert(std::is_reference_v<decltype(container[0])>, "AnySpan only works with containers that return a reference " "(no vector<bool>, or containers that return by value)."); return MakeContainerGetterImpl<T>(DataIsValid<Container>(), container, @@ -466,7 +466,7 @@ template <typename T> bool EqualImpl(AnySpan<T> a, AnySpan<T> b) { - static_assert(std::is_const<T>::value, ""); + static_assert(std::is_const_v<T>, ""); return std::equal(a.begin(), a.end(), b.begin(), b.end()); }
diff --git a/absl/types/internal/span.h b/absl/types/internal/span.h index 208216c..148c957 100644 --- a/absl/types/internal/span.h +++ b/absl/types/internal/span.h
@@ -82,26 +82,24 @@ using ElementT = typename ElementType<C>::type; template <typename T> -using EnableIfMutable = - typename std::enable_if<!std::is_const<T>::value, int>::type; +using EnableIfMutable = std::enable_if_t<!std::is_const_v<T>, int>; template <template <typename> class SpanT, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool EqualImpl(SpanT<T> a, SpanT<T> b) { - static_assert(std::is_const<T>::value, ""); +constexpr bool EqualImpl(SpanT<T> a, SpanT<T> b) { + static_assert(std::is_const_v<T>, ""); return std::equal(a.begin(), a.end(), b.begin(), b.end()); } template <template <typename> class SpanT, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool LessThanImpl(SpanT<T> a, SpanT<T> b) { +constexpr bool LessThanImpl(SpanT<T> a, SpanT<T> b) { // We can't use value_type since that is remove_cv_t<T>, so we go the long way // around. - static_assert(std::is_const<T>::value, ""); + static_assert(std::is_const_v<T>, ""); return std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end()); } template <typename From, typename To> -using EnableIfConvertibleTo = - typename std::enable_if<std::is_convertible<From, To>::value>::type; +using EnableIfConvertibleTo = std::enable_if_t<std::is_convertible_v<From, To>>; // IsView is true for types where the return type of .data() is the same for // mutable and const instances. This isn't foolproof, but it's only used to @@ -122,7 +120,7 @@ using MutData = decltype(span_internal::GetData(std::declval<Container&>())); public: - static constexpr bool value = std::is_same<ConstData, MutData>::value; + static constexpr bool value = std::is_same_v<ConstData, MutData>; }; // These enablers result in 'int' so they can be used as typenames or defaults
diff --git a/absl/types/span.h b/absl/types/span.h index 2327962..3b291a9 100644 --- a/absl/types/span.h +++ b/absl/types/span.h
@@ -195,13 +195,11 @@ // Used to SFINAE-enable a function when the slice elements are const. template <typename U> - using EnableIfValueIsConst = - typename std::enable_if<std::is_const<T>::value, U>::type; + using EnableIfValueIsConst = std::enable_if_t<std::is_const_v<T>, U>; // Used to SFINAE-enable a function when the slice elements are mutable. template <typename U> - using EnableIfValueIsMutable = - typename std::enable_if<!std::is_const<T>::value, U>::type; + using EnableIfValueIsMutable = std::enable_if_t<!std::is_const_v<T>, U>; public: using element_type = T; @@ -531,165 +529,157 @@ // operator== template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator==(Span<T> a, Span<T> b) { +constexpr bool operator==(Span<T> a, Span<T> b) { return span_internal::EqualImpl<Span, const T>(a, b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator==(Span<const T> a, - Span<T> b) { +constexpr bool operator==(Span<const T> a, Span<T> b) { return span_internal::EqualImpl<Span, const T>(a, b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator==(Span<T> a, - Span<const T> b) { +constexpr bool operator==(Span<T> a, Span<const T> b) { return span_internal::EqualImpl<Span, const T>(a, b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator==(const U& a, Span<T> b) { +constexpr bool operator==(const U& a, Span<T> b) { return span_internal::EqualImpl<Span, const T>(a, b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator==(Span<T> a, const U& b) { +constexpr bool operator==(Span<T> a, const U& b) { return span_internal::EqualImpl<Span, const T>(a, b); } // operator!= template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator!=(Span<T> a, Span<T> b) { +constexpr bool operator!=(Span<T> a, Span<T> b) { return !(a == b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator!=(Span<const T> a, - Span<T> b) { +constexpr bool operator!=(Span<const T> a, Span<T> b) { return !(a == b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator!=(Span<T> a, - Span<const T> b) { +constexpr bool operator!=(Span<T> a, Span<const T> b) { return !(a == b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator!=(const U& a, Span<T> b) { +constexpr bool operator!=(const U& a, Span<T> b) { return !(a == b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator!=(Span<T> a, const U& b) { +constexpr bool operator!=(Span<T> a, const U& b) { return !(a == b); } // operator< template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<(Span<T> a, Span<T> b) { +constexpr bool operator<(Span<T> a, Span<T> b) { return span_internal::LessThanImpl<Span, const T>(a, b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<(Span<const T> a, Span<T> b) { +constexpr bool operator<(Span<const T> a, Span<T> b) { return span_internal::LessThanImpl<Span, const T>(a, b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<(Span<T> a, Span<const T> b) { +constexpr bool operator<(Span<T> a, Span<const T> b) { return span_internal::LessThanImpl<Span, const T>(a, b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<(const U& a, Span<T> b) { +constexpr bool operator<(const U& a, Span<T> b) { return span_internal::LessThanImpl<Span, const T>(a, b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<(Span<T> a, const U& b) { +constexpr bool operator<(Span<T> a, const U& b) { return span_internal::LessThanImpl<Span, const T>(a, b); } // operator> template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>(Span<T> a, Span<T> b) { +constexpr bool operator>(Span<T> a, Span<T> b) { return b < a; } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>(Span<const T> a, Span<T> b) { +constexpr bool operator>(Span<const T> a, Span<T> b) { return b < a; } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>(Span<T> a, Span<const T> b) { +constexpr bool operator>(Span<T> a, Span<const T> b) { return b < a; } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>(const U& a, Span<T> b) { +constexpr bool operator>(const U& a, Span<T> b) { return b < a; } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>(Span<T> a, const U& b) { +constexpr bool operator>(Span<T> a, const U& b) { return b < a; } // operator<= template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<=(Span<T> a, Span<T> b) { +constexpr bool operator<=(Span<T> a, Span<T> b) { return !(b < a); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<=(Span<const T> a, - Span<T> b) { +constexpr bool operator<=(Span<const T> a, Span<T> b) { return !(b < a); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<=(Span<T> a, - Span<const T> b) { +constexpr bool operator<=(Span<T> a, Span<const T> b) { return !(b < a); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<=(const U& a, Span<T> b) { +constexpr bool operator<=(const U& a, Span<T> b) { return !(b < a); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator<=(Span<T> a, const U& b) { +constexpr bool operator<=(Span<T> a, const U& b) { return !(b < a); } // operator>= template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>=(Span<T> a, Span<T> b) { +constexpr bool operator>=(Span<T> a, Span<T> b) { return !(a < b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>=(Span<const T> a, - Span<T> b) { +constexpr bool operator>=(Span<const T> a, Span<T> b) { return !(a < b); } template <typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>=(Span<T> a, - Span<const T> b) { +constexpr bool operator>=(Span<T> a, Span<const T> b) { return !(a < b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>=(const U& a, Span<T> b) { +constexpr bool operator>=(const U& a, Span<T> b) { return !(a < b); } template < typename T, typename U, typename = span_internal::EnableIfConvertibleTo<U, absl::Span<const T>>> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 bool operator>=(Span<T> a, const U& b) { +constexpr bool operator>=(Span<T> a, const U& b) { return !(a < b); }
diff --git a/absl/types/span_test.cc b/absl/types/span_test.cc index 21b49ed..5a8b82e 100644 --- a/absl/types/span_test.cc +++ b/absl/types/span_test.cc
@@ -94,13 +94,11 @@ absl::Span<int> s(a); EXPECT_THAT(s, SpanIs(a, 3)); - EXPECT_TRUE((std::is_constructible<absl::Span<const int>, int[3]>::value)); - EXPECT_TRUE( - (std::is_constructible<absl::Span<const int>, const int[3]>::value)); - EXPECT_FALSE((std::is_constructible<absl::Span<int>, const int[3]>::value)); - EXPECT_TRUE((std::is_convertible<int[3], absl::Span<const int>>::value)); - EXPECT_TRUE( - (std::is_convertible<const int[3], absl::Span<const int>>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<const int>, int[3]>)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<const int>, const int[3]>)); + EXPECT_FALSE((std::is_constructible_v<absl::Span<int>, const int[3]>)); + EXPECT_TRUE((std::is_convertible_v<int[3], absl::Span<const int>>)); + EXPECT_TRUE((std::is_convertible_v<const int[3], absl::Span<const int>>)); } template <typename T> @@ -125,9 +123,8 @@ EXPECT_THAT(const_from_span, SpanIs(s_filled)); EXPECT_TRUE( - (std::is_convertible<std::vector<int>&, absl::Span<const int>>::value)); - EXPECT_TRUE( - (std::is_convertible<absl::Span<int>&, absl::Span<const int>>::value)); + (std::is_convertible_v<std::vector<int>&, absl::Span<const int>>)); + EXPECT_TRUE((std::is_convertible_v<absl::Span<int>&, absl::Span<const int>>)); TakesGenericSpan(absl::Span<int>(filled)); } @@ -159,22 +156,20 @@ absl::Span<const char> s_const_abc = abc; EXPECT_THAT(s_const_abc, SpanIs(abc)); - EXPECT_FALSE((std::is_constructible<absl::Span<int>, std::string>::value)); - EXPECT_FALSE( - (std::is_constructible<absl::Span<const int>, std::string>::value)); - EXPECT_TRUE( - (std::is_convertible<std::string, absl::Span<const char>>::value)); + EXPECT_FALSE((std::is_constructible_v<absl::Span<int>, std::string>)); + EXPECT_FALSE((std::is_constructible_v<absl::Span<const int>, std::string>)); + EXPECT_TRUE((std::is_convertible_v<std::string, absl::Span<const char>>)); } TEST(IntSpan, FromConstPointer) { - EXPECT_TRUE((std::is_constructible<absl::Span<const int* const>, - std::vector<int*>>::value)); - EXPECT_TRUE((std::is_constructible<absl::Span<const int* const>, - std::vector<const int*>>::value)); - EXPECT_FALSE(( - std::is_constructible<absl::Span<const int*>, std::vector<int*>>::value)); - EXPECT_FALSE(( - std::is_constructible<absl::Span<int*>, std::vector<const int*>>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<const int* const>, + std::vector<int*>>)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<const int* const>, + std::vector<const int*>>)); + EXPECT_FALSE( + (std::is_constructible_v<absl::Span<const int*>, std::vector<int*>>)); + EXPECT_FALSE( + (std::is_constructible_v<absl::Span<int*>, std::vector<const int*>>)); } struct TypeWithMisleadingData { @@ -191,9 +186,9 @@ TEST(IntSpan, EvilTypes) { EXPECT_FALSE( - (std::is_constructible<absl::Span<int>, TypeWithMisleadingData&>::value)); + (std::is_constructible_v<absl::Span<int>, TypeWithMisleadingData&>)); EXPECT_FALSE( - (std::is_constructible<absl::Span<int>, TypeWithMisleadingSize&>::value)); + (std::is_constructible_v<absl::Span<int>, TypeWithMisleadingSize&>)); } struct Base { @@ -204,10 +199,10 @@ struct Derived : Base {}; TEST(IntSpan, SpanOfDerived) { - EXPECT_TRUE((std::is_constructible<absl::Span<int>, Base&>::value)); - EXPECT_TRUE((std::is_constructible<absl::Span<int>, Derived&>::value)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<int>, Base&>)); + EXPECT_TRUE((std::is_constructible_v<absl::Span<int>, Derived&>)); EXPECT_FALSE( - (std::is_constructible<absl::Span<Base>, std::vector<Derived>>::value)); + (std::is_constructible_v<absl::Span<Base>, std::vector<Derived>>)); } void TestInitializerList(absl::Span<const int> s, const std::vector<int>& v) { @@ -219,10 +214,10 @@ TestInitializerList({1}, {1}); TestInitializerList({1, 2, 3}, {1, 2, 3}); - EXPECT_FALSE((std::is_constructible<absl::Span<int>, - std::initializer_list<int>>::value)); - EXPECT_FALSE(( - std::is_convertible<absl::Span<int>, std::initializer_list<int>>::value)); + EXPECT_FALSE( + (std::is_constructible_v<absl::Span<int>, std::initializer_list<int>>)); + EXPECT_FALSE( + (std::is_convertible_v<absl::Span<int>, std::initializer_list<int>>)); } TEST(IntSpan, Data) { @@ -668,16 +663,15 @@ TEST(IntSpan, ExposesContainerTypesAndConsts) { absl::Span<int> slice; CheckType<absl::Span<int>::iterator>(slice.begin()); - EXPECT_TRUE((std::is_convertible<decltype(slice.begin()), - absl::Span<int>::const_iterator>::value)); + EXPECT_TRUE((std::is_convertible_v<decltype(slice.begin()), + absl::Span<int>::const_iterator>)); CheckType<absl::Span<int>::const_iterator>(slice.cbegin()); - EXPECT_TRUE((std::is_convertible<decltype(slice.end()), - absl::Span<int>::const_iterator>::value)); + EXPECT_TRUE((std::is_convertible_v<decltype(slice.end()), + absl::Span<int>::const_iterator>)); CheckType<absl::Span<int>::const_iterator>(slice.cend()); CheckType<absl::Span<int>::reverse_iterator>(slice.rend()); - EXPECT_TRUE( - (std::is_convertible<decltype(slice.rend()), - absl::Span<int>::const_reverse_iterator>::value)); + EXPECT_TRUE((std::is_convertible_v<decltype(slice.rend()), + absl::Span<int>::const_reverse_iterator>)); CheckType<absl::Span<int>::const_reverse_iterator>(slice.crend()); testing::StaticAssertTypeEq<int, absl::Span<int>::value_type>(); testing::StaticAssertTypeEq<int, absl::Span<const int>::value_type>();
diff --git a/absl/types/variant_test.cc b/absl/types/variant_test.cc index edf51e5..fafae89 100644 --- a/absl/types/variant_test.cc +++ b/absl/types/variant_test.cc
@@ -122,7 +122,7 @@ } TEST(VariantTest, TestRvalueConversionViaConvertVariantTo) { - variant<Convertible1, Convertible2> v( + std::variant<Convertible1, Convertible2> v( ConvertVariantTo<std::variant<Convertible1, Convertible2>>( (std::variant<Convertible2, Convertible1>(Convertible1())))); ASSERT_TRUE(std::holds_alternative<Convertible1>(v)); @@ -133,8 +133,8 @@ } TEST(VariantTest, TestLvalueConversionViaConvertVariantTo) { - variant<Convertible2, Convertible1> source((Convertible1())); - variant<Convertible1, Convertible2> v( + std::variant<Convertible2, Convertible1> source((Convertible1())); + std::variant<Convertible1, Convertible2> v( ConvertVariantTo<std::variant<Convertible1, Convertible2>>(source)); ASSERT_TRUE(std::holds_alternative<Convertible1>(v));
diff --git a/patches/0001-Undeprecate-deprecated.patch b/patches/0001-Undeprecate-deprecated.patch index 46f9367..6f960c5 100644 --- a/patches/0001-Undeprecate-deprecated.patch +++ b/patches/0001-Undeprecate-deprecated.patch
@@ -167,3 +167,17 @@ template <class It, class OutIt> [[deprecated("Use std::move instead.")]] +diff --git a/third_party/abseil-cpp/absl/meta/type_traits.h b/third_party/abseil-cpp/absl/meta/type_traits.h +index 60b40c3bd4f3f..9d582702ebd5f 100644 +--- a/third_party/abseil-cpp/absl/meta/type_traits.h ++++ b/third_party/abseil-cpp/absl/meta/type_traits.h +@@ -109,8 +109,7 @@ struct is_detected : is_detected_impl<void, Op, Args...>::type {}; + // appear duplicated (and thus invalid) to the compiler prior to substitution + // taking place. Whenever possible, use `std::void_t` instead. + template <typename... Ts> +-using void_t [[deprecated("Use std::void_t instead.")]] = +- typename type_traits_internal::VoidTImpl<Ts...>::type; ++using void_t = typename type_traits_internal::VoidTImpl<Ts...>::type; + + // Historical note: Abseil once provided implementations of these type traits + // for platforms that lacked full support. New code should prefer to use the
diff --git a/symbols_arm64_dbg.def b/symbols_arm64_dbg.def index 5fe2c19..cc567c0 100644 --- a/symbols_arm64_dbg.def +++ b/symbols_arm64_dbg.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHAEBV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@01@_K@Z ??$ConstructElements@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@01@_K@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QEAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_K$$QEAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z @@ -624,7 +626,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEANPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAEAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@AEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QEBA_NXZ @@ -746,10 +747,8 @@ ??$RoundUp@$03@crc_internal@absl@@YAPEBEPEBE@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPEBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1050,7 +1049,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPEAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1485,7 +1483,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@12@PEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@12@PEAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1493,9 +1490,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UUnrecognizedFlag@absl@@@12@PEAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PEAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PEBUPayload@status_internal@absl@@@__Cr@std@@YA_JPEBUPayload@status_internal@absl@@0@Z ??$distance@PEBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA_JPEBUTransition@cctz@time_internal@absl@@0@Z @@ -2047,6 +2041,7 @@ ??0Clock@absl@@QEAA@XZ ??0CommandLineFlag@absl@@QEAA@XZ ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@AEBV012@@Z ??0CommonFields@container_internal@absl@@QEAA@Usoo_tag_t@12@@Z ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z ??0Condition@absl@@QEAA@PEB_N@Z @@ -2095,6 +2090,8 @@ ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ ??0GroupAArch64Impl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z ??0GroupPortableImpl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QEAA@PEAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QEAA@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QEAA@PEBE@Z ??0HashtablezInfo@container_internal@absl@@QEAA@XZ ??0HashtablezInfoHandle@container_internal@absl@@QEAA@$$T@Z @@ -2148,7 +2145,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QEAA@_KVcrc32c_t@3@@Z ??0ProtoField@log_internal@absl@@QEAA@XZ ??0Randen@random_internal@absl@@QEAA@XZ - ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N@Z + ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N0@Z ??0ReaderMutexLock@absl@@QEAA@AEAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QEAA@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QEAA@XZ @@ -2800,7 +2797,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHAEBV23@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@QEBA?A?<auto>@@AEAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@0@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBV723@AEA_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEBQEAVCommandLineFlag@absl@@@?$vector@PEAVCommandLineFlag@absl@@V?$allocator@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@AEBQEAV45@@Z@QEBA?A?<auto>@@XZ @@ -3041,6 +3037,8 @@ ?AssertIsFull@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBEPEBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEBAXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -3145,7 +3143,7 @@ ?Contains@Cord@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YA_K_N0@Z + ?ControlOffset@container_internal@absl@@YA_K_N_K@Z ?ControlWord@base_internal@absl@@YAPEAU?$atomic@I@__Cr@std@@PEAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPEAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3192,6 +3190,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QEAAPEADXZ ?Data@CordRepFlat@cord_internal@absl@@QEBAPEBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z @@ -3211,7 +3210,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPEAV12@PEAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CA_KXZ ?DefaultIterControl@container_internal@absl@@YAPEAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@AEBA?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z @@ -3238,6 +3236,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PEAVSourceLocation@3@_K@Z + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -3517,7 +3518,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAVLogSink@3@XZ @@ -3534,8 +3535,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAEAVGrowthInfo@12@PEAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_KXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PEAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBAEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA_KXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -3616,6 +3620,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAEAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPEAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAEAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YA_K_K@Z ?GuaranteedEqual@Condition@absl@@SA_NPEBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAAEBCAEBC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAAEBDAEBD@Z @@ -3645,12 +3650,12 @@ ?HardeningAssert@base_internal@absl@@YAX_N@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QEBA_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_N_K@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QEBA_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3681,7 +3686,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QEAAPEAUCordRep@23@PEAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AEAAXH_K0@Z ?InitRep@StatusBuilder@absl@@CAPEAURep@12@AEBVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z @@ -3715,6 +3720,7 @@ ?IsAlreadyExists@absl@@YA_NAEBVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QEBA_NXZ ?IsCancelled@absl@@YA_NAEBVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_N_K@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QEBA_NXZ @@ -3751,6 +3757,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QEBA_NXZ ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QEBA_NAEBV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QEBA_NXZ ?IsSmallCapacity@container_internal@absl@@YA_N_K@Z @@ -3842,6 +3849,7 @@ ?MaskNonFull@GroupAArch64Impl@container_internal@absl@@QEBA@XZ ?Match@GroupAArch64Impl@container_internal@absl@@QEBA@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YA_KXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YA_KXZ @@ -3917,6 +3925,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QEBA_KXZ ?NumClonedBytes@container_internal@absl@@YA_KXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YA_K_K@Z ?NumGenerationBytes@container_internal@absl@@YA_KXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3928,11 +3937,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QEAAXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APEAXW4FlagOp@12@PEBXPEAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3948,7 +3956,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4026,6 +4033,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ @@ -4118,6 +4127,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AEAAXAEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PEAVLogSink@absl@@$0BA@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4292,7 +4302,7 @@ ?SubtractSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TagToAllocatedSize@cord_internal@absl@@YA_KE@Z @@ -4447,7 +4457,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPEAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QEAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPEAURefcountedRep@123@@Z @@ -5035,6 +5044,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QEBA_KXZ ?begin@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBAPEADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QEBA_KXZ ?btree@CordRep@cord_internal@absl@@QEAAPEAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QEBAPEBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QEBAPEAVCordRepBtree@23@XZ @@ -5108,7 +5118,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAXXZ ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ @@ -5181,7 +5190,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@23@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@23@_K@Z @@ -5238,15 +5246,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VSourceLocation@absl@@@23@PEAVSourceLocation@absl@@_K@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEAAXXZ ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5347,6 +5352,7 @@ ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@AEBAPEAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5421,6 +5427,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAAPEAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAAPEAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX_KPEAW4ctrl_t@23@11_N1@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5437,14 +5444,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAAAEAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEAAPEAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEBAPEBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QEAAAEAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QEBA_KXZ + ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEBA_NXZ ?has_infoz@CommonFields@container_internal@absl@@QEBA_NXZ @@ -5474,7 +5480,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QEBA_KXZ ?index@?$probe_seq@$07@container_internal@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QEBAPEAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QEBA_KXZ
diff --git a/symbols_arm64_dbg_cxx23.def b/symbols_arm64_dbg_cxx23.def index 9f85daa..1bc728b 100644 --- a/symbols_arm64_dbg_cxx23.def +++ b/symbols_arm64_dbg_cxx23.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHAEBV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@01@_K@Z ??$ConstructElements@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@01@_K@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QEAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_K$$QEAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z @@ -624,7 +626,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEANPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAEAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@AEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QEBA_NXZ @@ -746,10 +747,8 @@ ??$RoundUp@$03@crc_internal@absl@@YAPEBEPEBE@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPEBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1043,7 +1042,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPEAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1491,7 +1489,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@12@PEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@12@PEAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1499,9 +1496,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UUnrecognizedFlag@absl@@@12@PEAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PEAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PEBUPayload@status_internal@absl@@@__Cr@std@@YA_JPEBUPayload@status_internal@absl@@0@Z ??$distance@PEBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA_JPEBUTransition@cctz@time_internal@absl@@0@Z @@ -2060,6 +2054,7 @@ ??0Clock@absl@@QEAA@XZ ??0CommandLineFlag@absl@@QEAA@XZ ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@AEBV012@@Z ??0CommonFields@container_internal@absl@@QEAA@Usoo_tag_t@12@@Z ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z ??0Condition@absl@@QEAA@PEB_N@Z @@ -2108,6 +2103,8 @@ ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ ??0GroupAArch64Impl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z ??0GroupPortableImpl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QEAA@PEAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QEAA@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QEAA@PEBE@Z ??0HashtablezInfo@container_internal@absl@@QEAA@XZ ??0HashtablezInfoHandle@container_internal@absl@@QEAA@$$T@Z @@ -2161,7 +2158,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QEAA@_KVcrc32c_t@3@@Z ??0ProtoField@log_internal@absl@@QEAA@XZ ??0Randen@random_internal@absl@@QEAA@XZ - ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N@Z + ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N0@Z ??0ReaderMutexLock@absl@@QEAA@AEAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QEAA@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QEAA@XZ @@ -2813,7 +2810,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHAEBV23@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@QEBA?A?<auto>@@AEAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@0@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBV723@AEA_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEBQEAVCommandLineFlag@absl@@@?$vector@PEAVCommandLineFlag@absl@@V?$allocator@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@AEBQEAV45@@Z@QEBA?A?<auto>@@XZ @@ -3054,6 +3050,8 @@ ?AssertIsFull@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBEPEBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEBAXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -3158,7 +3156,7 @@ ?Contains@Cord@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YA_K_N0@Z + ?ControlOffset@container_internal@absl@@YA_K_N_K@Z ?ControlWord@base_internal@absl@@YAPEAU?$atomic@I@__Cr@std@@PEAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPEAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3205,6 +3203,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QEAAPEADXZ ?Data@CordRepFlat@cord_internal@absl@@QEBAPEBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z @@ -3224,7 +3223,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPEAV12@PEAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CA_KXZ ?DefaultIterControl@container_internal@absl@@YAPEAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@AEBA?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z @@ -3251,6 +3249,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PEAVSourceLocation@3@_K@Z + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -3530,7 +3531,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAVLogSink@3@XZ @@ -3547,8 +3548,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAEAVGrowthInfo@12@PEAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_KXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PEAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBAEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA_KXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -3629,6 +3633,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAEAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPEAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAEAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YA_K_K@Z ?GuaranteedEqual@Condition@absl@@SA_NPEBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAAEBCAEBC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAAEBDAEBD@Z @@ -3657,12 +3662,12 @@ ?HandleUsageFlags@flags_internal@absl@@YA?AW4HelpMode@12@AEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QEBA_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_N_K@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QEBA_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3693,7 +3698,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QEAAPEAUCordRep@23@PEAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AEAAXH_K0@Z ?InitRep@StatusBuilder@absl@@CAPEAURep@12@AEBVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z @@ -3727,6 +3732,7 @@ ?IsAlreadyExists@absl@@YA_NAEBVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QEBA_NXZ ?IsCancelled@absl@@YA_NAEBVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_N_K@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QEBA_NXZ @@ -3763,6 +3769,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QEBA_NXZ ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QEBA_NAEBV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QEBA_NXZ ?IsSmallCapacity@container_internal@absl@@YA_N_K@Z @@ -3854,6 +3861,7 @@ ?MaskNonFull@GroupAArch64Impl@container_internal@absl@@QEBA@XZ ?Match@GroupAArch64Impl@container_internal@absl@@QEBA@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YA_KXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YA_KXZ @@ -3929,6 +3937,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QEBA_KXZ ?NumClonedBytes@container_internal@absl@@YA_KXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YA_K_K@Z ?NumGenerationBytes@container_internal@absl@@YA_KXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3940,11 +3949,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QEAAXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APEAXW4FlagOp@12@PEBXPEAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3960,7 +3968,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4038,6 +4045,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ @@ -4130,6 +4139,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AEAAXAEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PEAVLogSink@absl@@$0BA@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4304,7 +4314,7 @@ ?SubtractSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TagToAllocatedSize@cord_internal@absl@@YA_KE@Z @@ -4459,7 +4469,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPEAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QEAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPEAURefcountedRep@123@@Z @@ -5060,6 +5069,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QEBA_KXZ ?begin@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBAPEADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QEBA_KXZ ?btree@CordRep@cord_internal@absl@@QEAAPEAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QEBAPEBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QEBAPEAVCordRepBtree@23@XZ @@ -5133,7 +5143,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAXXZ ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ @@ -5206,7 +5215,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@23@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@23@_K@Z @@ -5263,15 +5271,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VSourceLocation@absl@@@23@PEAVSourceLocation@absl@@_K@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEAAXXZ ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5372,6 +5377,7 @@ ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@AEBAPEAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5446,6 +5452,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAAPEAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAAPEAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX_KPEAW4ctrl_t@23@11_N1@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5462,14 +5469,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAAAEAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEAAPEAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEBAPEBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QEAAAEAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QEBA_KXZ + ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEBA_NXZ ?has_infoz@CommonFields@container_internal@absl@@QEBA_NXZ @@ -5499,7 +5505,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QEBA_KXZ ?index@?$probe_seq@$07@container_internal@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QEBAPEAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QEBA_KXZ
diff --git a/symbols_arm64_rel.def b/symbols_arm64_rel.def index c420864..4e8a1ae 100644 --- a/symbols_arm64_rel.def +++ b/symbols_arm64_rel.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -461,6 +463,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QEBAXVFastTypeIdType@3@P6APEBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -952,10 +962,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -969,7 +981,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1030,6 +1041,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1084,6 +1097,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1181,7 +1195,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1290,7 +1304,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
diff --git a/symbols_arm64_rel_cxx23.def b/symbols_arm64_rel_cxx23.def index fad08e3..b7f7a52 100644 --- a/symbols_arm64_rel_cxx23.def +++ b/symbols_arm64_rel_cxx23.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -461,6 +463,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QEBAXVFastTypeIdType@3@P6APEBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -952,10 +962,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -969,7 +981,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1030,6 +1041,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1084,6 +1097,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1181,7 +1195,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1290,7 +1304,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
diff --git a/symbols_x64_dbg.def b/symbols_x64_dbg.def index 3c60a5f..799703c 100644 --- a/symbols_x64_dbg.def +++ b/symbols_x64_dbg.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHAEBV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@01@_K@Z ??$ConstructElements@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@01@_K@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QEAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_K$$QEAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z @@ -624,7 +626,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEANPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAEAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@AEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QEBA_NXZ @@ -745,10 +746,8 @@ ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPEBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1050,7 +1049,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPEAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1485,7 +1483,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@12@PEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@12@PEAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1493,9 +1490,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UUnrecognizedFlag@absl@@@12@PEAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PEAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PEBUPayload@status_internal@absl@@@__Cr@std@@YA_JPEBUPayload@status_internal@absl@@0@Z ??$distance@PEBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA_JPEBUTransition@cctz@time_internal@absl@@0@Z @@ -2048,6 +2042,7 @@ ??0Clock@absl@@QEAA@XZ ??0CommandLineFlag@absl@@QEAA@XZ ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@AEBV012@@Z ??0CommonFields@container_internal@absl@@QEAA@Usoo_tag_t@12@@Z ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z ??0Condition@absl@@QEAA@PEB_N@Z @@ -2096,6 +2091,8 @@ ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ ??0GroupPortableImpl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z ??0GroupSse2Impl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QEAA@PEAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QEAA@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QEAA@PEBE@Z ??0HashtablezInfo@container_internal@absl@@QEAA@XZ ??0HashtablezInfoHandle@container_internal@absl@@QEAA@$$T@Z @@ -2149,7 +2146,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QEAA@_KVcrc32c_t@3@@Z ??0ProtoField@log_internal@absl@@QEAA@XZ ??0Randen@random_internal@absl@@QEAA@XZ - ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N@Z + ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N0@Z ??0ReaderMutexLock@absl@@QEAA@AEAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QEAA@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QEAA@XZ @@ -2801,7 +2798,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHAEBV23@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@QEBA?A?<auto>@@AEAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@0@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBV723@AEA_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEBQEAVCommandLineFlag@absl@@@?$vector@PEAVCommandLineFlag@absl@@V?$allocator@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@AEBQEAV45@@Z@QEBA?A?<auto>@@XZ @@ -3042,6 +3038,8 @@ ?AssertIsFull@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBEPEBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEBAXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -3146,7 +3144,7 @@ ?Contains@Cord@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YA_K_N0@Z + ?ControlOffset@container_internal@absl@@YA_K_N_K@Z ?ControlWord@base_internal@absl@@YAPEAU?$atomic@I@__Cr@std@@PEAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPEAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3193,6 +3191,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QEAAPEADXZ ?Data@CordRepFlat@cord_internal@absl@@QEBAPEBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z @@ -3212,7 +3211,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPEAV12@PEAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CA_KXZ ?DefaultIterControl@container_internal@absl@@YAPEAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@AEBA?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z @@ -3239,6 +3237,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PEAVSourceLocation@3@_K@Z + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -3518,7 +3519,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAVLogSink@3@XZ @@ -3535,8 +3536,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAEAVGrowthInfo@12@PEAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_KXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PEAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBAEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA_KXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -3617,6 +3621,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAEAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPEAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAEAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YA_K_K@Z ?GuaranteedEqual@Condition@absl@@SA_NPEBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAAEBCAEBC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAAEBDAEBD@Z @@ -3646,12 +3651,12 @@ ?HardeningAssert@base_internal@absl@@YAX_N@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QEBA_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_N_K@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QEBA_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3682,7 +3687,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QEAAPEAUCordRep@23@PEAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AEAAXH_K0@Z ?InitRep@StatusBuilder@absl@@CAPEAURep@12@AEBVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z @@ -3716,6 +3721,7 @@ ?IsAlreadyExists@absl@@YA_NAEBVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QEBA_NXZ ?IsCancelled@absl@@YA_NAEBVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_N_K@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QEBA_NXZ @@ -3752,6 +3758,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QEBA_NXZ ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QEBA_NAEBV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QEBA_NXZ ?IsSmallCapacity@container_internal@absl@@YA_N_K@Z @@ -3845,6 +3852,7 @@ ?MaskNonFull@GroupSse2Impl@container_internal@absl@@QEBA@XZ ?Match@GroupSse2Impl@container_internal@absl@@QEBA?AV?$BitMask@I$0BA@$0A@$0A@@23@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YA_KXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YA_KXZ @@ -3921,6 +3929,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QEBA_KXZ ?NumClonedBytes@container_internal@absl@@YA_KXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YA_K_K@Z ?NumGenerationBytes@container_internal@absl@@YA_KXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3932,11 +3941,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QEAAXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APEAXW4FlagOp@12@PEBXPEAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3952,7 +3960,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4030,6 +4037,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ @@ -4122,6 +4131,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AEAAXAEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PEAVLogSink@absl@@$0BA@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4296,7 +4306,7 @@ ?SubtractSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TagToAllocatedSize@cord_internal@absl@@YA_KE@Z @@ -4451,7 +4461,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPEAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QEAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPEAURefcountedRep@123@@Z @@ -5040,6 +5049,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QEBA_KXZ ?begin@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBAPEADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QEBA_KXZ ?btree@CordRep@cord_internal@absl@@QEAAPEAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QEBAPEBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QEBAPEAVCordRepBtree@23@XZ @@ -5113,7 +5123,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAXXZ ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ @@ -5186,7 +5195,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@23@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@23@_K@Z @@ -5243,15 +5251,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VSourceLocation@absl@@@23@PEAVSourceLocation@absl@@_K@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEAAXXZ ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5352,6 +5357,7 @@ ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@AEBAPEAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5426,6 +5432,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAAPEAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAAPEAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX_KPEAW4ctrl_t@23@11_N1@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5442,14 +5449,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAAAEAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEAAPEAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEBAPEBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QEAAAEAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QEBA_KXZ + ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEBA_NXZ ?has_infoz@CommonFields@container_internal@absl@@QEBA_NXZ @@ -5479,7 +5485,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QEBA_KXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QEBAPEAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QEBA_KXZ
diff --git a/symbols_x64_dbg_cxx23.def b/symbols_x64_dbg_cxx23.def index 9fcd0d0..390e2f3 100644 --- a/symbols_x64_dbg_cxx23.def +++ b/symbols_x64_dbg_cxx23.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHAEBV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PEAPEAUCordRep@cord_internal@absl@@@23@@01@_K@Z ??$ConstructElements@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@1@AEAV?$IteratorValueAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PEAPEAVLogSink@absl@@@23@@01@_K@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@_K0@Z ??$Deallocate@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAV?$allocator@D@__Cr@std@@PEAX_K@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QEAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_K$$QEAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QEAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QEAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z @@ -624,7 +626,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEANPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAEAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@AEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QEBA_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QEBA_NXZ @@ -745,10 +746,8 @@ ??$Register@AEB_JAEA_KAEA_KAEA_KAEAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QEAAPEAUHashtablezInfo@container_internal@2@AEB_JAEA_K11AEAG@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0???$construct@AEBUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QEAPEAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@AEBUpiecewise_construct_t@__Cr@std@@$$QEAV?$tuple@$$QEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QEAV?$tuple@$$QEAPEAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QEAAXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPEAD_KAEBV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@AEBDAEBH44@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPEBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1043,7 +1042,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPEAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1491,7 +1489,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@__Cr@std@@@12@PEAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@12@PEAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PEAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@12@PEAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1499,9 +1496,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PEAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UUnrecognizedFlag@absl@@@12@PEAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PEAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPEAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PEAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PEBUPayload@status_internal@absl@@@__Cr@std@@YA_JPEBUPayload@status_internal@absl@@0@Z ??$distance@PEBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SA_JPEBUTransition@cctz@time_internal@absl@@0@Z @@ -2061,6 +2055,7 @@ ??0Clock@absl@@QEAA@XZ ??0CommandLineFlag@absl@@QEAA@XZ ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QEAA@Unon_soo_tag_t@12@AEBV012@@Z ??0CommonFields@container_internal@absl@@QEAA@Usoo_tag_t@12@@Z ??0Condition@absl@@QEAA@P6A_NPEAX@Z0@Z ??0Condition@absl@@QEAA@PEB_N@Z @@ -2109,6 +2104,8 @@ ??0GraphCycles@synchronization_internal@absl@@QEAA@XZ ??0GroupPortableImpl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z ??0GroupSse2Impl@container_internal@absl@@QEAA@PEBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QEAA@PEAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QEAA@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QEAA@PEBE@Z ??0HashtablezInfo@container_internal@absl@@QEAA@XZ ??0HashtablezInfoHandle@container_internal@absl@@QEAA@$$T@Z @@ -2162,7 +2159,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QEAA@_KVcrc32c_t@3@@Z ??0ProtoField@log_internal@absl@@QEAA@XZ ??0Randen@random_internal@absl@@QEAA@XZ - ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N@Z + ??0RawHashSetLayout@container_internal@absl@@QEAA@_K00_N0@Z ??0ReaderMutexLock@absl@@QEAA@AEAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QEAA@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QEAA@XZ @@ -2814,7 +2811,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHAEBV23@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@AEBAHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K1@Z@QEBA?A?<auto>@@PEAVChunkIterator@23@PEAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QEAAXXZ@QEBA?A?<auto>@@AEAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@@Z@QEBA?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@34@0@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@AEBV123@AEA_K@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUViableSubstitution@strings_internal@absl@@AEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@AEBV723@AEA_K@Z@QEBA?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AEBQEAVCommandLineFlag@absl@@@?$vector@PEAVCommandLineFlag@absl@@V?$allocator@PEAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAPEAVCommandLineFlag@absl@@AEBQEAV45@@Z@QEBA?A?<auto>@@XZ @@ -3055,6 +3051,8 @@ ?AssertIsFull@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBEPEBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPEBW4ctrl_t@12@EPEBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEBAXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -3159,7 +3157,7 @@ ?Contains@Cord@absl@@QEBA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YA_K_N0@Z + ?ControlOffset@container_internal@absl@@YA_K_N_K@Z ?ControlWord@base_internal@absl@@YAPEAU?$atomic@I@__Cr@std@@PEAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPEAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3206,6 +3204,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QEAAPEADXZ ?Data@CordRepFlat@cord_internal@absl@@QEBAPEBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@PEAPEAUCordRep@cord_internal@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z @@ -3225,7 +3224,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPEAV12@PEAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPEAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CA_KXZ ?DefaultIterControl@container_internal@absl@@YAPEAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@AEBA?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPEAPEAXPEAHHHPEBX1@Z @@ -3252,6 +3250,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@PEAVLogSink@absl@@@__Cr@std@@PEAPEAVLogSink@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAEAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PEAUPayload@status_internal@3@_K@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAEAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PEAVSourceLocation@3@_K@Z + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -3531,7 +3532,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPEAU_RTL_CONDITION_VARIABLE@@PEAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAAEAPEAPEAVLogSink@3@XZ @@ -3548,8 +3549,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAEAVGrowthInfo@12@PEAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_KXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PEAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBAEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEBA_KXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -3630,6 +3634,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAEAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPEAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAEAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YA_K_K@Z ?GuaranteedEqual@Condition@absl@@SA_NPEBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAAEBCAEBC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAAEBDAEBD@Z @@ -3658,12 +3663,12 @@ ?HandleUsageFlags@flags_internal@absl@@YA?AW4HelpMode@12@AEAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPEBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QEBA_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_N_K@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QEBA_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QEBA_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QEAA_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QEBA_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3694,7 +3699,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QEAAPEAUCordRep@23@PEAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AEAAXH_K0@Z ?InitRep@StatusBuilder@absl@@CAPEAURep@12@AEBVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z @@ -3728,6 +3733,7 @@ ?IsAlreadyExists@absl@@YA_NAEBVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QEBA_NXZ ?IsCancelled@absl@@YA_NAEBVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_N_K@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QEBA_NXZ @@ -3764,6 +3770,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QEBA_NXZ ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QEBA_NAEBV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QEBA_NXZ ?IsSmallCapacity@container_internal@absl@@YA_N_K@Z @@ -3857,6 +3864,7 @@ ?MaskNonFull@GroupSse2Impl@container_internal@absl@@QEBA@XZ ?Match@GroupSse2Impl@container_internal@absl@@QEBA?AV?$BitMask@I$0BA@$0A@$0A@@23@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@AEBA_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YA_KXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SA_KXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YA_KXZ @@ -3933,6 +3941,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QEBA_KXZ ?NumClonedBytes@container_internal@absl@@YA_KXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YA_K_K@Z ?NumGenerationBytes@container_internal@absl@@YA_KXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3944,11 +3953,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QEAAXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QEAAXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QEAAX_K@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APEAXW4FlagOp@12@PEBXPEAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3964,7 +3972,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4042,6 +4049,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QEAAXXZ @@ -4134,6 +4143,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AEAAXAEBV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PEAVLogSink@absl@@$0BA@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@PEAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4308,7 +4318,7 @@ ?SubtractSize@?$Storage@PEAUCordRep@cord_internal@absl@@$01V?$allocator@PEAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAX_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TagToAllocatedSize@cord_internal@absl@@YA_KE@Z @@ -4463,7 +4473,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPEAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QEAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPEAURefcountedRep@123@@Z @@ -5065,6 +5074,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QEBA_KXZ ?begin@Storage@?$FixedArray@D$0?0V?$allocator@D@__Cr@std@@@absl@@QEBAPEADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEBA?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QEBA_KXZ ?btree@CordRep@cord_internal@absl@@QEAAPEAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QEBAPEBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QEBAPEAVCordRepBtree@23@XZ @@ -5138,7 +5148,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAXXZ ?clear@InlineRep@Cord@absl@@QEAAPEAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QEAAXXZ ?code@Status@absl@@QEBA?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QEBA?AW4StatusCode@3@XZ @@ -5211,7 +5220,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?deallocate@?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QEAAXPEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@23@_K@Z ?deallocate@?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QEAAXPEAPEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@23@_K@Z @@ -5268,15 +5276,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAEAV?$allocator@VSourceLocation@absl@@@23@PEAVSourceLocation@absl@@_K@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEAAXXZ ?decrement_size@CommonFields@container_internal@absl@@QEAAXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QEBAAEBVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PEAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AEAAXPEAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PEBVCommandLineFlag@absl@@V?$allocator@PEBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PEAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXPEAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAAXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5377,6 +5382,7 @@ ?front@?$__split_buffer@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PEAPEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QEAAAEAPEAPEBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAAEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@AEBAPEAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5451,6 +5457,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QEAAPEAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QEAAPEAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX_KPEAW4ctrl_t@23@11_N1@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEBAAEBV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@PEBUCordRep@cord_internal@absl@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QEAAAEAV?$__bucket_list_deallocator@V?$allocator@PEAU?$__hash_node_base@PEAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PEAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5467,14 +5474,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAAEAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QEAAAEAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPEAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QEBAHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEAAPEAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QEBAPEBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@AEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHAEBV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QEAAAEAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QEBA_KXZ + ?growth_info@CommonFields@container_internal@absl@@QEBA?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QEBA_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QEBA_NXZ ?has_infoz@CommonFields@container_internal@absl@@QEBA_NXZ @@ -5504,7 +5510,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QEBA_KXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QEBA_KXZ ?index@CordRepBtree@cord_internal@absl@@QEBA_KW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QEAA?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QEBAPEAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QEBA_KXZ
diff --git a/symbols_x64_rel.def b/symbols_x64_rel.def index 2542c8a..cdcf8bf 100644 --- a/symbols_x64_rel.def +++ b/symbols_x64_rel.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -462,6 +464,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QEBAXVFastTypeIdType@3@P6APEBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -952,10 +962,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -969,7 +981,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1030,6 +1041,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1084,6 +1097,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1181,7 +1195,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1290,7 +1304,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
diff --git a/symbols_x64_rel_asan.def b/symbols_x64_rel_asan.def index 96d63a0..7dd54d9 100644 --- a/symbols_x64_rel_asan.def +++ b/symbols_x64_rel_asan.def
@@ -43,6 +43,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -67,7 +69,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -212,10 +214,7 @@ ??$emplace_front@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAX$$QEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ??$find@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$find_large@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z - ??$find_or_prepare_insert@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_or_prepare_insert_large@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z - ??$find_or_prepare_insert_small@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z - ??$find_small@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@XZ ??0?$BigUnsigned@$03@strings_internal@absl@@QEAA@_K@Z @@ -479,6 +478,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -569,6 +569,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -591,6 +592,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -773,7 +777,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -784,6 +788,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -843,6 +848,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -881,6 +887,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -974,10 +981,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -991,7 +1000,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1052,6 +1060,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1107,6 +1117,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1206,7 +1217,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1315,7 +1326,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1376,15 +1386,12 @@ ?__throw_length_error@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@CAXXZ ?adaptive_spin_count_@SpinLock@base_internal@absl@@1U?$atomic@H@__Cr@std@@A ?assert_is_full@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEBAXPEBD@Z - ?begin@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@123@XZ ?clear@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ - ?clear@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAAXXZ ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z ?cycle_clock_source_@CycleClock@base_internal@absl@@0U?$atomic@P6A_JXZ@__Cr@std@@A ?day_difference@impl@detail@cctz@time_internal@absl@@YA_J_JCC0CC@Z ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?effective_impl@time_zone@cctz@time_internal@absl@@AEBAAEBVImpl@1234@XZ - ?end@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@123@XZ ?engines@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@4@PEIAXPEIBX_KV54@_N@Z@4UArchSpecificEngines@234@B ?fixed_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@AEBV?$duration@_JV?$ratio@$00$00@__Cr@std@@@chrono@__Cr@std@@@Z ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
diff --git a/symbols_x64_rel_asan_cxx23.def b/symbols_x64_rel_asan_cxx23.def index b6a5398..68e2dff 100644 --- a/symbols_x64_rel_asan_cxx23.def +++ b/symbols_x64_rel_asan_cxx23.def
@@ -43,6 +43,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -67,7 +69,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -205,10 +207,7 @@ ??$emplace_front@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@?$__split_buffer@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PEAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QEAAX$$QEAPEAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z ??$find@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$find_large@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z - ??$find_or_prepare_insert@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z ??$find_or_prepare_insert_large@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z - ??$find_or_prepare_insert_small@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@@Z - ??$find_small@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEAA?AViterator@012@AEBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$resize_and_overwrite@V<lambda_1>@?0???$IntegerToString@H@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@H@Z@@?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@QEAAX_KV<lambda_1>@?0???$IntegerToString@H@strings_internal@absl@@YA?AV012@H@Z@@Z ??$resize_and_overwrite@V<lambda_1>@?0???$IntegerToString@I@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@I@Z@@?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@QEAAX_KV<lambda_1>@?0???$IntegerToString@I@strings_internal@absl@@YA?AV012@I@Z@@Z ??$resize_and_overwrite@V<lambda_1>@?0???$IntegerToString@J@strings_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@J@Z@@?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@QEAAX_KV<lambda_1>@?0???$IntegerToString@J@strings_internal@absl@@YA?AV012@J@Z@@Z @@ -479,6 +478,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertSameContainer@container_internal@absl@@YAXPEBW4ctrl_t@12@0AEBQEBX1PEBE2@Z @@ -569,6 +569,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -591,6 +592,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -773,7 +777,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -784,6 +788,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -843,6 +848,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -881,6 +887,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -974,10 +981,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -991,7 +1000,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1052,6 +1060,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1107,6 +1117,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1206,7 +1217,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1315,7 +1326,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1376,15 +1386,12 @@ ?__throw_length_error@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@CAXXZ ?adaptive_spin_count_@SpinLock@base_internal@absl@@1U?$atomic@H@__Cr@std@@A ?assert_is_full@iterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AEBAXPEBD@Z - ?begin@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@123@XZ ?clear@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QEAAXXZ - ?clear@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAAXXZ ?combine_contiguous@MixingHashState@hash_internal@absl@@SA?AV123@V123@PEBE_K@Z ?cycle_clock_source_@CycleClock@base_internal@absl@@0U?$atomic@P6A_JXZ@__Cr@std@@A ?day_difference@impl@detail@cctz@time_internal@absl@@YA_J_JCC0CC@Z ?description@time_zone@cctz@time_internal@absl@@QEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?effective_impl@time_zone@cctz@time_internal@absl@@AEBAAEBVImpl@1234@XZ - ?end@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@QEAA?AViterator@123@XZ ?engines@?1??CrcAndCopy@CrcMemcpy@crc_internal@absl@@SA?AVcrc32c_t@4@PEIAXPEIBX_KV54@_N@Z@4UArchSpecificEngines@234@B ?fixed_time_zone@cctz@time_internal@absl@@YA?AVtime_zone@123@AEBV?$duration@_JV?$ratio@$00$00@__Cr@std@@@chrono@__Cr@std@@@Z ?format@detail@cctz@time_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@AEBV567@AEBV?$time_point@Vsystem_clock@chrono@__Cr@std@@V?$duration@_JV?$ratio@$00$00@__Cr@std@@@234@@chrono@67@AEBV?$duration@_JV?$ratio@$00$0DINHOKEMGIAAA@@__Cr@std@@@967@AEBVtime_zone@234@@Z
diff --git a/symbols_x64_rel_cxx23.def b/symbols_x64_rel_cxx23.def index 6bb0617..df43ce4 100644 --- a/symbols_x64_rel_cxx23.def +++ b/symbols_x64_rel_cxx23.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@EAAXXZPEAV123@@base_internal@absl@@YAXPEAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QEAP8FlagImpl@flags_internal@1@EAAXXZ$$QEAPEAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPEBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAEAVCommonFields@01@AEBUPolicyFunctions@01@P6AXPEAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPEBDPEBDQEBDPEAUUnboundConversion@01@PEAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PEAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AEAAXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AEAAXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N@Z + ??$DeallocateBackingArray@$07V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPEAX_KPEAW4ctrl_t@01@11_N1@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PEAX@Z @@ -462,6 +464,7 @@ ?AsciiStrToUpper@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPEADPEBD_K@Z ?AssertHeld@Mutex@absl@@QEBAXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@AEBAXXZ ?AssertNotHeld@Mutex@absl@@QEBAXXZ ?AssertReaderHeld@Mutex@absl@@QEBAXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QEBAXVFastTypeIdType@3@P6APEBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPEAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EEBA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@AEBAAEAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX1PEAW4ctrl_t@12@11_N1@Z2@Z ?DecodeFrom@ProtoField@log_internal@absl@@QEAA_NPEAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPEADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AEAAXXZ ?DestroyCordSlow@Cord@absl@@AEAAXXZ + ?DestroySlots@container_internal@absl@@YAXAEAVCommonFields@12@_KP6AXPEAX2@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z + ?DestructSoo@container_internal@absl@@YAXAEAVCommonFields@12@_K1P6AXPEAX2@ZP6AX21PEAW4ctrl_t@12@11_N1@Z2@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QEAA?AV?$vector@PEBVCordzHandle@cord_internal@absl@@V?$allocator@PEBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QEBA_NPEBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QEBAD_K@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QEBA?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQEBQEAXHPEBXP6AXPEBDPEAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQEBQEAXHP6AXPEBDPEAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPEAUCordRep@cord_internal@2@PEAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QEBA_K_K@Z ?GetHashtablezMaxSamples@container_internal@absl@@YA_KXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QEAA?AUGraphId@23@PEAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AEAAXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@N_K@__Cr@std@@V?$allocator@U?$pair@N_K@__Cr@std@@@23@@__Cr@std@@PEAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QEAAXAEBV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QEAAX_K0@Z ?InitRepImpl@StatusBuilder@absl@@CAPEAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QEAAXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QEBA_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NAEBVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UEBA_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EEBA_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NAEBVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NAEBVStatus@1@@Z @@ -952,10 +962,12 @@ ?Now@CycleClock@base_internal@absl@@SA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPEAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@AEBAAEAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QEAAXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQEAPEADAEAV?$vector@PEADV?$allocator@PEAD@__Cr@std@@@__Cr@std@@AEAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -969,7 +981,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAEADAEAPEBDQEBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAVDuration@1@@Z ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVDuration@1@PEAV234@@Z - ?ParseFlag@absl@@YA_NAEBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PEAVTime@1@PEAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EEAA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAEAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1030,6 +1041,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@AEBAXPEAX@Z ?ReaderTryLockSlow@Mutex@absl@@AEAA_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QEAA?AVGrowthInfoLowerBound@23@_K@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AEAA?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPEAPEAV123@PEAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPEAV123@PEAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z @@ -1084,6 +1097,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QEAA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@_K@Z ?SendToLog@LogMessage@log_internal@absl@@AEAAXXZ ?Set@MaskedPointer@flags_internal@absl@@QEAAXP6APEAXW4FlagOp@23@PEBXPEAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPEBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QEAAXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QEGAAAEAV12@W4StatusCode@2@@Z @@ -1181,7 +1195,7 @@ ?Subcord@Cord@absl@@QEBA?AV12@_K0@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPEAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PEBV645@_K@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPEBXPEADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QEAAXI@Z @@ -1290,7 +1304,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QEBAXXZ ?UnrefTree@InlineRep@Cord@absl@@AEAAXXZ ?UnsampleSlow@container_internal@absl@@YAXPEAUHashtablezInfo@12@@Z
diff --git a/symbols_x86_dbg.def b/symbols_x86_dbg.def index 19647e6..aebc24d 100644 --- a/symbols_x86_dbg.def +++ b/symbols_x86_dbg.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QAP8FlagImpl@flags_internal@1@AEXXZ$$QAPAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHABV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PAPAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@1@AAV?$IteratorValueAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PAPAUCordRep@cord_internal@absl@@@23@@01@I@Z ??$ConstructElements@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PAPAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@1@AAV?$IteratorValueAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PAPAVLogSink@absl@@@23@@01@I@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@II@Z ??$Deallocate@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAV?$allocator@D@__Cr@std@@PAXI@Z - ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_N@Z + ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_NI@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YAI$$QAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@@Z @@ -623,7 +625,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PANPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@ABV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QBE_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QBE_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QBE_NXZ @@ -744,10 +745,8 @@ ??$Register@AB_JAAIAAIAAIAAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QAEPAUHashtablezInfo@container_internal@2@AB_JAAI11AAG@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPADIABV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@ABDABH33@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1049,7 +1048,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1484,7 +1482,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@12@PAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UPayload@status_internal@absl@@@12@PAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1492,9 +1489,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UUnrecognizedFlag@absl@@@12@PAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PBUPayload@status_internal@absl@@@__Cr@std@@YAHPBUPayload@status_internal@absl@@0@Z ??$distance@PBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAHPBUTransition@cctz@time_internal@absl@@0@Z @@ -2046,6 +2040,7 @@ ??0Clock@absl@@QAE@XZ ??0CommandLineFlag@absl@@QAE@XZ ??0CommonFields@container_internal@absl@@QAE@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QAE@Unon_soo_tag_t@12@ABV012@@Z ??0CommonFields@container_internal@absl@@QAE@Usoo_tag_t@12@@Z ??0Condition@absl@@QAE@P6A_NPAX@Z0@Z ??0Condition@absl@@QAE@PB_N@Z @@ -2094,6 +2089,8 @@ ??0GraphCycles@synchronization_internal@absl@@QAE@XZ ??0GroupPortableImpl@container_internal@absl@@QAE@PBW4ctrl_t@12@@Z ??0GroupSse2Impl@container_internal@absl@@QAE@PBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QAE@PAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QAE@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QAE@PBE@Z ??0HashtablezInfo@container_internal@absl@@QAE@XZ ??0HashtablezInfoHandle@container_internal@absl@@QAE@$$T@Z @@ -2147,7 +2144,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QAE@XZ ??0ProtoField@log_internal@absl@@QAE@XZ ??0Randen@random_internal@absl@@QAE@XZ - ??0RawHashSetLayout@container_internal@absl@@QAE@III_N@Z + ??0RawHashSetLayout@container_internal@absl@@QAE@III_NI@Z ??0ReaderMutexLock@absl@@QAE@AAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QAE@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QAE@XZ @@ -2799,7 +2796,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@ABEHABV23@II@Z@QBE?A?<auto>@@PAVChunkIterator@23@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@ABEHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@II@Z@QBE?A?<auto>@@PAVChunkIterator@23@PAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QAEXXZ@QBE?A?<auto>@@AAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@@Z@QBE?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@0@Z@QBE?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABV123@AAI@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUViableSubstitution@strings_internal@absl@@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABV723@AAI@Z@QBE?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@ABQAVCommandLineFlag@absl@@@?$vector@PAVCommandLineFlag@absl@@V?$allocator@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QAEAAPAVCommandLineFlag@absl@@ABQAV45@@Z@QBE?A?<auto>@@XZ @@ -3040,6 +3036,8 @@ ?AssertIsFull@container_internal@absl@@YAXPBW4ctrl_t@12@EPBEPBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPBW4ctrl_t@12@EPBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IBEXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QBEXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@ABEXXZ ?AssertNotHeld@Mutex@absl@@QBEXXZ ?AssertReaderHeld@Mutex@absl@@QBEXXZ ?AssertSameContainer@container_internal@absl@@YAXPBW4ctrl_t@12@0ABQBX1PBE2@Z @@ -3144,7 +3142,7 @@ ?Contains@Cord@absl@@QBE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YAI_N0@Z + ?ControlOffset@container_internal@absl@@YAI_NI@Z ?ControlWord@base_internal@absl@@YAPAU?$atomic@I@__Cr@std@@PAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3191,6 +3189,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QAEPADXZ ?Data@CordRepFlat@cord_internal@absl@@QBEPBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@ABEAAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAXIPAW4ctrl_t@12@II_NI@Z1@Z ?Deallocate@?$MallocAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@3@I@Z ?Deallocate@?$MallocAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@3@I@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@3@I@Z @@ -3210,7 +3209,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPAV12@PAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAIXZ ?DefaultIterControl@container_internal@absl@@YAPAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@ABE?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPAPAXPAHHHPBX1@Z @@ -3237,6 +3235,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@3@I@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@3@I@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PAVSourceLocation@3@I@Z + ?DestroySlots@container_internal@absl@@YAXAAVCommonFields@12@IP6AXPAX1@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z + ?DestructSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z @@ -3516,7 +3517,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QBEDI@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPAU_RTL_CONDITION_VARIABLE@@PAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEAAPAPAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEAAPAPAVLogSink@3@XZ @@ -3533,8 +3534,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPAUCordRep@cord_internal@2@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAAVGrowthInfo@12@PAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QBEIXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QBE?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBEEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QBEIXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QBEII@Z ?GetHashtablezMaxSamples@container_internal@absl@@YAIXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QAE?AUGraphId@23@PAX@Z @@ -3615,6 +3619,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YAII@Z ?GuaranteedEqual@Condition@absl@@SA_NPBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAABCABC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAABDABD@Z @@ -3644,12 +3649,12 @@ ?HardeningAssert@base_internal@absl@@YAX_N@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QBE_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_NI@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QBE_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3680,7 +3685,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@NI@__Cr@std@@V?$allocator@U?$pair@NI@__Cr@std@@@23@@__Cr@std@@PAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QAEPAUCordRep@23@PAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXABV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QAEXI@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXII@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AAEXHII@Z ?InitRep@StatusBuilder@absl@@CAPAURep@12@ABVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPAURep@12@VStatus@2@@Z @@ -3714,6 +3719,7 @@ ?IsAlreadyExists@absl@@YA_NABVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QBE_NXZ ?IsCancelled@absl@@YA_NABVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_NI@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QBE_NXZ @@ -3750,6 +3756,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QBE_NXZ ?IsResourceExhausted@absl@@YA_NABVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UBE_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QBE_NABV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QBE_NXZ ?IsSmallCapacity@container_internal@absl@@YA_NI@Z @@ -3843,6 +3850,7 @@ ?MaskNonFull@GroupSse2Impl@container_internal@absl@@QBE@XZ ?Match@GroupSse2Impl@container_internal@absl@@QBE?AV?$BitMask@I$0BA@$0A@$0A@@23@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@ABE_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YAIXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SAIXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YAIXZ @@ -3918,6 +3926,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QBEIXZ ?NumClonedBytes@container_internal@absl@@YAIXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YAII@Z ?NumGenerationBytes@container_internal@absl@@YAIXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3929,11 +3938,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@ABEAAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QAEXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QAEXI@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QAEXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QAEXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QAEXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APAXW4FlagOp@12@PBXPAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3949,7 +3957,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAADAAPBDQBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVDuration@1@@Z ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVDuration@1@PAV234@@Z - ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVTime@1@PAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4027,6 +4034,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@ABEXPAX@Z ?ReaderTryLockSlow@Mutex@absl@@AAE_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QAE?AVGrowthInfoLowerBound@23@I@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AAE?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPAPAV123@PAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPAV123@PAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QAEXXZ @@ -4119,6 +4128,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AAEXABV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QAEXP6APAXW4FlagOp@23@PBXPAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PAVLogSink@absl@@$0BA@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4293,7 +4303,7 @@ ?SubtractSize@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXI@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXI@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPBXPADH@Z ?TagToAllocatedSize@cord_internal@absl@@YAIE@Z @@ -4448,7 +4458,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPAURefcountedRep@123@@Z @@ -5037,6 +5046,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QBEIXZ ?begin@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEPADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QBE?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QBEIXZ ?btree@CordRep@cord_internal@absl@@QAEPAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QBEPBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QBEPAVCordRepBtree@23@XZ @@ -5110,7 +5120,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAEXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEXXZ ?clear@InlineRep@Cord@absl@@QAEPAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QAEXXZ ?code@Status@absl@@QBE?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QBE?AW4StatusCode@3@XZ @@ -5183,7 +5192,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?deallocate@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QAEXPAPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z ?deallocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@23@I@Z ?deallocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@23@I@Z @@ -5240,15 +5248,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@VSourceLocation@absl@@@23@PAVSourceLocation@absl@@I@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QAEXXZ ?decrement_size@CommonFields@container_internal@absl@@QAEXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AAEXPAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AAEXPAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5349,6 +5354,7 @@ ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@ABEPAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5423,6 +5429,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QAEPAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QAEPAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPAXIPAW4ctrl_t@23@II_NI@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEAAV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QBEABV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEAAV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5439,14 +5446,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QAEAAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QBEHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QAEPAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QBEPBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QAEAAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QBE?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QBEIXZ + ?growth_info@CommonFields@container_internal@absl@@QBE?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QBE_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QBE_NXZ ?has_infoz@CommonFields@container_internal@absl@@QBE_NXZ @@ -5476,7 +5482,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QBEIXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QBEIXZ ?index@CordRepBtree@cord_internal@absl@@QBEIW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAE?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QAE?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QBEPAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QBEIXZ
diff --git a/symbols_x86_dbg_cxx23.def b/symbols_x86_dbg_cxx23.def index ff169d8..026ad7e 100644 --- a/symbols_x86_dbg_cxx23.def +++ b/symbols_x86_dbg_cxx23.def
@@ -424,6 +424,8 @@ ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QAP8FlagImpl@flags_internal@1@AEXXZ$$QAPAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPBV01@@Z ??$CastAndCallFunction@USynchEvent@absl@@@Condition@absl@@CA_NPBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z ??$Compare@$0FE@$0FE@@strings_internal@absl@@YAHABV?$BigUnsigned@$0FE@@01@0@Z ??$ConstructElements@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PAPAUCordRep@cord_internal@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@1@AAV?$IteratorValueAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@V?$move_iterator@PAPAUCordRep@cord_internal@absl@@@23@@01@I@Z ??$ConstructElements@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$IteratorValueAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PAPAVLogSink@absl@@@23@@inlined_vector_internal@absl@@@inlined_vector_internal@absl@@YAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@1@AAV?$IteratorValueAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@V?$move_iterator@PAPAVLogSink@absl@@@23@@01@I@Z @@ -461,7 +463,7 @@ ??$CreateDefault@$0A@@CommonFields@container_internal@absl@@SA?AV012@XZ ??$CreateWithCustomLimitImpl@$$V@CordBuffer@absl@@CA?AV01@II@Z ??$Deallocate@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAV?$allocator@D@__Cr@std@@PAXI@Z - ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_N@Z + ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_NI@Z ??$DecomposePair@U?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@container_internal@absl@@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA_N$$QAU?$EqualElement@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@UStringEq@container_internal@absl@@@01@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@U?$HashElement@UStringHash@container_internal@absl@@$00@container_internal@absl@@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YAI$$QAU?$HashElement@UStringHash@container_internal@absl@@$00@01@AAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@Z ??$DecomposePair@UEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@container_internal@absl@@YA?AU?$pair@Viterator@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@_N@__Cr@std@@$$QAUEmplaceDecomposable@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@01@$$QAU?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@@Z @@ -623,7 +625,6 @@ ??$InvokeParseFlag@N@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PANPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeParseFlag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@34@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@34@@Z ??$InvokeSet@V?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@FlagImplPeer@flags_internal@absl@@SAXAAV?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@12@ABV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z - ??$IsDestructionTrivial@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@@container_internal@absl@@YA?A_PXZ ??$IsOfType@F@CommandLineFlag@absl@@QBE_NXZ ??$IsOfType@G@CommandLineFlag@absl@@QBE_NXZ ??$IsOfType@H@CommandLineFlag@absl@@QBE_NXZ @@ -744,10 +745,8 @@ ??$Register@AB_JAAIAAIAAIAAG@?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@absl@@QAEPAUHashtablezInfo@container_internal@2@AB_JAAI11AAG@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0???$construct@ABUpiecewise_construct_t@__Cr@std@@V?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@23@V?$tuple@$$QAPAVCommandLineFlag@absl@@@23@@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@ABUpiecewise_construct_t@__Cr@std@@$$QAV?$tuple@$$QBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@78@$$QAV?$tuple@$$QAPAVCommandLineFlag@absl@@@78@@Z@@Z - ??$RunWithReentrancyGuard@V<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z@@Z ??$RunWithReentrancyGuard@V<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@45@0@Z@@CommonFields@container_internal@absl@@QAEXV<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@12@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@0@Z@@Z ??$SNPrintF@DHHH@absl@@YAHPADIABV?$FormatSpecTemplate@$0BPPPL@$0JPPPL@$0JPPPL@$0JPPPL@@str_format_internal@0@ABDABH33@Z - ??$SanitizerPoisonObject@T?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@@container_internal@absl@@YAXPBT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@01@@Z ??$Seconds@H$0A@@absl@@YA?AVDuration@0@H@Z ??$Seconds@J$0A@@absl@@YA?AVDuration@0@J@Z ??$Seconds@_J$0A@@absl@@YA?AVDuration@0@_J@Z @@ -1042,7 +1041,6 @@ ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@01@@Z ??$__destroy_at@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@01@@Z - ??$__destroy_at@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@YAXPAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@01@@Z ??$__destroy_at@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@YAXPAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$__destroy_at@UPayload@status_internal@absl@@@__Cr@std@@YAXPAUPayload@status_internal@absl@@@Z ??$__destroy_at@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@YAXPAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1490,7 +1488,6 @@ ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@U?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@12@@Z ??$destroy@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@__Cr@std@@@12@PAU?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@12@@Z - ??$destroy@U?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@12@PAU?$pair@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z ??$destroy@UConversionItem@ParsedFormatBase@str_format_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UConversionItem@ParsedFormatBase@str_format_internal@absl@@@12@PAUConversionItem@ParsedFormatBase@str_format_internal@absl@@@Z ??$destroy@UPayload@status_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UPayload@status_internal@absl@@@12@PAUPayload@status_internal@absl@@@Z ??$destroy@UPrefixCrc@CrcCordState@crc_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@12@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@Z @@ -1498,9 +1495,6 @@ ??$destroy@UTransitionType@cctz@time_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UTransitionType@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UTransitionType@cctz@time_internal@absl@@@12@PAUTransitionType@cctz@time_internal@absl@@@Z ??$destroy@UUnrecognizedFlag@absl@@$0A@@?$allocator_traits@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UUnrecognizedFlag@absl@@@12@PAUUnrecognizedFlag@absl@@@Z ??$destroy@UViableSubstitution@strings_internal@absl@@$0A@@?$allocator_traits@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@UViableSubstitution@strings_internal@absl@@@12@PAUViableSubstitution@strings_internal@absl@@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$common_policy_traits@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@X@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z - ??$destroy@V?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@@?$map_slot_policy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@SA?A_PPAV?$allocator@U?$pair@$$CBV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@PAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@12@@Z ??$destroy@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@$0A@@?$allocator_traits@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@12@PAV?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@12@@Z ??$distance@PBUPayload@status_internal@absl@@@__Cr@std@@YAHPBUPayload@status_internal@absl@@0@Z ??$distance@PBUTransition@cctz@time_internal@absl@@@?$_IterOps@U_ClassicAlgPolicy@__Cr@std@@@__Cr@std@@SAHPBUTransition@cctz@time_internal@absl@@0@Z @@ -2059,6 +2053,7 @@ ??0Clock@absl@@QAE@XZ ??0CommandLineFlag@absl@@QAE@XZ ??0CommonFields@container_internal@absl@@QAE@Unon_soo_tag_t@12@@Z + ??0CommonFields@container_internal@absl@@QAE@Unon_soo_tag_t@12@ABV012@@Z ??0CommonFields@container_internal@absl@@QAE@Usoo_tag_t@12@@Z ??0Condition@absl@@QAE@P6A_NPAX@Z0@Z ??0Condition@absl@@QAE@PB_N@Z @@ -2107,6 +2102,8 @@ ??0GraphCycles@synchronization_internal@absl@@QAE@XZ ??0GroupPortableImpl@container_internal@absl@@QAE@PBW4ctrl_t@12@@Z ??0GroupSse2Impl@container_internal@absl@@QAE@PBW4ctrl_t@12@@Z + ??0GrowthInfoAccessor@container_internal@absl@@QAE@PAX@Z + ??0GrowthInfoLowerBound@container_internal@absl@@QAE@E@Z ??0HashSetIteratorGenerationInfoDisabled@container_internal@absl@@QAE@PBE@Z ??0HashtablezInfo@container_internal@absl@@QAE@XZ ??0HashtablezInfoHandle@container_internal@absl@@QAE@$$T@Z @@ -2160,7 +2157,7 @@ ??0PrefixCrc@CrcCordState@crc_internal@absl@@QAE@XZ ??0ProtoField@log_internal@absl@@QAE@XZ ??0Randen@random_internal@absl@@QAE@XZ - ??0RawHashSetLayout@container_internal@absl@@QAE@III_N@Z + ??0RawHashSetLayout@container_internal@absl@@QAE@III_NI@Z ??0ReaderMutexLock@absl@@QAE@AAVMutex@1@@Z ??0RefcountAndFlags@cord_internal@absl@@QAE@XZ ??0RefcountedRep@CrcCordState@crc_internal@absl@@QAE@XZ @@ -2812,7 +2809,6 @@ ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@ABEHABV23@II@Z@QBE?A?<auto>@@PAVChunkIterator@23@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??R<lambda_1>@?0??CompareSlowPath@Cord@absl@@ABEHV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@II@Z@QBE?A?<auto>@@PAVChunkIterator@23@PAV456@@Z ??R<lambda_1>@?0??SaveFromRegistry@FlagSaverImpl@flags_internal@absl@@QAEXXZ@QBE?A?<auto>@@AAVCommandLineFlag@4@@Z - ??R<lambda_1>@?0??destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@@Z@QBE?A?<auto>@@XZ ??R<lambda_1>@?0??transfer@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@34@0@Z@QBE?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@ABV123@AAI@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUViableSubstitution@strings_internal@absl@@AAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@23@ABV723@AAI@Z@QBE?A?<auto>@@XZ ??R<lambda_2>@?0???$emplace_back@ABQAVCommandLineFlag@absl@@@?$vector@PAVCommandLineFlag@absl@@V?$allocator@PAVCommandLineFlag@absl@@@__Cr@std@@@__Cr@std@@QAEAAPAVCommandLineFlag@absl@@ABQAV45@@Z@QBE?A?<auto>@@XZ @@ -3053,6 +3049,8 @@ ?AssertIsFull@container_internal@absl@@YAXPBW4ctrl_t@12@EPBEPBD@Z ?AssertIsValidForComparison@container_internal@absl@@YAXPBW4ctrl_t@12@EPBE@Z ?AssertNotDebugCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@IBEXXZ + ?AssertNotDebugCapacity@CommonFields@container_internal@absl@@QBEXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@ABEXXZ ?AssertNotHeld@Mutex@absl@@QBEXXZ ?AssertReaderHeld@Mutex@absl@@QBEXXZ ?AssertSameContainer@container_internal@absl@@YAXPBW4ctrl_t@12@0ABQBX1PBE2@Z @@ -3157,7 +3155,7 @@ ?Contains@Cord@absl@@QBE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@D@Z ?Contains@str_format_internal@absl@@YA_NW4FormatConversionCharSet@2@W4FormatConversionChar@2@@Z - ?ControlOffset@container_internal@absl@@YAI_N0@Z + ?ControlOffset@container_internal@absl@@YAI_NI@Z ?ControlWord@base_internal@absl@@YAPAU?$atomic@I@__Cr@std@@PAVonce_flag@2@@Z ?ConvertBoolArg@str_format_internal@absl@@YA_N_NPAVFormatSinkImpl@12@@Z ?ConvertDateTime@absl@@YA?AUTimeConversion@1@_JHHHHHVTimeZone@1@@Z @@ -3204,6 +3202,7 @@ ?Data@CordRepFlat@cord_internal@absl@@QAEPADXZ ?Data@CordRepFlat@cord_internal@absl@@QBEPBDXZ ?DataGuard@FlagImpl@flags_internal@absl@@ABEAAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAXIPAW4ctrl_t@12@II_NI@Z1@Z ?Deallocate@?$MallocAdapter@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@PAPAUCordRep@cord_internal@3@I@Z ?Deallocate@?$MallocAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@3@I@Z ?Deallocate@?$MallocAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@3@I@Z @@ -3223,7 +3222,6 @@ ?DecrementSynchSem@Mutex@absl@@CA_NPAV12@PAUPerThreadSynch@base_internal@2@VKernelTimeout@synchronization_internal@2@@Z ?DeduceUsageFlags@flags_internal@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@0@Z ?DefaultArena@LowLevelAlloc@base_internal@absl@@SAPAUArena@123@XZ - ?DefaultCapacity@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAIXZ ?DefaultIterControl@container_internal@absl@@YAPAW4ctrl_t@12@XZ ?DefaultKind@FlagImpl@flags_internal@absl@@ABE?AW4FlagDefaultKind@23@XZ ?DefaultStackUnwinder@absl@@YAHPAPAXPAHHHPBX1@Z @@ -3250,6 +3248,9 @@ ?DestroyElements@?$DestroyAdapter@V?$allocator@PAVLogSink@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAAV?$allocator@PAVLogSink@absl@@@__Cr@std@@PAPAVLogSink@3@I@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@$0A@@inlined_vector_internal@absl@@SAXAAV?$allocator@UPayload@status_internal@absl@@@__Cr@std@@PAUPayload@status_internal@3@I@Z ?DestroyElements@?$DestroyAdapter@V?$allocator@VSourceLocation@absl@@@__Cr@std@@$00@inlined_vector_internal@absl@@SAXAAV?$allocator@VSourceLocation@absl@@@__Cr@std@@PAVSourceLocation@3@I@Z + ?DestroySlots@container_internal@absl@@YAXAAVCommonFields@12@IP6AXPAX1@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z + ?DestructSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z @@ -3529,7 +3530,7 @@ ?GetCharacter@CordRepBtree@cord_internal@absl@@QBEDI@Z ?GetCond@WinHelper@Win32Waiter@synchronization_internal@absl@@SAPAU_RTL_CONDITION_VARIABLE@@PAV234@@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetData@?$AllocationTransaction@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEAAPAPAUCordRep@cord_internal@3@XZ ?GetData@?$AllocationTransaction@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEAAPAPAVLogSink@3@XZ @@ -3546,8 +3547,11 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPAUCordRep@cord_internal@2@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ?GetGrowthInfoFromControl@container_internal@absl@@YAAAVGrowthInfo@12@PAW4ctrl_t@12@@Z - ?GetGrowthLeft@GrowthInfo@container_internal@absl@@QBEIXZ + ?GetGrowthInfoFromControl@container_internal@absl@@YA?AVGrowthInfoAccessor@12@PAW4ctrl_t@12@@Z + ?GetGrowthInfoLowerBound@GrowthInfoAccessor@container_internal@absl@@QBE?AVGrowthInfoLowerBound@23@XZ + ?GetGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBEEXZ + ?GetGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QBEIXZ + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QBEII@Z ?GetHashtablezMaxSamples@container_internal@absl@@YAIXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QAE?AUGraphId@23@PAX@Z @@ -3628,6 +3632,7 @@ ?GlobalHashtablezSampler@container_internal@absl@@YAAAV?$SampleRecorder@UHashtablezInfo@container_internal@absl@@@profiling_internal@2@XZ ?GlobalList@CordzInfo@cord_internal@absl@@CAPAUList@123@XZ ?GlobalRegistry@FlagRegistry@flags_internal@absl@@SAAAV123@XZ + ?GrowthInfoSizeForCapacity@container_internal@absl@@YAII@Z ?GuaranteedEqual@Condition@absl@@SA_NPBV12@0@Z ?Guard@?$NullGuard@C@log_internal@absl@@SAABCABC@Z ?Guard@?$NullGuard@D@log_internal@absl@@SAABDABD@Z @@ -3656,12 +3661,12 @@ ?HandleUsageFlags@flags_internal@absl@@YA?AW4HelpMode@12@AAV?$basic_ostream@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@56@@Z ?HasBeenNotifiedInternal@Notification@absl@@CA_NPBU?$atomic@_N@__Cr@std@@@Z ?HasBeenRead@MaskedPointer@flags_internal@absl@@QBE_NXZ + ?HasDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ ?HasEdge@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z - ?HasGrowthInfoForCapacity@container_internal@absl@@YA_NI@Z - ?HasNoDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoDeletedAndGrowthLeft@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoGrowthLeftAndNoDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ - ?HasNoGrowthLeftAssumingMayHaveDeleted@GrowthInfo@container_internal@absl@@QBE_NXZ + ?HasNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoDeletedAndGrowthLeft@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoGrowthLeftAndHaveDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ + ?HasNoGrowthLeftAndNoDeleted@GrowthInfoLowerBound@container_internal@absl@@QBE_NXZ ?HasNode@GraphCycles@synchronization_internal@absl@@QAE_NUGraphId@23@@Z ?HasPayload@StatusBuilder@absl@@QBE_NXZ ?HasRandenHwAesImplementation@random_internal@absl@@YA_NXZ @@ -3692,7 +3697,7 @@ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@NI@__Cr@std@@V?$allocator@U?$pair@NI@__Cr@std@@@23@@__Cr@std@@PAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFirst@CordRepBtreeNavigator@cord_internal@absl@@QAEPAUCordRep@23@PAVCordRepBtree@23@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXABV123@@Z - ?InitGrowthLeftNoDeleted@GrowthInfo@container_internal@absl@@QAEXI@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXII@Z ?InitInstance@CordRepBtree@cord_internal@absl@@AAEXHII@Z ?InitRep@StatusBuilder@absl@@CAPAURep@12@ABVStatus@2@@Z ?InitRepImpl@StatusBuilder@absl@@CAPAURep@12@VStatus@2@@Z @@ -3726,6 +3731,7 @@ ?IsAlreadyExists@absl@@YA_NABVStatus@1@@Z ?IsBtree@CordRep@cord_internal@absl@@QBE_NXZ ?IsCancelled@absl@@YA_NABVStatus@1@@Z + ?IsCapacityValidForBlockedElements@container_internal@absl@@YA_NI@Z ?IsCooperative@SpinLock@base_internal@absl@@CA_NW4SchedulingMode@23@@Z ?IsCordBtreeExhaustiveValidationEnabled@cord_internal@absl@@YA_NXZ ?IsCrc@CordRep@cord_internal@absl@@QBE_NXZ @@ -3762,6 +3768,7 @@ ?IsReentrance@?$HashtableCapacityImpl@$00@container_internal@absl@@QBE_NXZ ?IsResourceExhausted@absl@@YA_NABVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UBE_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSame@InlineRep@Cord@absl@@QBE_NABV123@@Z ?IsSampled@HashtablezInfoHandle@container_internal@absl@@QBE_NXZ ?IsSmallCapacity@container_internal@absl@@YA_NI@Z @@ -3855,6 +3862,7 @@ ?MaskNonFull@GroupSse2Impl@container_internal@absl@@QBE@XZ ?Match@GroupSse2Impl@container_internal@absl@@QBE?AV?$BitMask@I$0BA@$0A@$0A@@23@E@Z ?MatchesConversions@ParsedFormatBase@str_format_internal@absl@@ABE_N_NV?$initializer_list@W4FormatConversionCharSet@absl@@@std@@@Z + ?MaxCapacityWithBlockedElements@container_internal@absl@@YAIXZ ?MaxFlatLength@CordTestAccess@strings_internal@absl@@SAIXZ ?MaxFramesInLogStackTrace@log_internal@absl@@YAHXZ ?MaxSmallCapacity@container_internal@absl@@YAIXZ @@ -3930,6 +3938,7 @@ ?NumCPUs@base_internal@absl@@YAHXZ ?NumChunks@CrcCordState@crc_internal@absl@@QBEIXZ ?NumClonedBytes@container_internal@absl@@YAIXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumControlBytes@container_internal@absl@@YAII@Z ?NumGenerationBytes@container_internal@absl@@YAIXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ @@ -3941,11 +3950,10 @@ ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@ABEAAU?$atomic@_J@__Cr@std@@XZ ?OppositeInfinity@time_internal@absl@@YA?AVDuration@2@V32@@Z - ?OverwriteControlAsFull@GrowthInfo@container_internal@absl@@QAEXW4ctrl_t@23@@Z - ?OverwriteEmptyAsFull@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteFullAsDeleted@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteFullAsEmpty@GrowthInfo@container_internal@absl@@QAEXXZ - ?OverwriteManyEmptyAsFull@GrowthInfo@container_internal@absl@@QAEXI@Z + ?OverwriteControlAsFull@GrowthInfoAccessor@container_internal@absl@@QAEXW4ctrl_t@23@@Z + ?OverwriteEmptyAsFull@GrowthInfoAccessor@container_internal@absl@@QAEXXZ + ?OverwriteFullAsDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXXZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QAEXXZ ?Package@flags_internal@absl@@YA?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@V345@@Z ?Parse@flags_internal@absl@@YA_NP6APAXW4FlagOp@12@PBXPAX2@ZV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@2PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseAbseilFlagsOnly@absl@@YAXHQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z @@ -3961,7 +3969,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAADAAPBDQBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVDuration@1@@Z ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVDuration@1@PAV234@@Z - ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVTime@1@PAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -4039,6 +4046,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@ABEXPAX@Z ?ReaderTryLockSlow@Mutex@absl@@AAE_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QAE?AVGrowthInfoLowerBound@23@I@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AAE?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPAPAV123@PAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPAV123@PAV123@@Z ?RecordClearedReservation@HashtablezInfoHandle@container_internal@absl@@QAEXXZ @@ -4131,6 +4140,7 @@ ?SentinelEmptyGeneration@container_internal@absl@@YAEXZ ?Set@?$Flag@V?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@flags_internal@absl@@AAEXABV?$vector@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@__Cr@std@@@Z ?Set@MaskedPointer@flags_internal@absl@@QAEXP6APAXW4FlagOp@23@PBXPAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAllocation@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@PAVLogSink@absl@@$0BA@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@PAVLogSink@absl@@@__Cr@std@@@23@@Z ?SetAllocation@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXU?$Allocation@V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@23@@Z @@ -4305,7 +4315,7 @@ ?SubtractSize@?$Storage@PAUCordRep@cord_internal@absl@@$01V?$allocator@PAUCordRep@cord_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXI@Z ?SubtractSize@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXI@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPBXPADH@Z ?TagToAllocatedSize@cord_internal@absl@@YAIE@Z @@ -4460,7 +4470,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@CordRep@cord_internal@absl@@SAXPAU123@@Z ?Unref@CordRepBtree@cord_internal@absl@@SAXV?$Span@QAUCordRep@cord_internal@absl@@@3@@Z ?Unref@CrcCordState@crc_internal@absl@@CAXPAURefcountedRep@123@@Z @@ -5062,6 +5071,7 @@ ?begin@CordRepBtree@cord_internal@absl@@QBEIXZ ?begin@Storage@?$FixedArray@D$0PPPPPPPP@V?$allocator@D@__Cr@std@@@absl@@QBEPADXZ ?begin@__deque_range@?$deque@UPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@UPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@@__Cr@std@@QBE?AU1234@XZ + ?blocked_element_count@CommonFields@container_internal@absl@@QBEIXZ ?btree@CordRep@cord_internal@absl@@QAEPAVCordRepBtree@23@XZ ?btree@CordRep@cord_internal@absl@@QBEPBVCordRepBtree@23@XZ ?btree@CordRepBtreeNavigator@cord_internal@absl@@QBEPAVCordRepBtree@23@XZ @@ -5135,7 +5145,6 @@ ?clear@?$vector@UViableSubstitution@strings_internal@absl@@V?$allocator@UViableSubstitution@strings_internal@absl@@@__Cr@std@@@__Cr@std@@QAEXXZ ?clear@?$vector@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@V?$allocator@V?$unique_ptr@VFlagStateInterface@flags_internal@absl@@U?$default_delete@VFlagStateInterface@flags_internal@absl@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEXXZ ?clear@InlineRep@Cord@absl@@QAEPAUCordRep@cord_internal@3@XZ - ?clear_backing_array@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEX_N@Z ?clear_cordz_info@InlineData@cord_internal@absl@@QAEXXZ ?code@Status@absl@@QBE?AW4StatusCode@2@XZ ?code@StatusRep@status_internal@absl@@QBE?AW4StatusCode@3@XZ @@ -5208,7 +5217,6 @@ ?days_per_century@impl@detail@cctz@time_internal@absl@@YAHH@Z ?days_per_month@impl@detail@cctz@time_internal@absl@@YAH_JC@Z ?days_per_year@impl@detail@cctz@time_internal@absl@@YAH_JC@Z - ?dealloc@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?deallocate@?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@QAEXPAPAPBVImpl@time_zone@cctz@time_internal@absl@@I@Z ?deallocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@23@I@Z ?deallocate@?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@QAEXPAPAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@23@I@Z @@ -5265,15 +5273,12 @@ ?deallocate@?$allocator_traits@V?$allocator@VSourceLocation@absl@@@__Cr@std@@@__Cr@std@@SAXAAV?$allocator@VSourceLocation@absl@@@23@PAVSourceLocation@absl@@I@Z ?decrement_size@?$HashtableInlineDataImpl@$00@container_internal@absl@@QAEXXZ ?decrement_size@CommonFields@container_internal@absl@@QAEXXZ - ?decrement_small_size@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?delimiter@?$Splitter@VByAnyChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByAnyChar@3@XZ ?delimiter@?$Splitter@VByAnyChar@absl@@USkipEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByAnyChar@3@XZ ?delimiter@?$Splitter@VByChar@absl@@UAllowEmpty@2@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@strings_internal@absl@@QBEABVByChar@3@XZ ?description@time_zone@cctz@time_internal@absl@@QBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@@23@@__Cr@std@@AAEXPAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$map@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@23@@__Cr@std@@PAX@23@@Z ?destroy@?$__tree@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@V?$__map_value_compare@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@23@U?$less@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@23@@23@V?$allocator@U?$pair@$$CBV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@@23@@__Cr@std@@AAEXPAV?$__tree_node@U?$__value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$vector@PBVCommandLineFlag@absl@@V?$allocator@PBVCommandLineFlag@absl@@@__Cr@std@@@23@@__Cr@std@@PAX@23@@Z - ?destroy@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXPAT?$map_slot_type@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@23@@Z - ?destroy_slots@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?destructor_impl@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAEXXZ ?difference@detail@cctz@time_internal@absl@@YA_JUday_tag@1234@Ufields@1234@1@Z ?difference@detail@cctz@time_internal@absl@@YA_JUhour_tag@1234@Ufields@1234@1@Z @@ -5374,6 +5379,7 @@ ?front@?$__split_buffer@PAPBVImpl@time_zone@cctz@time_internal@absl@@V?$allocator@PAPBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@78@@__Cr@std@@QAEAAPAPBVImpl@time_zone@cctz@time_internal@absl@@XZ ?front@?$__split_buffer@PAUPrefixCrc@CrcCordState@crc_internal@absl@@V?$allocator@PAUPrefixCrc@CrcCordState@crc_internal@absl@@@__Cr@std@@V__split_buffer_pointer_layout@67@@__Cr@std@@QAEAAPAUPrefixCrc@CrcCordState@crc_internal@absl@@XZ ?front@?$vector@UTransition@cctz@time_internal@absl@@V?$allocator@UTransition@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAUTransition@cctz@time_internal@absl@@XZ + ?full_growth_info_ptr@GrowthInfoAccessor@container_internal@absl@@ABEPAXXZ ?gbswap_16@absl@@YAGG@Z ?gbswap_32@absl@@YAII@Z ?gbswap_64@absl@@YA_K_K@Z @@ -5448,6 +5454,7 @@ ?get@PlacementImpl@?$NoDestructor@VFlagRegistry@flags_internal@absl@@@absl@@QAEPAVFlagRegistry@flags_internal@3@XZ ?get@PlacementImpl@?$NoDestructor@VMutex@absl@@@absl@@QAEPAVMutex@3@XZ ?get_cordz_mean_interval@cord_internal@absl@@YAHXZ + ?get_dealloc_backing_array_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPAXIPAW4ctrl_t@23@II_NI@ZXZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEAAV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QBEABV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@PBUCordRep@cord_internal@absl@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ ?get_deleter@?$unique_ptr@$$BY0A@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@V?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@@__Cr@std@@QAEAAV?$__bucket_list_deallocator@V?$allocator@PAU?$__hash_node_base@PAU?$__hash_node@U?$__hash_value_type@V?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PBVImpl@time_zone@cctz@time_internal@absl@@@__Cr@std@@PAX@__Cr@std@@@__Cr@std@@@__Cr@std@@@23@XZ @@ -5464,14 +5471,13 @@ ?get_deleter@?$unique_ptr@VTimeZoneInfo@cctz@time_internal@absl@@U?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAU?$default_delete@VTimeZoneInfo@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@VTimeZoneLibC@cctz@time_internal@absl@@U?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@__Cr@std@@@__Cr@std@@QAEAAU?$default_delete@VTimeZoneLibC@cctz@time_internal@absl@@@23@XZ ?get_deleter@?$unique_ptr@XUDynValueDeleter@flags_internal@absl@@@__Cr@std@@QAEAAUDynValueDeleter@flags_internal@absl@@XZ + ?get_destroy_slot_fn@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@CAP6AXPAX0@ZXZ ?get_from_arg@InputValue@UnboundConversion@str_format_internal@absl@@QBEHXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QAEPAXXZ ?get_soo_data@HeapOrSoo@container_internal@absl@@QBEPBXXZ ?get_weekday@detail@cctz@time_internal@absl@@YA?AW4weekday@1234@ABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z ?get_yearday@detail@cctz@time_internal@absl@@YAHABV?$civil_time@Usecond_tag@detail@cctz@time_internal@absl@@@1234@@Z - ?growth_info@CommonFields@container_internal@absl@@QAEAAVGrowthInfo@23@XZ - ?growth_info@CommonFields@container_internal@absl@@QBE?AVGrowthInfo@23@XZ - ?growth_left@CommonFields@container_internal@absl@@QBEIXZ + ?growth_info@CommonFields@container_internal@absl@@QBE?AVGrowthInfoAccessor@23@XZ ?has_alt_flag@FormatConversionSpecImpl@str_format_internal@absl@@QBE_NXZ ?has_infoz@?$HashtableInlineDataImpl@$00@container_internal@absl@@QBE_NXZ ?has_infoz@CommonFields@container_internal@absl@@QBE_NXZ @@ -5501,7 +5507,6 @@ ?index@?$__base@$0A@V?$variant@_K_JIH_N@__Cr@std@@V?$variant@_K_JN@23@V?$Span@$$CBD@absl@@V?$variant@IHM@23@@__variant_detail@__Cr@std@@QBEIXZ ?index@?$probe_seq@$0BA@@container_internal@absl@@QBEIXZ ?index@CordRepBtree@cord_internal@absl@@QBEIW4EdgeType@123@@Z - ?infoz@?$raw_hash_set@U?$FlatHashMapPolicy@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVCommandLineFlag@absl@@@container_internal@absl@@$$V@container_internal@absl@@AAE?AVHashtablezInfoHandle@23@XZ ?infoz@CommonFields@container_internal@absl@@QAE?AVHashtablezInfoHandle@23@XZ ?infoz_ptr@CommonFields@container_internal@absl@@QBEPAVHashtablezInfoHandle@23@XZ ?inline_size@InlineData@cord_internal@absl@@QBEIXZ
diff --git a/symbols_x86_rel.def b/symbols_x86_rel.def index 0b67fca..1b2d1d3 100644 --- a/symbols_x86_rel.def +++ b/symbols_x86_rel.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QAP8FlagImpl@flags_internal@1@AEXXZ$$QAPAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPBDPBDQBDPAUUnboundConversion@01@PAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPBDPBDQBDPAUUnboundConversion@01@PAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_N@Z + ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_NI@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z @@ -461,6 +463,7 @@ ?AsciiStrToUpper@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPADPBDI@Z ?AssertHeld@Mutex@absl@@QBEXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@ABEXXZ ?AssertNotHeld@Mutex@absl@@QBEXXZ ?AssertReaderHeld@Mutex@absl@@QBEXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QBEXVFastTypeIdType@3@P6APBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@ABEAAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAXIPAW4ctrl_t@12@II_NI@Z1@Z ?DecodeFrom@ProtoField@log_internal@absl@@QAE_NPAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AAEXXZ ?DestroyCordSlow@Cord@absl@@AAEXXZ + ?DestroySlots@container_internal@absl@@YAXAAVCommonFields@12@IP6AXPAX1@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z + ?DestructSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QBEDI@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQBQAXHPBXP6AXPBDPAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQBQAXHP6AXPBDPAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPAUCordRep@cord_internal@2@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QBEII@Z ?GetHashtablezMaxSamples@container_internal@absl@@YAIXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QAE?AUGraphId@23@PAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AAEXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@NI@__Cr@std@@V?$allocator@U?$pair@NI@__Cr@std@@@23@@__Cr@std@@PAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXABV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXII@Z ?InitRepImpl@StatusBuilder@absl@@CAPAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QAEXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NABVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UBE_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EBE_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NABVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NABVStatus@1@@Z @@ -953,10 +963,12 @@ ?Now@UnscaledCycleClock@base_internal@absl@@CA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@ABEAAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QAEXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -970,7 +982,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAADAAPBDQBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVDuration@1@@Z ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVDuration@1@PAV234@@Z - ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVTime@1@PAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1031,6 +1042,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@ABEXPAX@Z ?ReaderTryLockSlow@Mutex@absl@@AAE_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QAE?AVGrowthInfoLowerBound@23@I@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AAE?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPAPAV123@PAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPAV123@PAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z @@ -1086,6 +1099,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QAE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ?SendToLog@LogMessage@log_internal@absl@@AAEXXZ ?Set@MaskedPointer@flags_internal@absl@@QAEXP6APAXW4FlagOp@23@PBXPAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QAEXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QGAEAAV12@W4StatusCode@2@@Z @@ -1184,7 +1198,7 @@ ?Subcord@Cord@absl@@QBE?AV12@II@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PBV645@I@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPBXPADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QAEXI@Z @@ -1293,7 +1307,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QBEXXZ ?UnrefTree@InlineRep@Cord@absl@@AAEXXZ ?UnsampleSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z
diff --git a/symbols_x86_rel_cxx23.def b/symbols_x86_rel_cxx23.def index 52c21ea..3d5a6fc 100644 --- a/symbols_x86_rel_cxx23.def +++ b/symbols_x86_rel_cxx23.def
@@ -40,6 +40,8 @@ ??$CallOnceImpl@A6AXXZ$$V@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@A6AXXZ@Z ??$CallOnceImpl@P8FlagImpl@flags_internal@absl@@AEXXZPAV123@@base_internal@absl@@YAXPAU?$atomic@I@__Cr@std@@W4SchedulingMode@01@$$QAP8FlagImpl@flags_internal@1@AEXXZ$$QAPAV671@@Z ??$CastAndCallFunction@$$CBU?$atomic@_N@__Cr@std@@@Condition@absl@@CA_NPBV01@@Z + ??$Clear@$00@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z + ??$Clear@$0A@@container_internal@absl@@YAXAAVCommonFields@01@ABUPolicyFunctions@01@P6AXPAX2@Z2@Z ??$ConsumeConversion@$00@str_format_internal@absl@@YAPBDPBDQBDPAUUnboundConversion@01@PAH@Z ??$ConsumeConversion@$0A@@str_format_internal@absl@@YAPBDPBDQBDPAUUnboundConversion@01@PAH@Z ??$ConvertIntArg@C@str_format_internal@absl@@YA_NCVFormatConversionSpecImpl@01@PAVFormatSinkImpl@01@@Z @@ -64,7 +66,7 @@ ??$CopyToEncodedBuffer@$0A@@LogMessage@log_internal@absl@@AAEXV?$basic_string_view@_WU?$char_traits@_W@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$00@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z ??$CopyToEncodedBufferWithStructuredProtoField@$0A@@LogMessage@log_internal@absl@@AAEXUStructuredProtoField@12@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z - ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_N@Z + ??$DeallocateBackingArray@$03V?$allocator@D@__Cr@std@@@container_internal@absl@@YAXPAXIPAW4ctrl_t@01@II_NI@Z ??$Dispatch@C@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z ??$Dispatch@D@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z ??$Dispatch@E@FormatArgImpl@str_format_internal@absl@@CA_NTData@012@VFormatConversionSpecImpl@12@PAX@Z @@ -461,6 +463,7 @@ ?AsciiStrToUpper@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@@Z ?AsciiStrToUpper@ascii_internal@absl@@YAXPADPBDI@Z ?AssertHeld@Mutex@absl@@QBEXXZ + ?AssertNotDebugCapacityImpl@CommonFields@container_internal@absl@@ABEXXZ ?AssertNotHeld@Mutex@absl@@QBEXXZ ?AssertReaderHeld@Mutex@absl@@QBEXXZ ?AssertValidType@FlagImpl@flags_internal@absl@@QBEXVFastTypeIdType@3@P6APBVtype_info@@XZ@Z @@ -549,6 +552,7 @@ ?CurrentThreadIdentityIfPresent@base_internal@absl@@YAPAUThreadIdentity@12@XZ ?CurrentValue@FlagImpl@flags_internal@absl@@EBE?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?DataGuard@FlagImpl@flags_internal@absl@@ABEAAVMutex@3@XZ + ?DeallocBackingArray@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAXIPAW4ctrl_t@12@II_NI@Z1@Z ?DecodeFrom@ProtoField@log_internal@absl@@QAE_NPAV?$Span@$$CBD@3@@Z ?DecodeRustPunycode@debugging_internal@absl@@YAPADUDecodeRustPunycodeOptions@12@@Z ?DecodeWaitCycles@SpinLock@base_internal@absl@@KA_JI@Z @@ -571,6 +575,9 @@ ?Destroy@StatusBuilder@absl@@CAXV?$unique_ptr@URep@StatusBuilder@absl@@U?$default_delete@URep@StatusBuilder@absl@@@__Cr@std@@@__Cr@std@@@Z ?DestroyContents@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@AAEXXZ ?DestroyCordSlow@Cord@absl@@AAEXXZ + ?DestroySlots@container_internal@absl@@YAXAAVCommonFields@12@IP6AXPAX1@Z@Z + ?DestructNonSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z + ?DestructSoo@container_internal@absl@@YAXAAVCommonFields@12@IIP6AXPAX1@ZP6AX1IPAW4ctrl_t@12@II_NI@Z1@Z ?DiagnosticsGetDeleteQueue@CordzHandle@cord_internal@absl@@SA?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsGetSafeToInspectDeletedHandles@CordzHandle@cord_internal@absl@@QAE?AV?$vector@PBVCordzHandle@cord_internal@absl@@V?$allocator@PBVCordzHandle@cord_internal@absl@@@__Cr@std@@@__Cr@std@@XZ ?DiagnosticsHandleIsSafeToInspect@CordzHandle@cord_internal@absl@@QBE_NPBV123@@Z @@ -753,7 +760,7 @@ ?GetCachedTID@base_internal@absl@@YAIXZ ?GetCharacter@CordRepBtree@cord_internal@absl@@QBEDI@Z ?GetCordzStatistics@CordzInfo@cord_internal@absl@@QBE?AUCordzStatistics@23@XZ - ?GetCpuType@crc_internal@absl@@YA?AW4CpuType@12@XZ + ?GetCpuType@base_internal@absl@@YA?AW4CpuType@12@XZ ?GetCurrentTimeNanos@absl@@YA_JXZ ?GetDebugStackTraceHook@debugging_internal@absl@@YAP6AXQBQAXHPBXP6AXPBDPAX@Z3@ZXZ ?GetDebugStackTraceHookLegacy@debugging_internal@absl@@YAP6AXQBQAXHP6AXPBDPAX@Z2@ZXZ @@ -764,6 +771,7 @@ ?GetFlagsHelpMatchSubstr@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@XZ ?GetFlagsHelpMode@flags_internal@absl@@YA?AW4HelpMode@12@XZ ?GetFlatAux@Cord@absl@@CA_NPAUCordRep@cord_internal@2@PAV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@@Z + ?GetGrowthLeftTotalSlow@GrowthInfoAccessor@container_internal@absl@@QBEII@Z ?GetHashtablezMaxSamples@container_internal@absl@@YAIXZ ?GetHashtablezSampleParameter@container_internal@absl@@YAHXZ ?GetId@GraphCycles@synchronization_internal@absl@@QAE?AUGraphId@23@PAX@Z @@ -823,6 +831,7 @@ ?Init@FlagImpl@flags_internal@absl@@AAEXXZ ?InitDiscreteDistribution@random_internal@absl@@YA?AV?$vector@U?$pair@NI@__Cr@std@@V?$allocator@U?$pair@NI@__Cr@std@@@23@@__Cr@std@@PAV?$vector@NV?$allocator@N@__Cr@std@@@45@@Z ?InitFrom@?$Storage@UPayload@status_internal@absl@@$00V?$allocator@UPayload@status_internal@absl@@@__Cr@std@@@inlined_vector_internal@absl@@QAEXABV123@@Z + ?InitGrowthLeftNoDeleted@GrowthInfoAccessor@container_internal@absl@@QAEXII@Z ?InitRepImpl@StatusBuilder@absl@@CAPAURep@12@VStatus@2@@Z ?InitSigSafeArena@base_internal@absl@@YAXXZ ?InitStream@Rep@StatusBuilder@absl@@QAEXXZ @@ -860,6 +869,7 @@ ?IsReachable@GraphCycles@synchronization_internal@absl@@QBE_NUGraphId@23@0@Z ?IsResourceExhausted@absl@@YA_NABVStatus@1@@Z ?IsRetired@CommandLineFlag@absl@@UBE_NXZ + ?IsSMTEnabled@base_internal@absl@@YA_NXZ ?IsSpecifiedOnCommandLine@FlagImpl@flags_internal@absl@@EBE_NXZ ?IsSpecifiedOnCommandLine@PrivateHandleAccessor@flags_internal@absl@@SA_NABVCommandLineFlag@3@@Z ?IsUnauthenticated@absl@@YA_NABVStatus@1@@Z @@ -953,10 +963,12 @@ ?Now@UnscaledCycleClock@base_internal@absl@@CA_JXZ ?Now@absl@@YA?AVTime@1@XZ ?NumCPUs@base_internal@absl@@YAHXZ + ?NumContextsPerCPU@base_internal@absl@@YAHXZ ?NumLeakedFlagValues@flags_internal@absl@@YA_KXZ ?OnVLogVerbosityUpdate@log_internal@absl@@YAXV?$function@$$A6AXXZ@__Cr@std@@@Z ?OneTimeInitThreadIdentity@synchronization_internal@absl@@YAXPAUThreadIdentity@base_internal@2@@Z ?OneWordValue@FlagImpl@flags_internal@absl@@ABEAAU?$atomic@_J@__Cr@std@@XZ + ?OverwriteFullAsEmpty@GrowthInfoAccessor@container_internal@absl@@QAEXXZ ?ParseAbseilFlagsOnly@absl@@YAXHQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@34@@Z ?ParseAbseilFlagsOnlyImpl@flags_internal@absl@@YA?AW4HelpMode@12@HQAPADAAV?$vector@PADV?$allocator@PAD@__Cr@std@@@__Cr@std@@AAV?$vector@UUnrecognizedFlag@absl@@V?$allocator@UUnrecognizedFlag@absl@@@__Cr@std@@@56@W4UsageFlagsAction@12@@Z ?ParseCivilTime@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$civil_time@Uday_tag@time_internal@absl@@@detail@cctz@time_internal@1@@Z @@ -970,7 +982,6 @@ ?ParseDigits@str_format_internal@absl@@YAHAADAAPBDQBD@Z ?ParseDuration@absl@@YA_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAVDuration@1@@Z ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVDuration@1@PAV234@@Z - ?ParseFlag@absl@@YA_NABV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@PAVTime@1@PAV234@@Z ?ParseFrom@CommandLineFlag@absl@@QAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@PAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@45@@Z ?ParseFrom@FlagImpl@flags_internal@absl@@EAE_NV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@56@@Z ?ParseFrom@PrivateHandleAccessor@flags_internal@absl@@SA_NAAVCommandLineFlag@3@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@W4FlagSettingMode@23@W4ValueSource@23@AAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@67@@Z @@ -1031,6 +1042,8 @@ ?ReadSeedMaterialFromOSEntropy@random_internal@absl@@YA_NV?$Span@I@2@@Z ?ReadSequenceLockedData@FlagImpl@flags_internal@absl@@ABEXPAX@Z ?ReaderTryLockSlow@Mutex@absl@@AAE_NXZ + ?RebalanceGrowthLeftLowerBound@GrowthInfoAccessor@container_internal@absl@@QAE?AVGrowthInfoLowerBound@23@I@Z + ?RebalanceGrowthLeftLowerBoundLargeCapacity@GrowthInfoAccessor@container_internal@absl@@AAE?AVGrowthInfoLowerBound@23@XZ ?Rebuild@CordRepBtree@cord_internal@absl@@CAXPAPAV123@PAV123@_N@Z ?Rebuild@CordRepBtree@cord_internal@absl@@SAPAV123@PAV123@@Z ?RecordClearedReservationSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z @@ -1086,6 +1099,7 @@ ?Seek@CordRepBtreeReader@cord_internal@absl@@QAE?AV?$basic_string_view@DU?$char_traits@D@__Cr@std@@@__Cr@std@@I@Z ?SendToLog@LogMessage@log_internal@absl@@AAEXXZ ?Set@MaskedPointer@flags_internal@absl@@QAEXP6APAXW4FlagOp@23@PBXPAX2@Z1_N@Z + ?SetAbslHardeningEnabled@base_internal@absl@@YAX_N@Z ?SetAndroidNativeTag@absl@@YAXPBD@Z ?SetCallback@FlagImpl@flags_internal@absl@@QAEXQ6AXXZ@Z ?SetCode@StatusBuilder@absl@@QGAEAAV12@W4StatusCode@2@@Z @@ -1184,7 +1198,7 @@ ?Subcord@Cord@absl@@QBE?AV12@II@Z ?SubstituteAndAppendArray@substitute_internal@absl@@YAXPAV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@V?$basic_string_view@DU?$char_traits@D@__Cr@std@@@45@PBV645@I@Z ?Summarize@str_format_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VUntypedFormatSpecImpl@12@V?$Span@$$CBVFormatArgImpl@str_format_internal@absl@@@2@@Z - ?SupportsArmCRC32PMULL@crc_internal@absl@@YA_NXZ + ?SupportsArmCRC32PMULL@base_internal@absl@@YA_NXZ ?SuppressSigabortTrace@log_internal@absl@@YA_NXZ ?Symbolize@absl@@YA_NPBXPADH@Z ?TestOnlyAddNodes@GraphCycles@synchronization_internal@absl@@QAEXI@Z @@ -1293,7 +1307,6 @@ ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_K@Z ?Unparse@flags_internal@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@_N@Z ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VDuration@1@@Z - ?UnparseFlag@absl@@YA?AV?$basic_string@DU?$char_traits@D@__Cr@std@@V?$allocator@D@23@@__Cr@std@@VTime@1@@Z ?Unref@StatusRep@status_internal@absl@@QBEXXZ ?UnrefTree@InlineRep@Cord@absl@@AAEXXZ ?UnsampleSlow@container_internal@absl@@YAXPAUHashtablezInfo@12@@Z