[projected] (original) (raw)
Class template projected is used to constrain algorithms that accept callable objects and projections ([defns.projection]).
It combines an 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<class I, class Proj> struct projected-impl { struct type { using value_type = remove_cvref_t<indirect_result_t<Proj&, I>>;using difference_type = iter_difference_t<I>; indirect_result_t<Proj&, I> operator*() const; };};template<indirectly_readable I, indirectly_regular_unary_invocable<I> Proj> using projected = projected-impl<I, Proj>::type;}