Namensräume
Varianten
Aktionen

std::indirectly_readable

Von cppreference.com
< cpp‎ | iterator
 
 
Iterator-Bibliothek
Iterator-Konzepte
indirectly_readable
(C++20)
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
Definiert in Header <iterator>
template< class In >

    concept __IndirectlyReadableImpl =
        requires(const In in) {
            typename std::iter_value_t<In>;
            typename std::iter_reference_t<In>;
            typename std::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>&&, const std::iter_value_t<In>&

        >;
(nur Exposition*)
template< class In >

    concept indirectly_readable =

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

Das Konzept indirectly_readable wird von Typen modelliert, die durch Anwendung von operator* lesbar sind, wie z.B. Zeiger, intelligente Zeiger und Eingabe-Iteratoren.

[edit] Semantische Anforderungen

Gegeben sei ein Wert i vom Typ I. I modelliert indirectly_readable nur dann, wenn alle von ihm umfassten Konzepte modelliert sind und der Ausdruck *i gleichheitserhaltend ist.

[bearbeiten] Gleichheitserhaltung

Ausdrücke, die in requires-Ausdrücken der Standardbibliothekskonzepte deklariert sind, müssen gleichheitserhaltend sein (sofern nicht anders angegeben).