forked from Imagelibrary/binutils-gdb
gdbsupport: Replace gdb::invoke_result with std::invoke_result
Given that GDB now requires C++17, we can replace gdb::invoke_result with std::invoke_result which is provided by <type_traits>. This patch also removes gdbsupport/invoke-result.h as it is not used anymore. Change-Id: I7e567356d38d6b3d85d8797d61cfc83f6f933f22
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
#ifndef COMMON_FILTERED_ITERATOR_H
|
#ifndef COMMON_FILTERED_ITERATOR_H
|
||||||
#define COMMON_FILTERED_ITERATOR_H
|
#define COMMON_FILTERED_ITERATOR_H
|
||||||
|
|
||||||
#include "gdbsupport/invoke-result.h"
|
#include <type_traits>
|
||||||
|
|
||||||
/* A filtered iterator. This wraps BaseIterator and automatically
|
/* A filtered iterator. This wraps BaseIterator and automatically
|
||||||
skips elements that FilterFunc filters out. Requires that
|
skips elements that FilterFunc filters out. Requires that
|
||||||
@@ -56,7 +56,7 @@ public:
|
|||||||
: filtered_iterator (static_cast<const filtered_iterator &> (other))
|
: filtered_iterator (static_cast<const filtered_iterator &> (other))
|
||||||
{}
|
{}
|
||||||
|
|
||||||
typename gdb::invoke_result<decltype(&BaseIterator::operator*),
|
typename std::invoke_result<decltype(&BaseIterator::operator*),
|
||||||
BaseIterator>::type
|
BaseIterator>::type
|
||||||
operator* () const
|
operator* () const
|
||||||
{ return *m_it; }
|
{ return *m_it; }
|
||||||
|
|||||||
@@ -192,7 +192,7 @@
|
|||||||
You can find unit tests covering the whole API in
|
You can find unit tests covering the whole API in
|
||||||
unittests/function-view-selftests.c. */
|
unittests/function-view-selftests.c. */
|
||||||
|
|
||||||
#include "invoke-result.h"
|
#include <type_traits>
|
||||||
namespace gdb {
|
namespace gdb {
|
||||||
|
|
||||||
namespace fv_detail {
|
namespace fv_detail {
|
||||||
@@ -230,7 +230,7 @@ class function_view<Res (Args...)>
|
|||||||
/* True if Func can be called with Args, and either the result is
|
/* True if Func can be called with Args, and either the result is
|
||||||
Res, convertible to Res or Res is void. */
|
Res, convertible to Res or Res is void. */
|
||||||
template<typename Callable,
|
template<typename Callable,
|
||||||
typename Res2 = typename gdb::invoke_result<Callable &, Args...>::type>
|
typename Res2 = typename std::invoke_result<Callable &, Args...>::type>
|
||||||
struct IsCompatibleCallable : CompatibleReturnType<Res2, Res>
|
struct IsCompatibleCallable : CompatibleReturnType<Res2, Res>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
/* Compatibility wrapper around std::result_of and std::invoke_result.
|
|
||||||
|
|
||||||
Copyright (C) 2022-2023 Free Software Foundation, Inc.
|
|
||||||
|
|
||||||
This file is part of GDB.
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or modify
|
|
||||||
it under the terms of the GNU General Public License as published by
|
|
||||||
the Free Software Foundation; either version 3 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
|
||||||
|
|
||||||
#ifndef GDBSUPPORT_INVOKE_RESULT_H
|
|
||||||
#define GDBSUPPORT_INVOKE_RESULT_H
|
|
||||||
|
|
||||||
#include <type_traits>
|
|
||||||
|
|
||||||
namespace gdb
|
|
||||||
{
|
|
||||||
#if __cplusplus >= 201703L
|
|
||||||
template<typename Callable, class... Args>
|
|
||||||
using invoke_result = std::invoke_result<Callable, Args...>;
|
|
||||||
#else
|
|
||||||
template<typename Callable, typename... Args>
|
|
||||||
using invoke_result = std::result_of<Callable (Args...)>;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
} /* namespace gdb */
|
|
||||||
|
|
||||||
#endif /* GDBSUPPORT_INVOKE_RESULT_H */
|
|
||||||
@@ -22,7 +22,6 @@
|
|||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <type_traits>
|
#include <type_traits>
|
||||||
#include "gdbsupport/invoke-result.h"
|
|
||||||
#include "gdbsupport/thread-pool.h"
|
#include "gdbsupport/thread-pool.h"
|
||||||
#include "gdbsupport/function-view.h"
|
#include "gdbsupport/function-view.h"
|
||||||
|
|
||||||
@@ -145,14 +144,14 @@ private:
|
|||||||
|
|
||||||
template<class RandomIt, class RangeFunction>
|
template<class RandomIt, class RangeFunction>
|
||||||
typename gdb::detail::par_for_accumulator<
|
typename gdb::detail::par_for_accumulator<
|
||||||
typename gdb::invoke_result<RangeFunction, RandomIt, RandomIt>::type
|
typename std::invoke_result<RangeFunction, RandomIt, RandomIt>::type
|
||||||
>::result_type
|
>::result_type
|
||||||
parallel_for_each (unsigned n, RandomIt first, RandomIt last,
|
parallel_for_each (unsigned n, RandomIt first, RandomIt last,
|
||||||
RangeFunction callback,
|
RangeFunction callback,
|
||||||
gdb::function_view<size_t(RandomIt)> task_size = nullptr)
|
gdb::function_view<size_t(RandomIt)> task_size = nullptr)
|
||||||
{
|
{
|
||||||
using result_type
|
using result_type
|
||||||
= typename gdb::invoke_result<RangeFunction, RandomIt, RandomIt>::type;
|
= typename std::invoke_result<RangeFunction, RandomIt, RandomIt>::type;
|
||||||
|
|
||||||
/* If enabled, print debug info about how the work is distributed across
|
/* If enabled, print debug info about how the work is distributed across
|
||||||
the threads. */
|
the threads. */
|
||||||
@@ -305,13 +304,13 @@ parallel_for_each (unsigned n, RandomIt first, RandomIt last,
|
|||||||
|
|
||||||
template<class RandomIt, class RangeFunction>
|
template<class RandomIt, class RangeFunction>
|
||||||
typename gdb::detail::par_for_accumulator<
|
typename gdb::detail::par_for_accumulator<
|
||||||
typename gdb::invoke_result<RangeFunction, RandomIt, RandomIt>::type
|
typename std::invoke_result<RangeFunction, RandomIt, RandomIt>::type
|
||||||
>::result_type
|
>::result_type
|
||||||
sequential_for_each (unsigned n, RandomIt first, RandomIt last,
|
sequential_for_each (unsigned n, RandomIt first, RandomIt last,
|
||||||
RangeFunction callback,
|
RangeFunction callback,
|
||||||
gdb::function_view<size_t(RandomIt)> task_size = nullptr)
|
gdb::function_view<size_t(RandomIt)> task_size = nullptr)
|
||||||
{
|
{
|
||||||
using result_type = typename gdb::invoke_result<RangeFunction, RandomIt, RandomIt>::type;
|
using result_type = typename std::invoke_result<RangeFunction, RandomIt, RandomIt>::type;
|
||||||
|
|
||||||
gdb::detail::par_for_accumulator<result_type> results (0);
|
gdb::detail::par_for_accumulator<result_type> results (0);
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
#ifndef COMMON_SAFE_ITERATOR_H
|
#ifndef COMMON_SAFE_ITERATOR_H
|
||||||
#define COMMON_SAFE_ITERATOR_H
|
#define COMMON_SAFE_ITERATOR_H
|
||||||
|
|
||||||
#include "gdbsupport/invoke-result.h"
|
#include <type_traits>
|
||||||
|
|
||||||
/* A forward iterator that wraps Iterator, such that when iterating
|
/* A forward iterator that wraps Iterator, such that when iterating
|
||||||
with iterator IT, it is possible to delete *IT without invalidating
|
with iterator IT, it is possible to delete *IT without invalidating
|
||||||
@@ -77,7 +77,7 @@ public:
|
|||||||
basic_safe_iterator ()
|
basic_safe_iterator ()
|
||||||
{}
|
{}
|
||||||
|
|
||||||
typename gdb::invoke_result<decltype(&Iterator::operator*), Iterator>::type
|
typename std::invoke_result<decltype(&Iterator::operator*), Iterator>::type
|
||||||
operator* () const
|
operator* () const
|
||||||
{ return *m_it; }
|
{ return *m_it; }
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user