std::indirect_unary_invocable, std::indirectly_regular_unary_invocable

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
迭代器原语
算法概念与工具
间接可调用概念
indirectly_unary_invocableindirectly_regular_unary_invocable
(C++20)(C++20)
常用算法要求
工具
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
在标头 <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_invocableindirectly_regular_unary_invocable 指定调用作为其实参的(正则)一元可调用对象的算法的要求。这些概念与 std::invocable 间的关键差异是它们应用到 I 所引用的类型,而非 I 自身。

语义要求

每个概念为 FI 所实现,仅若其所蕴含的所有概念均得到实现。

注解

indirectly_unary_invocableindirectly_regular_unary_invocable 间的区别是纯语义的。