Skip to content

boost::span rvalue is not supported by asio::buffers #438

@ujos

Description

@ujos

I have a function that returns a buffer as a span to read the data from socket:

boost::span<std::byte> getRecvBuffer();

When I call tcp::socket::async_receive(asio::buffer(getRecvBuffer())),

socket_.async_receive(asio::buffer(getRecvBuffer()), [](auto&&...) {});

... I get an error:

error: no matching function for call to ‘boost::asio::mutable_buffer::mutable_buffer(const boost::asio::const_buffers_1&)’

The weird thing is that following code compiles:

auto b1 = asio::buffer(getRecvBuffer());

Following code compiles too:

auto buf = client.socketRecvBuffer_.recvBuffer();
socket_.async_receive(asio::buffer(buf), [](auto&&...) {});

It seems in order to create a mutable_buffer, I need a lvalue for the buffer, which makes sense in case of std::vector, but it does not make sense for boost::span.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions