summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ryan Prichard <rprichard@google.com> 2024-04-06 01:29:14 -0700
committer Ryan Prichard <rprichard@google.com> 2024-04-08 20:03:33 +0000
commit116231387eec9d71e9bf292886f6b51a5f78b867 (patch)
tree63128fe114136d07657264f7a05abf6856e4d50a
parent68e9af2dd02a63d0b4f0bebabc4d76c91e2d84e0 (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.h21
-rw-r--r--libartbase/base/transform_iterator.h2
-rw-r--r--runtime/native/dalvik_system_VMStack.cc6
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);