23 Iterators library [iterators]

23.3 Iterator requirements [iterator.requirements]

23.3.4 Iterator concepts [iterator.concepts] Concept readable [iterator.concept.readable]

Types that are readable by applying operator* model the readable concept, including pointers, smart pointers, and iterators.
template<class In>
  concept readable =
    requires {
      typename iter_value_t<In>;
      typename iter_reference_t<In>;
      typename iter_rvalue_reference_t<In>;
    } &&
    common_reference_with<iter_reference_t<In>&&, iter_value_t<In>&> &&
    common_reference_with<iter_reference_t<In>&&, iter_rvalue_reference_t<In>&&> &&
    common_reference_with<iter_rvalue_reference_t<In>&&, const iter_value_t<In>&>;
Given a value i of type I, I models readable only if the expression *i is equality-preserving.
The expression *i is indirectly required to be valid via the exposition-only dereferenceable concept ([iterator.synopsis]).
— end note