namespace std::ranges {
template<movable Val, class CharT, class Traits>
requires default_initializable<Val> &&
stream-extractable<Val, CharT, Traits>
class basic_istream_view<Val, CharT, Traits>::iterator {
public:
using iterator_concept = input_iterator_tag;
using difference_type = ptrdiff_t;
using value_type = Val;
iterator() = default;
constexpr explicit iterator(basic_istream_view& parent) noexcept;
iterator(const iterator&) = delete;
iterator(iterator&&) = default;
iterator& operator=(const iterator&) = delete;
iterator& operator=(iterator&&) = default;
iterator& operator++();
void operator++(int);
Val& operator*() const;
friend bool operator==(const iterator& x, default_sentinel_t);
private:
basic_istream_view* parent_ = nullptr;
};
}
constexpr explicit iterator(basic_istream_view& parent) noexcept;
Effects:
Initializes
parent_ with
addressof(parent). Preconditions:
parent_->stream_ != nullptr is
true. Effects:
Equivalent to:
*parent_->stream_>> parent_->object_;
return *this;
Preconditions:
parent_->stream_ != nullptr is
true. Effects:
Equivalent to
++*this. Preconditions:
parent_->stream_ != nullptr is
true. Effects:
Equivalent to: return parent_->object_;
friend bool operator==(const iterator& x, default_sentinel_t);
Effects:
Equivalent to: return x.parent_ == nullptr || !*x.parent_->stream_;