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 间的区别是纯语义的。