3073. [networking.ts] (async_)read and (async_)write don't support DynamicBuffer lvalues

Section: 17 [networking.ts::buffer.stream] Status: New Submitter: Christopher Kohlhoff Opened: 2018-02-27 Last modified: 2020-09-06

Priority: 3

View all issues with New status.

Discussion:

Addresses: networking.ts

Suppose that we have a user-defined class dyn_buf that satisfies the DynamicBuffer requirements ([buffer.reqmts.dynamicbuffer]), and is additionally copy-constructible. The following snippet compiles, as expected:

dyn_buf b;
net::read_until(my_socket, b, "\n");

However, this next snippet will not compile, when it should:

dyn_buf b;
net::read(my_socket, b);

This is due to:

This can fixed by changing the test to is_dynamic_buffer_v<decay_t<DynamicBuffer>>.

[2019-01-20 Reflector prioritization]

Set Priority to 3

Proposed resolution:

This wording is relative to N4711.

  1. Edit 17.5 [networking.ts::buffer.read] as indicated:

    -14- Remarks: This function shall not participate in overload resolution unless is_dynamic_buffer_v<decay_t<DynamicBuffer>> is true.

  2. Edit 17.6 [networking.ts::buffer.async.read] as indicated:

    -16- Remarks: This function shall not participate in overload resolution unless is_dynamic_buffer_v<decay_t<DynamicBuffer>> is true.

  3. Edit 17.7 [networking.ts::buffer.write] as indicated:

    -14- Remarks: This function shall not participate in overload resolution unless is_dynamic_buffer_v<decay_t<DynamicBuffer>> is true.

  4. Edit 17.8 [networking.ts::buffer.async.write] as indicated:

    -16- Remarks: This function shall not participate in overload resolution unless is_dynamic_buffer_v<decay_t<DynamicBuffer>> is true.