24 Ranges library [ranges]

24.7 Range adaptors [range.adaptors]

24.7.7 Transform view [range.transform]

24.7.7.2 Class template transform_­view [range.transform.view]

namespace std::ranges { template<input_­range V, copy_­constructible F> requires view<V> && is_object_v<F> && regular_­invocable<F&, range_reference_t<V>> && can-reference<invoke_result_t<F&, range_reference_t<V>>> class transform_view : public view_interface<transform_view<V, F>> { private: // [range.transform.iterator], class template transform_­view​::​iterator template<bool> struct iterator; // exposition only // [range.transform.sentinel], class template transform_­view​::​sentinel template<bool> struct sentinel; // exposition only V base_ = V(); // exposition only copyable-box<F> fun_; // exposition only public: transform_view() requires default_­initializable<V> && default_­initializable<F> = default; constexpr transform_view(V base, F fun); constexpr V base() const& requires copy_­constructible<V> { return base_; } constexpr V base() && { return std::move(base_); } constexpr iterator<false> begin(); constexpr iterator<true> begin() const requires range<const V> && regular_­invocable<const F&, range_reference_t<const V>>; constexpr sentinel<false> end(); constexpr iterator<false> end() requires common_­range<V>; constexpr sentinel<true> end() const requires range<const V> && regular_­invocable<const F&, range_reference_t<const V>>; constexpr iterator<true> end() const requires common_­range<const V> && regular_­invocable<const F&, range_reference_t<const V>>; constexpr auto size() requires sized_­range<V> { return ranges::size(base_); } constexpr auto size() const requires sized_­range<const V> { return ranges::size(base_); } }; template<class R, class F> transform_view(R&&, F) -> transform_view<views::all_t<R>, F>; }
constexpr transform_view(V base, F fun);
Effects: Initializes base_­ with std​::​move(base) and fun_­ with std​::​move(fun).
constexpr iterator<false> begin();
Effects: Equivalent to: return iterator<false>{*this, ranges::begin(base_)};
constexpr iterator<true> begin() const requires range<const V> && regular_­invocable<const F&, range_reference_t<const V>>;
Effects: Equivalent to: return iterator<true>{*this, ranges::begin(base_)};
constexpr sentinel<false> end();
Effects: Equivalent to: return sentinel<false>{ranges::end(base_)};
constexpr iterator<false> end() requires common_­range<V>;
Effects: Equivalent to: return iterator<false>{*this, ranges::end(base_)};
constexpr sentinel<true> end() const requires range<const V> && regular_­invocable<const F&, range_reference_t<const V>>;
Effects: Equivalent to: return sentinel<true>{ranges::end(base_)};
constexpr iterator<true> end() const requires common_­range<const V> && regular_­invocable<const F&, range_reference_t<const V>>;
Effects: Equivalent to: return iterator<true>{*this, ranges::end(base_)};