9 Iterators library [iterators]

9.4 Indirect callable requirements [indirectcallable]

9.4.3 Class template projected [projected]

The projected class template is intended for use when specifying the constraints of algorithms that accept callable objects and projections ([defns.projection]). It bundles a Readable type I and a function Proj into a new Readable type whose reference type is the result of applying Proj to the reference_t of I.

  template <Readable I, IndirectRegularUnaryInvocable<I> Proj>
  struct projected {
    using value_type = remove_cv_t<remove_reference_t<indirect_result_of_t<Proj&(I)>>>;
    indirect_result_of_t<Proj&(I)> operator*() const;
  };

  template <WeaklyIncrementable I, class Proj>
  struct difference_type<projected<I, Proj>> {
    using type = difference_type_t<I>;
  };

Note: projected is only used to ease constraints specification. Its member function need not be defined. — end note ]