This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
[range.istream.iterator]
# 25 Ranges library [[ranges]](./#ranges)
## 25.6 Range factories [[range.factories]](range.factories#range.istream.iterator)
### 25.6.6 Istream view [[range.istream]](range.istream#iterator)
#### 25.6.6.3 Class basic_istream_view::*iterator* [range.istream.iterator]
[🔗](#lib:basic_istream_view::iterator)
namespace std::ranges {template<[movable](concepts.object#concept:movable "18.6Object concepts[concepts.object]") Val, class CharT, class Traits>requires [default_initializable](concept.default.init#concept:default_initializable "18.4.12Concept default_­initializable[concept.default.init]")<Val> &&[*stream-extractable*](range.istream.view#concept:stream-extractable "25.6.6.2Class template basic_­istream_­view[range.istream.view]")<Val, CharT, Traits>class basic_istream_view<Val, CharT, Traits>::*iterator* {public:using iterator_concept = input_iterator_tag; using difference_type = ptrdiff_t; using value_type = Val; constexpr explicit *iterator*(basic_istream_view& parent) noexcept; *iterator*(const *iterator*&) = delete; *iterator*(*iterator*&&) = default; *iterator*& operator=(const *iterator*&) = delete; *iterator*& operator=(*iterator*&&) = default; *iterator*& operator++(); void operator++(int);
Val& operator*() const; friend bool operator==(const *iterator*& x, default_sentinel_t); private: basic_istream_view* *parent_*; // *exposition only*};}
[🔗](#lib:basic_istream_view::iterator,constructor)
`constexpr explicit iterator(basic_istream_view& parent) noexcept;
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4120)
*Effects*: Initializes *parent_* with addressof(parent)[.](#1.sentence-1)
[🔗](#lib:operator++,basic_istream_view::iterator)
`iterator& operator++();
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4131)
*Effects*: Equivalent to:**parent_*->*stream_* >> *parent_*->*value_*;return *this;
[🔗](#lib:operator++,basic_istream_view::iterator_)
`void operator++(int);
`
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4146)
*Effects*: Equivalent to ++*this[.](#3.sentence-1)
[🔗](#lib:operator*,basic_istream_view::iterator)
`Val& operator*() const;
`
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4157)
*Effects*: Equivalent to: return *parent_*->*value_*;
[🔗](#lib:operator==,basic_istream_view::iterator)
`friend bool operator==(const iterator& x, default_sentinel_t);
`
[5](#5)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4168)
*Effects*: Equivalent to: return !*x.*parent_*->*stream_*;

View File

@@ -0,0 +1,36 @@
[range.istream.overview]
# 25 Ranges library [[ranges]](./#ranges)
## 25.6 Range factories [[range.factories]](range.factories#range.istream.overview)
### 25.6.6 Istream view [[range.istream]](range.istream#overview)
#### 25.6.6.1 Overview [range.istream.overview]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L3997)
basic_istream_view models [input_range](range.refinements#concept:input_range "25.4.6Other range refinements[range.refinements]") and
reads (using operator>>) successive elements
from its corresponding input stream[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4002)
The name views::istream<T> denotes
a customization point object ([[customization.point.object]](customization.point.object "16.3.3.3.5Customization Point Object types"))[.](#2.sentence-1)
Given a type T and a subexpression E of type U,
if U models[derived_from](concept.derived#concept:derived_from "18.4.3Concept derived_­from[concept.derived]")<basic_istream<typename U::char_type,typename U::traits_type>>,
then the expression views::istream<T>(E) is expression-equivalent tobasic_istream_view<T, typename U::char_type,typename U::traits_type>(E);
otherwise, views::istream<T>(E) is ill-formed[.](#2.sentence-2)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4014)
[*Example [1](#example-1)*: auto ints = istringstream{"0 1 2 3 4"};
ranges::copy(views::istream<int>(ints), ostream_iterator<int>{cout, "-"});// prints 0-1-2-3-4- — *end example*]

View File

@@ -0,0 +1,35 @@
[range.istream.view]
# 25 Ranges library [[ranges]](./#ranges)
## 25.6 Range factories [[range.factories]](range.factories#range.istream.view)
### 25.6.6 Istream view [[range.istream]](range.istream#view)
#### 25.6.6.2 Class template basic_istream_view [range.istream.view]
[🔗](#lib:basic_istream_view)
namespace std::ranges {template<class Val, class CharT, class Traits>concept [*stream-extractable*](#concept:stream-extractable "25.6.6.2Class template basic_­istream_­view[range.istream.view]") = // *exposition only*requires(basic_istream<CharT, Traits>& is, Val& t) { is >> t; }; template<[movable](concepts.object#concept:movable "18.6Object concepts[concepts.object]") Val, class CharT, class Traits = char_traits<CharT>>requires [default_initializable](concept.default.init#concept:default_initializable "18.4.12Concept default_­initializable[concept.default.init]")<Val> &&[*stream-extractable*](#concept:stream-extractable "25.6.6.2Class template basic_­istream_­view[range.istream.view]")<Val, CharT, Traits>class basic_istream_view : public view_interface<basic_istream_view<Val, CharT, Traits>> {public:constexpr explicit basic_istream_view(basic_istream<CharT, Traits>& stream); constexpr auto begin() {**stream_* >> *value_*; return *iterator*{*this}; }constexpr default_sentinel_t end() const noexcept; private:// [[range.istream.iterator]](range.istream.iterator "25.6.6.3Class basic_­istream_­view::iterator"), class basic_istream_view::*iterator*struct *iterator*; // *exposition only* basic_istream<CharT, Traits>* *stream_*; // *exposition only* Val *value_* = Val(); // *exposition only*};}
[🔗](#lib:basic_istream_view,constructor)
`constexpr explicit basic_istream_view(basic_istream<CharT, Traits>& stream);
`
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4063)
*Effects*: Initializes *stream_* with addressof(stream)[.](#1.sentence-1)
[🔗](#lib:end,basic_istream_view)
`constexpr default_sentinel_t end() const noexcept;
`
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/ranges.tex#L4074)
*Effects*: Equivalent to: return default_sentinel;