std::indirect_result_t
From cppreference.com
| Defined in header <iterator>
|
||
template< class F, class... Is > requires (std::indirectly_readable<Is> && ...) && std::invocable<F, std::iter_reference_t<Is>...> using indirect_result_t = std::invoke_result_t<F, std::iter_reference_t<Is>...>; |
(since C++20) | |
The alias template indirect_result_t obtains the result type of invoking an invocable type F on the result of dereferencing indirectly_readable types Is....
Template parameters
| F | - | an invocable type |
| Is | - | indirectly readable types that are dereferenced to arguments |
Example
Run this code
#include <iterator>
#include <type_traits>
struct Fn
{
long operator()(const int&);
int operator()(int&&);
short operator()(int, int) const;
auto operator()(const float) -> int&;
void operator()(int[8]);
};
static_assert(
std::is_same_v<std::indirect_result_t<Fn, const int*>, long> and
std::is_same_v<std::indirect_result_t<Fn, std::move_iterator<int*>>, int> and
std::is_same_v<std::indirect_result_t<const Fn, int*, int*>, short> and
std::is_same_v<std::indirect_result_t<Fn, float*>, int&> and
std::is_same_v<std::indirect_result_t<Fn, int**>, void>
);
int main() {}
See also
(C++11)(removed in C++20)(C++17) |
deduces the result type of invoking a callable object with a set of arguments (class template) |
(C++26) |
computes the value type of an indirectly_readable type by projection(alias template) |