std::indirect_result_t
Определено в заголовке <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>...>;
| (с C++20) |
Шаблон-псевдоним indirect_result_t получает тип результата вызова типа invocable F по результату приведения indirectly_readable типов Is....
Параметры шаблона
| F | - | вызываемый тип |
| Is | - | типы, допускающие косвенное чтение, которые приводятся к аргументам |
Пример
#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() {}См. также
|
(C++11)(удалено в C++20)(C++17) | вычисляет тип результата вызова вызываемого объекта с набором аргументов (шаблон класса) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/indirect_result_t