template< class F, class I > 
concept indirectly_unary_invocable = 
  std::indirectly_readable<I> && 
  std::copy_constructible<F> && 
  std::invocable<F&, iter_value_t<I>&> && 
  std::invocable<F&, iter_reference_t<I>> && 
  std::invocable<F&, iter_common_reference_t<I>> && 
  std::common_reference_with< 
    std::invoke_result_t<F&, std::iter_value_t<I>&>, 
 
    std::invoke_result_t<F&, std::iter_reference_t<I>>>;  | 
   | 
 (C++20 起)  | 
 template< class F, class I > 
  concept indirectly_regular_unary_invocable = 
    std::indirectly_readable<I> && 
    std::copy_constructible<F> && 
    std::regular_invocable<F&, iter_value_t<I>&> && 
    std::regular_invocable<F&, iter_reference_t<I>> && 
    std::regular_invocable<F&, iter_common_reference_t<I>> && 
    std::common_reference_with< 
      std::invoke_result_t<F&, std::iter_value_t<I>&>, 
 
      std::invoke_result_t<F&, std::iter_reference_t<I>>>;  | 
   | 
 (C++20 起)  | 
 |  |  | 
概念 indirectly_unary_invocable 与 indirectly_regular_unary_invocable 指定调用作为其实参的(正则)一元可调用对象的算法的要求。这些概念与 std::invocable 间的关键差异是它们应用到 I 所引用的类型,而非 I 自身。
语义要求
每个概念为 F 与 I 所实现,仅若其所蕴含的所有概念均得到实现。
注解
indirectly_unary_invocable 与 indirectly_regular_unary_invocable 间的区别是纯语义的。