This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

### 3568. `basic_istream_view` needs to initialize `value_`

Section: 24.6.5.2 [range.istream.view] Status: WP Submitter: Casey Carter Opened: 2021-06-15 Last modified: 2021-10-14

Priority: Not Prioritized

View all issues with WP status.

Discussion:

P2325R3 removes the default member initializers for `basic_istream_view`'s exposition-only `stream_` and `value_` members. Consequently, copying a `basic_istream_view` before the first call to `begin` may produce undefined behavior since doing so necessarily copies the uninitialized `value_`. We should restore `value_`'s default member initializer and remove this particular footgun.

[2021-06-23; Reflector poll]

Set status to Tentatively Ready after seven votes in favour during reflector poll.

[2021-10-14 Approved at October 2021 virtual plenary. Status changed: Voting → WP.]

Proposed resolution:

Wording relative to the post-202106 working draft (as near as possible). This PR is currently being implemented in MSVC.

1. Modify 24.6.5.2 [range.istream.view] as indicated:

   >     namespace std::ranges {
   >       […]
   >       template<movable Val, class CharT, class Traits>
   >         requires default_initializable<Val> &&
   >                  stream-extractable<Val, CharT, Traits>
   >       class basic_istream_view : public view_interface<basic_istream_view<Val, CharT, Traits>> {
   >         […]
   >         Val value_ = Val(); // exposition only
   >       };
   >     }