[projected] (original) (raw)

Class template projected is used to constrain algorithms that accept callable objects and projections ([defns.projection]).

It combines a indirectly_­readable type I and a callable object type Proj into a new indirectly_­readable type whose reference type is the result of applyingProj to the iter_­reference_­t of I.

namespace std { template<indirectly_­readable I, indirectly_­regular_­unary_­invocable<I> Proj> struct projected { using value_type = remove_cvref_t<indirect_result_t<Proj&, I>>; indirect_result_t<Proj&, I> operator*() const; };template<weakly_­incrementable I, class Proj> struct incrementable_traits<projected<I, Proj>> { using difference_type = iter_difference_t<I>;};}