std::indirectly_readable(3)

๐Ÿ“ฆ
version 2024.07.05 ยท 3 versions
, in nixpkgs unstable, opensuse-leap 16.0

๐ŸŽ€ NAME ๐ŸŽ€

std::indirectly_readable โ€” okay bestie, this is literally the page for std::indirectly_readable(3), from the C++ Standard Libary manual (yes, thatโ€™s how the header spells it, and weโ€™re moving on ๐Ÿ’…). The name is the same as the thing, which is honestly iconic.

โœจ Synopsis โœจ

Defined 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>>;
    } &&
    (exposition only*)
    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>&
    >;

template< class In >
concept indirectly_readable =
    __IndirectlyReadableImpl<std::remove_cvref_t<In>>;

Plot twist: indirectly_readable is (since C++20) โ€” sheโ€™s a modern girlie โœจ

The concept indirectly_readable is modeled by types that are readable by applying operator*, such as pointers, smart pointers, and input iterators. Itโ€™s giving โ€œdereference and readโ€ energy, no cap.

๐Ÿฆ‹ 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. Thatโ€™s the whole vibe check, fr fr.

๐ŸŒธ Equality preservation ๐ŸŒธ

Expressions declared in requires expressions of the standard library concepts are required to be equality-preserving (except where stated otherwise). Important little rule, bestie โ€” donโ€™t skip it.


Source/version and date, cute sign-off: this page came from http://cppreference.com, dated 2024.06.10. Byeee, mwah ๐Ÿ’…โœจ๐Ÿซถ

๐Ÿ“ฆ where this page comes from