diff options
author | 2024-04-06 01:29:14 -0700 | |
---|---|---|
committer | 2024-04-08 20:03:33 +0000 | |
commit | 116231387eec9d71e9bf292886f6b51a5f78b867 (patch) | |
tree | 63128fe114136d07657264f7a05abf6856e4d50a | |
parent | 68e9af2dd02a63d0b4f0bebabc4d76c91e2d84e0 (diff) |
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
-rw-r--r-- | libartbase/base/transform_array_ref.h | 21 | ||||
-rw-r--r-- | libartbase/base/transform_iterator.h | 2 | ||||
-rw-r--r-- | 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<typename ArrayRef<BaseType>::iterator, Function>; // The Function may take a non-const reference, so const_iterator may not exist. - using FallbackConstIter = std::iterator<std::random_access_iterator_tag, void, void, void, void>; + struct FallbackConstIter { + using pointer = void; + using reference = void; + }; using PreferredConstIter = TransformIterator<typename ArrayRef<BaseType>::const_iterator, Function>; - template <typename F, typename = std::result_of_t<F(const BaseType&)>> - static PreferredConstIter ConstIterHelper(int&); - template <typename F> - static FallbackConstIter ConstIterHelper(const int&); - - using ConstIter = decltype(ConstIterHelper<Function>(*reinterpret_cast<int*>(0))); + static constexpr bool kHasConstIter = std::is_invocable_v<Function, const BaseType&>; + using ConstIter = std::conditional_t<kHasConstIter, PreferredConstIter, FallbackConstIter>; 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<std::is_same_v<ConstIter, FallbackConstIter>, void, ConstIter>; + using const_iterator = std::conditional_t<kHasConstIter, ConstIter, void>; using reverse_iterator = std::reverse_iterator<Iter>; - using const_reverse_iterator = std::conditional_t<std::is_same_v<ConstIter, FallbackConstIter>, - void, - std::reverse_iterator<ConstIter>>; + using const_reverse_iterator = + std::conditional_t<kHasConstIter, std::reverse_iterator<ConstIter>, void>; using difference_type = typename ArrayRef<BaseType>::difference_type; using size_type = typename ArrayRef<BaseType>::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<std::is_same_v<BaseReference, void>, typename std::iterator_traits<BaseIterator>::value_type, BaseReference>; - using ResultType = std::result_of_t<Function(InputType)>; + using ResultType = std::invoke_result_t<Function, InputType>; public: using iterator_category = typename std::iterator_traits<BaseIterator>::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 <typename T, typename ResultT = - typename std::result_of<T(Thread*, const ScopedFastNativeObjectAccess&)>::type> -static ResultT GetThreadStack(const ScopedFastNativeObjectAccess& soa, - jobject peer, - T fn) + typename std::invoke_result_t<T, Thread*, const ScopedFastNativeObjectAccess&>> +static ResultT GetThreadStack(const ScopedFastNativeObjectAccess& soa, jobject peer, T fn) REQUIRES_SHARED(Locks::mutator_lock_) { ResultT trace = nullptr; ObjPtr<mirror::Object> decoded_peer = soa.Decode<mirror::Object>(peer); |