From 116231387eec9d71e9bf292886f6b51a5f78b867 Mon Sep 17 00:00:00 2001 From: Ryan Prichard Date: Sat, 6 Apr 2024 01:29:14 -0700 Subject: Remove use of std::iterator and std::result_of std::iterator was deprecated in C++17. std::result_of was removed in C++20. Bug: 333165689 Test: art_standalone_libartbase_tests Change-Id: Id60f82a0368062416663a20d0b8e9a109fdac9cc --- libartbase/base/transform_array_ref.h | 21 +++++++++------------ libartbase/base/transform_iterator.h | 2 +- runtime/native/dalvik_system_VMStack.cc | 6 ++---- 3 files changed, 12 insertions(+), 17 deletions(-) diff --git a/libartbase/base/transform_array_ref.h b/libartbase/base/transform_array_ref.h index 9413b220db..6005596df8 100644 --- a/libartbase/base/transform_array_ref.h +++ b/libartbase/base/transform_array_ref.h @@ -33,15 +33,14 @@ class TransformArrayRef { using Iter = TransformIterator::iterator, Function>; // The Function may take a non-const reference, so const_iterator may not exist. - using FallbackConstIter = std::iterator; + struct FallbackConstIter { + using pointer = void; + using reference = void; + }; using PreferredConstIter = TransformIterator::const_iterator, Function>; - template > - static PreferredConstIter ConstIterHelper(int&); - template - static FallbackConstIter ConstIterHelper(const int&); - - using ConstIter = decltype(ConstIterHelper(*reinterpret_cast(0))); + static constexpr bool kHasConstIter = std::is_invocable_v; + using ConstIter = std::conditional_t; public: using value_type = typename Iter::value_type; @@ -50,12 +49,10 @@ class TransformArrayRef { using pointer = typename Iter::pointer; using const_pointer = typename ConstIter::pointer; using iterator = Iter; - using const_iterator = - std::conditional_t, void, ConstIter>; + using const_iterator = std::conditional_t; using reverse_iterator = std::reverse_iterator; - using const_reverse_iterator = std::conditional_t, - void, - std::reverse_iterator>; + using const_reverse_iterator = + std::conditional_t, void>; using difference_type = typename ArrayRef::difference_type; using size_type = typename ArrayRef::size_type; diff --git a/libartbase/base/transform_iterator.h b/libartbase/base/transform_iterator.h index 3f7c952b60..3da76f678e 100644 --- a/libartbase/base/transform_iterator.h +++ b/libartbase/base/transform_iterator.h @@ -47,7 +47,7 @@ class TransformIterator { using InputType = std::conditional_t, typename std::iterator_traits::value_type, BaseReference>; - using ResultType = std::result_of_t; + using ResultType = std::invoke_result_t; public: using iterator_category = typename std::iterator_traits::iterator_category; diff --git a/runtime/native/dalvik_system_VMStack.cc b/runtime/native/dalvik_system_VMStack.cc index 599bdb9e4b..366059bd17 100644 --- a/runtime/native/dalvik_system_VMStack.cc +++ b/runtime/native/dalvik_system_VMStack.cc @@ -36,10 +36,8 @@ namespace art HIDDEN { template ::type> -static ResultT GetThreadStack(const ScopedFastNativeObjectAccess& soa, - jobject peer, - T fn) + typename std::invoke_result_t> +static ResultT GetThreadStack(const ScopedFastNativeObjectAccess& soa, jobject peer, T fn) REQUIRES_SHARED(Locks::mutator_lock_) { ResultT trace = nullptr; ObjPtr decoded_peer = soa.Decode(peer); -- cgit v1.2.3-59-g8ed1b