std::ranges:: views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::
Defined in header <ranges>
|
||
template
<
std::movable Val, class CharT,
class Traits =
std::char_traits
<CharT>
>
|
(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 >
|
(4) | (since C++20) |
Helper concepts |
||
template
<
class Val, class CharT, class Traits >
concept /*stream-extractable*/
=
|
(5) | (exposition only*) |
U
is
std::remove_reference_t
<decltype(e)
>
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
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. For exposition purposes, the cv-unqualified version of its type is denoted as __istream_fn<T>
All instances of __istream_fn<T>
are equal. The effects of invoking different instances of type
__istream_fn
on the same arguments are equivalent, regardless of whether the expression denoting the instance is an lvalue or rvalue, and is const-qualified or not (however, a volatile-qualified instance is not required to be invocable). Thus, views::istream<T>
Given a set of types Args...
, if
std::declval
<Args>
(
)
meet the requirements for arguments to views::istream<T>
above, __istream_fn<T>
models
- std::invocable <__istream_fn<T>, Args...>
- std::invocable < const __istream_fn<T>, Args...>
- std::invocable <__istream_fn<T> &, Args...>
-
std::invocable
<
const __istream_fn<T>
&, Args...>
.
Otherwise, no function call operator of __istream_fn<T>
participates in overload resolution.
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* |
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 std::ranges::view_interface |
|||
(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) |