Spec-Zone.ru › C++

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

См. также

result_ofinvoke_result
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API