# std::indirect_unary_invocable, std::indirectly_regular_unary_invocable

< cpp‎ | iterator

定义于头文件 `<iterator>` |  |
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` 间的区别是纯语义的。