Namespaces
Variants
Actions

std::indirect_result_t

From cppreference.com
< cpp‎ | iterator
 
 
Iterator library
indirect_result_t
(C++20)
(C++20)
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
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....

[edit] Template parameters

F - an invocable type
Is - indirectly readable types that are dereferenced to arguments

[edit] 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() {}

[edit] 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) [edit]
computes the value type of an indirectly_readable type by projection
(alias template)[edit]
Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/iterator/indirect_result_t&oldid=175441"

AltStyle によって変換されたページ (->オリジナル) /