Namespaces
Variants
Actions

std::indirectly_readable

From cppreference.com
< cpp‎ | iterator
 
 
Iterator library
Iterator concepts
indirectly_readable
(C++20)
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Defined in header <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>&

        >;
(exposition only*)
template<class In >

    concept indirectly_readable =

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

The concept indirectly_readable is modeled by types that are readable by applying operator*, such as pointers, smart pointers, and input iterators.

[edit]Semantic requirements

Given a value i of type I, I models indirectly_readable only if all concepts it subsumes are modeled and the expression *i is equality-preserving.

[edit]Equality preservation

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise).

close