std::projected
Defined in header <iterator> |
||
---|---|---|
template< std::indirectly_readable I, std::indirectly_regular_unary_invocable<I> Proj > struct projected { using value_type = std::remove_cvref_t<std::indirect_result_t<Proj&, I>>; std::indirect_result_t<Proj&, I> operator*() const; // not defined }; |
(1) | (since C++20) |
template< std::weakly_incrementable I, class Proj > struct incrementable_traits<std::projected<I, Proj>> { using difference_type = std::iter_difference_t<I>; }; |
(2) | (since C++20) |
1) Class template
projected
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 applying
Proj
to the
std::iter_reference_t<I>
.
2) This specialization of
std::incrementable_traits
makes
std::projected<I, Proj>
a
weakly_incrementable
type when
I
is also a
weakly_incrementable
type.
projected
is used only to constrain algorithms that accept callable objects and projections, and hence its operator*()
is not defined.
Template parameters
I | - | an indirectly readable type |
Proj | - | projection applied to a dereferenced I |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/projected