diff --git a/gdbsupport/function-view.h b/gdbsupport/function-view.h index 9f8a8680cf4..cc2cdc347da 100644 --- a/gdbsupport/function-view.h +++ b/gdbsupport/function-view.h @@ -192,6 +192,7 @@ You can find unit tests covering the whole API in unittests/function-view-selftests.c. */ +#include "invoke-result.h" namespace gdb { namespace fv_detail { @@ -229,7 +230,7 @@ class function_view /* True if Func can be called with Args, and either the result is Res, convertible to Res or Res is void. */ template::type> + typename Res2 = typename gdb::invoke_result::type> struct IsCompatibleCallable : CompatibleReturnType {}; diff --git a/gdbsupport/invoke-result.h b/gdbsupport/invoke-result.h new file mode 100644 index 00000000000..5d5ffa0657c --- /dev/null +++ b/gdbsupport/invoke-result.h @@ -0,0 +1,37 @@ +/* Compatibility wrapper around std::result_of and std::invoke_result. + + Copyright (C) 2022 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 . */ + +#ifndef GDBSUPPORT_INVOKE_RESULT_H +#define GDBSUPPORT_INVOKE_RESULT_H + +#include + +namespace gdb +{ +#if __cplusplus >= 201703L +template +using invoke_result = std::invoke_result; +#else +template +using invoke_result = std::result_of; +#endif + +} /* namespace gdb */ + +#endif /* GDBSUPPORT_INVOKE_RESULT_H */ diff --git a/gdbsupport/parallel-for.h b/gdbsupport/parallel-for.h index 4cd1dbf847e..acd9137efbd 100644 --- a/gdbsupport/parallel-for.h +++ b/gdbsupport/parallel-for.h @@ -22,6 +22,7 @@ #include #include +#include "gdbsupport/invoke-result.h" #include "gdbsupport/thread-pool.h" #include "gdbsupport/function-view.h" @@ -132,14 +133,14 @@ private: template typename gdb::detail::par_for_accumulator< - typename std::result_of::type + typename gdb::invoke_result::type >::result_type parallel_for_each (unsigned n, RandomIt first, RandomIt last, RangeFunction callback, gdb::function_view task_size = nullptr) { using result_type - = typename std::result_of::type; + = typename gdb::invoke_result::type; /* If enabled, print debug info about how the work is distributed across the threads. */ @@ -276,14 +277,13 @@ parallel_for_each (unsigned n, RandomIt first, RandomIt last, template typename gdb::detail::par_for_accumulator< - typename std::result_of::type + typename gdb::invoke_result::type >::result_type sequential_for_each (unsigned n, RandomIt first, RandomIt last, RangeFunction callback, gdb::function_view task_size = nullptr) { - using result_type - = typename std::result_of::type; + using result_type = typename gdb::invoke_result::type; gdb::detail::par_for_accumulator results (0);