std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view
Defined in header <ranges> | ||
|---|---|---|
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*) |
operator>>.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)>.U is not both publicly and unambiguously derived from std::basic_istream<typenameU::char_type,typenameU::traits_type>, which may result in a substitution failure./*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.
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.
Data members
| Member | Description |
|---|---|
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*) |
Member functions
constructs a basic_istream_view (public member function) |
|
| returns an iterator (public member function) |
|
returns std::default_sentinel (public member function) |
|
Inherited from |
|
|
(C++23) | returns a constant iterator to the beginning of the range (public member function of std::ranges::view_interface<D>) |
|
(C++23) | returns a sentinel for the constant iterator of the range (public member function of std::ranges::view_interface<D>) |
| Although | (until C++23) |
std::ranges::basic_istream_view::basic_istream_view
constexpr explicit
basic_istream_view( std::basic_istream<CharT, Traits>& stream );
| (since C++20) |
Initializes stream_ with std::addressof(stream), and value-initializes value_ .
std::ranges::basic_istream_view::begin
constexpr auto begin(); | (since C++20) |
Equivalent to *stream_ >> value_ ;return iterator {*this};.
std::ranges::basic_istream_view::end
constexpr std::default_sentinel_t end() const noexcept; | (since C++20) |
Returns std::default_sentinel.
Nested classes
the iterator type of basic_istream_view(exposition-only member class*) |
Example
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <ranges>
#include <sstream>
#include <string>
int main()
{
auto words = std::istringstream{"today is yesterday’s tomorrow"};
for (const auto& s : std::views::istream<std::string>(words))
std::cout << std::quoted(s, '/') << ' ';
std::cout << '\n';
auto floats = std::istringstream{"1.1 2.2\t3.3\v4.4\f55\n66\r7.7 8.8"};
std::ranges::copy
(
std::views::istream<float>(floats),
std::ostream_iterator<float>{std::cout, ", "}
);
std::cout << '\n';
}
Output:
/today/ /is/ /yesterday’s/ /tomorrow/ 1.1, 2.2, 3.3, 4.4, 55, 66, 7.7, 8.8,
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 with the 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 |
See also
input iterator that reads from std::basic_istream (class template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/ranges/basic_istream_view