[range.single.view] # 25 Ranges library [[ranges]](./#ranges) ## 25.6 Range factories [[range.factories]](range.factories#range.single.view) ### 25.6.3 Single view [[range.single]](range.single#view) #### 25.6.3.2 Class template single_view [range.single.view] [🔗](#lib:single_view) namespace std::ranges {template<[move_constructible](concept.moveconstructible#concept:move_constructible "18.4.13 Concept move_­constructible [concept.moveconstructible]") T>requires is_object_vclass single_view : public view_interface> {private:*movable-box* *value_*; // *exposition only* (see [[range.move.wrap]](range.move.wrap "25.7.3 Movable wrapper"))public: single_view() requires [default_initializable](concept.default.init#concept:default_initializable "18.4.12 Concept default_­initializable [concept.default.init]") = default; constexpr explicit single_view(const T& t) requires [copy_constructible](concept.copyconstructible#concept:copy_constructible "18.4.14 Concept copy_­constructible [concept.copyconstructible]"); constexpr explicit single_view(T&& t); templaterequires [constructible_from](concept.constructible#concept:constructible_from "18.4.11 Concept constructible_­from [concept.constructible]")constexpr explicit single_view(in_place_t, Args&&... args); constexpr T* begin() noexcept; constexpr const T* begin() const noexcept; constexpr T* end() noexcept; constexpr const T* end() const noexcept; static constexpr bool empty() noexcept; static constexpr size_t size() noexcept; constexpr T* data() noexcept; constexpr const T* data() const noexcept; }; template single_view(T) -> single_view;} [🔗](#lib:single_view,constructor) `constexpr explicit single_view(const T& t) requires [copy_constructible](concept.copyconstructible#concept:copy_constructible "18.4.14 Concept copy_­constructible [concept.copyconstructible]"); ` [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2686) *Effects*: Initializes *value_* with t[.](#1.sentence-1) [🔗](#lib:single_view,constructor_) `constexpr explicit single_view(T&& t); ` [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2697) *Effects*: Initializes *value_* with std​::​move(t)[.](#2.sentence-1) [🔗](#lib:single_view,constructor__) `template requires [constructible_from](concept.constructible#concept:constructible_from "18.4.11 Concept constructible_­from [concept.constructible]") constexpr explicit single_view(in_place_t, Args&&... args); ` [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2710) *Effects*: Initializes *value_* as if by*value_*{in_place, std​::​forward(args)...}[.](#3.sentence-1) [🔗](#lib:begin,single_view) `constexpr T* begin() noexcept; constexpr const T* begin() const noexcept; ` [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2723) *Effects*: Equivalent to: return data(); [🔗](#lib:end,single_view) `constexpr T* end() noexcept; constexpr const T* end() const noexcept; ` [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2735) *Effects*: Equivalent to: return data() + 1; [🔗](#lib:empty,single_view) `static constexpr bool empty() noexcept; ` [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2746) *Effects*: Equivalent to: return false; [🔗](#lib:size,single_view) `static constexpr size_t size() noexcept; ` [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2757) *Effects*: Equivalent to: return 1; [🔗](#lib:data,single_view) `constexpr T* data() noexcept; constexpr const T* data() const noexcept; ` [8](#8) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L2769) *Effects*: Equivalent to: return *value_*.operator->();