最終更新日時(UTC):
が更新

履歴 編集

type-alias
<iterator>

std::indirect_result_t(C++20)

namespace std {
  template<class F, class... Is>
    requires (indirectly_readable<Is> && ...) &&
             invocable<F, iter_reference_t<Is>...>
  using indirect_result_t = invoke_result_t<F, iter_reference_t<Is>...>;
}

概要

関数呼び出し可能な型Fに間接参照可能な型(主にイテレータ型)Is...の指す要素を渡して呼び出した時の戻り値型を取得する。

#include <iterator>
#include <vector>
#include <string>

int main() {  
  using vec_iterator = std::vector<int>::iterator;
  using pointer = double*;

  using lambda1 = decltype([](int) -> std::size_t { return 0;});
  using lambda2 = decltype([](double) -> int { return 0;});
  using lambda3 = decltype([](int, int, double, double) -> std::string { return "";});

  static_assert(std::same_as<std::indirect_result_t<lambda1, vec_iterator>, std::size_t>);
  static_assert(std::same_as<std::indirect_result_t<lambda2, pointer>     , int>);
  static_assert(std::same_as<std::indirect_result_t<lambda3, vec_iterator, const vec_iterator, pointer, const pointer>, std::string>);
}

出力

バージョン

言語

  • C++20

処理系

参照