std::indirectly_readable

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
indirectly_readable
(C++20)
迭代器原语
算法概念与工具
间接可调用概念
常用算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器适配器
范围访问
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
在标头 <iterator> 定义
template<class In >

    concept __IndirectlyReadableImpl =
        requires(const In in){
            typenamestd::iter_value_t<In>;
            typenamestd::iter_reference_t<In>;
            typenamestd::iter_rvalue_reference_t<In>;
            {*in }->std::same_as<std::iter_reference_t<In>>;
            {ranges::iter_move(in)}->std::same_as<std::iter_rvalue_reference_t<In>>;
        }&&
        std::common_reference_with<
            std::iter_reference_t<In>&&, std::iter_value_t<In>&
        >&&
        std::common_reference_with<
            std::iter_reference_t<In>&&, std::iter_rvalue_reference_t<In>&&
        >&&
        std::common_reference_with<
            std::iter_rvalue_reference_t<In>&&, conststd::iter_value_t<In>&

        >;
(仅用于阐述*)
template<class In >

    concept indirectly_readable =

        __IndirectlyReadableImpl<std::remove_cvref_t<In>>;
(C++20 起)

概念 indirectly_readable 由通过应用 operator* 可读的类型实现,例如指针、智能指针及输入迭代器。

[编辑]语义要求

给定 I 类型的值 i,仅若被蕴含的所有概念均得到实现且表达式 *i 保持相等性,I 才实现 indirectly_readable

[编辑]相等性保持

标准库概念的 requires 表达式中声明的表达式都要求保持相等性(除非另外说明)。

close