Remove more lingering C++17 type traits polyfill usages This will let us deprecate the declarations without triggering warnings in Abseil itself. PiperOrigin-RevId: 895480358 Change-Id: I2e15877c15ed83f48ddb68cc73344c14b533bc68
diff --git a/absl/algorithm/container.h b/absl/algorithm/container.h index 1b4ac92..3636f8e 100644 --- a/absl/algorithm/container.h +++ b/absl/algorithm/container.h
@@ -197,8 +197,8 @@ // 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 decay_t<Function> c_for_each(C&& c, - Function&& f) { +ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 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)); @@ -1761,7 +1761,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 decay_t<T> c_accumulate( +ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 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), @@ -1771,7 +1771,7 @@ // 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 decay_t<T> c_accumulate( +ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 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), @@ -1788,7 +1788,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 Sequence1, typename Sequence2, typename T> -ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 decay_t<T> c_inner_product( +ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 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), @@ -1801,7 +1801,7 @@ // 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 decay_t<T> c_inner_product( +ABSL_INTERNAL_CONSTEXPR_SINCE_CXX20 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),
diff --git a/absl/container/flat_hash_map.h b/absl/container/flat_hash_map.h index 1677f6a..e6cea2e 100644 --- a/absl/container/flat_hash_map.h +++ b/absl/container/flat_hash_map.h
@@ -614,22 +614,22 @@ // Erasure and/or insertion of elements in the function is not allowed. template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(const flat_hash_map<K, V, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(const flat_hash_map<K, V, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>&& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(flat_hash_map<K, V, H, E, A>&& c, + Function&& f) { container_internal::ForEach(f, &c); return f; }
diff --git a/absl/container/flat_hash_set.h b/absl/container/flat_hash_set.h index f802057..44af56a 100644 --- a/absl/container/flat_hash_set.h +++ b/absl/container/flat_hash_set.h
@@ -517,18 +517,20 @@ // There is no guarantees on the order of the function calls. // Erasure and/or insertion of elements in the function is not allowed. template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(const flat_hash_set<T, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(const flat_hash_set<T, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>& c, Function&& f) { +std::decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>&& c, Function&& f) { +std::decay_t<Function> c_for_each_fast(flat_hash_set<T, H, E, A>&& c, + Function&& f) { container_internal::ForEach(f, &c); return f; }
diff --git a/absl/container/node_hash_map.h b/absl/container/node_hash_map.h index 3ceef32..6fe1d9f 100644 --- a/absl/container/node_hash_map.h +++ b/absl/container/node_hash_map.h
@@ -604,22 +604,22 @@ // Erasure and/or insertion of elements in the function is not allowed. template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(const node_hash_map<K, V, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename K, typename V, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(node_hash_map<K, V, H, E, A>&& c, + Function&& f) { container_internal::ForEach(f, &c); return f; }
diff --git a/absl/container/node_hash_set.h b/absl/container/node_hash_set.h index 17aa763..4d58098 100644 --- a/absl/container/node_hash_set.h +++ b/absl/container/node_hash_set.h
@@ -512,18 +512,20 @@ // There is no guarantees on the order of the function calls. // Erasure and/or insertion of elements in the function is not allowed. template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c, - Function&& f) { +std::decay_t<Function> c_for_each_fast(const node_hash_set<T, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c, Function&& f) { +std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>& c, + Function&& f) { container_internal::ForEach(f, &c); return f; } template <typename T, typename H, typename E, typename A, typename Function> -decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c, Function&& f) { +std::decay_t<Function> c_for_each_fast(node_hash_set<T, H, E, A>&& c, + Function&& f) { container_internal::ForEach(f, &c); return f; }
diff --git a/absl/functional/internal/front_binder.h b/absl/functional/internal/front_binder.h index e06aaba..28a15ce 100644 --- a/absl/functional/internal/front_binder.h +++ b/absl/functional/internal/front_binder.h
@@ -84,7 +84,7 @@ }; template <class F, class... BoundArgs> -using bind_front_t = FrontBinder<decay_t<F>, std::decay_t<BoundArgs>...>; +using bind_front_t = FrontBinder<std::decay_t<F>, std::decay_t<BoundArgs>...>; } // namespace functional_internal ABSL_NAMESPACE_END
diff --git a/absl/hash/hash_testing.h b/absl/hash/hash_testing.h index 509df07..3740ba9 100644 --- a/absl/hash/hash_testing.h +++ b/absl/hash/hash_testing.h
@@ -281,7 +281,7 @@ template <typename... T> struct TypeSet { - template <typename U, bool = disjunction<std::is_same<T, U>...>::value> + template <typename U, bool = std::disjunction<std::is_same<T, U>...>::value> struct Insert { using type = TypeSet<U, T...>; };
diff --git a/absl/hash/internal/hash.h b/absl/hash/internal/hash.h index 620fd22..ae3d9a2 100644 --- a/absl/hash/internal/hash.h +++ b/absl/hash/internal/hash.h
@@ -919,7 +919,7 @@ // AbslHashValue for hashing std::variant template <typename H, typename... T> -typename std::enable_if<conjunction<is_hashable<T>...>::value, H>::type +typename std::enable_if<std::conjunction<is_hashable<T>...>::value, H>::type 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); @@ -1370,8 +1370,8 @@ class ABSL_DLL MixingHashState : public HashStateBase<MixingHashState> { template <typename T> using IntegralFastPath = - conjunction<std::is_integral<T>, is_uniquely_represented<T>, - FitsIn64Bits<T>>; + std::conjunction<std::is_integral<T>, is_uniquely_represented<T>, + FitsIn64Bits<T>>; public: // Move only
diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h index 884c8a7..0fd3d99 100644 --- a/absl/strings/internal/str_format/arg.h +++ b/absl/strings/internal/str_format/arg.h
@@ -345,7 +345,7 @@ // This function needs to be a template due to ambiguity regarding type // conversions. -template <typename T, enable_if_t<std::is_same<T, bool>::value, int> = 0> +template <typename T, std::enable_if_t<std::is_same<T, bool>::value, int> = 0> IntegralConvertResult FormatConvertImpl(T v, FormatConversionSpecImpl conv, FormatSinkImpl* sink) { if (conv.conversion_char() == FormatConversionCharInternal::v) {