名前空間
変種
操作

std::indirect_result_t

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
indirect_result_t
(C++20)
(C++20)
イテレータアダプタ
Rangeアクセス
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
ヘッダ <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は、indirectly_readableな型Is...の逆参照の結果に、invocableな型Fを呼び出したときの結果型を取得します。

[編集] テンプレートパラメータ

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)
呼び出し可能オブジェクトを引数のセットで呼び出した結果の型を推論する
(クラステンプレート) [編集]
射影によって indirectly_readable 型の値型を計算する
(エイリアステンプレート)[編集]
English 日本語 中文(简体) 中文(繁體)