table of contents
std::indirect_result_t(3) | C++ Standard Libary | std::indirect_result_t(3) |
NAME¶
std::indirect_result_t - std::indirect_result_t
Synopsis¶
Defined in header <iterator>
template< class F, class... Is >
requires (std::indirectly_readable<Is> && ...) &&
std::invocable<F, std::iter_reference_t<Is>...> (since
C++20)
using indirect_result_t = std::invoke_result_t<F,
std::iter_reference_t<Is>...>;
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¶
result_of deduces the result type of invoking a callable object
with
invoke_result a set of arguments
(C++11)(removed in C++20) (class template)
(C++17)
2024.06.10 | http://cppreference.com |