| ||||||||||||||||||||||
| Range primitives | |||||||
| |||||||
| Range concepts | |||||||||||||||||||
| |||||||||||||||||||
| Range factories | ||||||||||||||
|
| |||||||||||||
| Range adaptors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| Helper items | |||||||||||||||||
| |||||||||||||||||
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 isstd::remove_reference_t<decltype(e)>.U is not both publicly and unambiguously derived fromstd::basic_istream<typename U::char_type,typename U::traits_type>, which may result in asubstitution failure.Val can be extracted from lvalue of typestd::basic_istream<CharT, Traits>.The iterator type ofbasic_istream_view is move-only: it does not meet theLegacyIterator requirements, and thus does not work with pre-C++20algorithms.
Contents |
The nameviews::istream<T> denotes acustomization point object, which is a constfunction object of aliteralsemiregular class type. SeeCustomizationPointObject for details.
| 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*) |
constructs abasic_istream_view(public member function) | |||
| returns an iterator (public member function) | |||
| returnsstd::default_sentinel (public member function) | |||
Inherited fromstd::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 | (until C++23) |
constexprexplicit basic_istream_view(std::basic_istream<CharT, Traits>& stream); | (since C++20) | |
Initializesstream_ withstd::addressof(stream), and value-initializesvalue_ .
constexprauto begin(); | (since C++20) | |
Equivalent to*stream_ >> value_ ;return iterator {*this};.
constexprstd::default_sentinel_t end()constnoexcept; | (since C++20) | |
Returnsstd::default_sentinel.
the iterator type ofbasic_istream_view(exposition-only member class*) |
#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,
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 bedefault_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 |
| input iterator that reads fromstd::basic_istream (class template)[edit] |