std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view - cppreference.com (original) (raw)
std::ranges::basic_istream_view
| Defined in header | ||
|---|---|---|
| template< std::movable Val, class CharT, class Traits = std::char_traits<CharT> > requires std::default_initializable<Val> && /*stream-extractable*/<Val, CharT, Traits> class basic_istream_view : public ranges::view_interface<basic_istream_view<Val, CharT, Traits>> | (1) | (since C++20) |
| Helper templates | ||
| template< class Val > using istream_view = ranges::basic_istream_view<Val, char>; | (2) | (since C++20) |
| template< class Val > using wistream_view = ranges::basic_istream_view<Val, wchar_t>; | (3) | (since C++20) |
| Customization point objects | ||
| namespace views { template< class T > constexpr /* unspecified */ istream = /* unspecified */; } | (4) | (since C++20) |
| Helper concepts | ||
| template< class Val, class CharT, class Traits > concept /*stream-extractable*/ = requires(std::basic_istream<CharT, Traits>& is, Val& t) { is >> t; }; | (5) | (exposition only*) |
- A range factory that generates a sequence of elements by repeatedly calling operator>>.
2,3) Convenience alias templates for character types char and wchar_t.
- views::istream<T>(e) is expression-equivalent to ranges::basic_istream_view<T, typename U::char_type, typename U::traits_type>(e) for any suitable subexpressions e, where
Uis std::remove_reference_t<decltype(e)>.
The program is ill-formed if U is not both publicly and unambiguously derived from std::basic_istream<typename U::char_type, typename U::traits_type>, which may result in a substitution failure.
- The exposition-only concept /*stream-extractable*/<Val, CharT, Traits> is satisfied when lvalue of type
Valcan be extracted from lvalue of type std::basic_istream<CharT, Traits>.
The iterator type of basic_istream_view is move-only: it does not meet the LegacyIterator requirements, and thus does not work with pre-C++20 algorithms.
Contents
- 1 Customization point objects
- 2 Data members
- 3 Member functions
- 4 std::ranges::basic_istream_view::basic_istream_view
- 5 std::ranges::basic_istream_view::begin
- 6 std::ranges::basic_istream_view::end
Customization point objects
The name views::istream<T> denotes a customization point object, which is a const function object of a literal semiregular class type. See CustomizationPointObject for details.
[edit] Data members
| Member | Definition |
|---|---|
| std::basic_istream<CharT, Traits>* stream_ | a pointer to the input stream(exposition-only member object*) |
| Val value_ | the stored value(exposition-only member object*) |
[edit] Member functions
| (constructor) | constructs a basic_istream_view (public member function) |
|---|---|
| begin | returns an iterator (public member function) |
| end | returns std::default_sentinel (public member function) |
| Inherited from std::ranges::view_interface | |
| cbegin(C++23) | returns a constant iterator to the beginning of the range (public member function of std::ranges::view_interface) [edit] |
| cend(C++23) | returns a sentinel for the constant iterator of the range (public member function of std::ranges::view_interface) [edit] |
std::ranges::basic_istream_view::basic_istream_view
| constexpr explicit basic_istream_view( std::basic_istream<CharT, Traits>& stream ); | | (since C++20) | | --------------------------------------------------------------------------------------------------------------------- | | ------------- |
Initializes _[stream](basic%5Fistream%5Fview.html#stream)_ with std::addressof(stream), and value-initializes _[value](basic%5Fistream%5Fview.html#value)_ .
std::ranges::basic_istream_view::begin
| constexpr auto begin(); | | (since C++20) | | ----------------------- | | ------------- |
Equivalent to *_[stream](basic%5Fistream%5Fview.html#stream)_ >> _[value](basic%5Fistream%5Fview.html#value)_ ; return iterator {*this};.
[edit] Nested classes
| | the iterator type of basic_istream_view(exposition-only member class*) | | ---------------------------------------------------------------------------- |
[edit] Example
Output:
/today/ /is/ /yesterday’s/ /tomorrow/ 1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
| DR | Applied to | Behavior as published | Correct behavior |
|---|---|---|---|
| LWG 3568 | C++20 | P2325R3 accidentally made the stored value default-initialized | restored to value-initialization |
| P2325R3 | C++20 | default constructor was provided asview must be default_initializable | removed along withthe requirement |
| P2432R1 | C++20 | ranges::istream_view was a function templateand did not follow the naming convention | made an alias template;customization point objects added |