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*)
  1. 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.

  1. 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 U is 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.

  1. The exposition-only concept /*stream-extractable*/<Val, CharT, Traits> is satisfied when lvalue of type Val can 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

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

[edit] See also