Namespaces
Variants
Actions

std::ranges::views::istream, std::ranges::basic_istream_view, std::ranges::istream_view, std::ranges::wistream_view

From cppreference.com
< cpp‎ | ranges
 
 
Ranges library
Range adaptors
 
 
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

    :publicranges::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.
4)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.
5) 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 literalsemiregular 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*)
Valvalue_ the stored value
(exposition-only member object*)

[edit]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>)[edit]
(C++23)
returns a sentinel for the constant iterator of the range
(public member function of std::ranges::view_interface<D>)[edit]

Although basic_istream_view is derived from std::ranges::view_interface, it cannot use any of inherited member functions.

(until C++23)

std::ranges::basic_istream_view::basic_istream_view

constexprexplicit
    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

constexprauto begin();
(since C++20)

Equivalent to *stream_ >> value_ ;return iterator {*this};.

std::ranges::basic_istream_view::end

constexprstd::default_sentinel_t end()constnoexcept;
(since C++20)

Returns std::default_sentinel.

[edit]Nested classes

the iterator type of basic_istream_view
(exposition-only member class*)

[edit]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(constauto& 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,

[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 3568C++20 P2325R3 accidentally made the stored value default-initialized restored to value-initialization
P2325R3C++20 default constructor was provided as
view must be default_initializable
removed along with
the requirement
P2432R1C++20 ranges::istream_view was a function template
and did not follow the naming convention
made an alias template;
customization point objects added

[edit]See also

input iterator that reads from std::basic_istream
(class template)[edit]
close