Namespaces
Variants

std::experimental::ranges:: projected

From cppreference.net
Определено в заголовочном файле <experimental/ranges/iterator>
template < Readable I, IndirectRegularUnaryInvocable < I > Proj >

struct projected {
using value_type =
std:: remove_cv_t < std:: remove_reference_t < ranges :: indirect_result_of_t < Proj & ( I ) >>> ;
ranges :: indirect_result_of_t < Proj & ( I ) > operator * ( ) const ;
} ;

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

} ;
(ranges TS)

Шаблон класса projected объединяет Readable тип I и функцию Proj в новый Readable тип, чей reference тип является результатом применения Proj к reference типу I . Он существует исключительно для упрощения спецификации ограничений, поэтому его operator * ( ) может быть фактически не определён.