Reputation: 35316
My app is throwing this error:
error C2039: 'result_type' : is not a member of '`global namespace''
for this code:
void handle_read_headers(const boost::system::error_code& err, RESTClient::response& resp)
{
if (!err)
{
// Process the response headers.
std::istream response_stream(&response_);
std::string header;
while (std::getline(response_stream, header) && header != "\r")
std::cout << header << "\n";
std::cout << "\n";
// Write whatever content we already have to output.
if (response_.size() > 0)
std::cout << &response_;
(&resp)->body = "Yehey!!!";
// Start reading remaining data until EOF.
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(1),
boost::bind(&client::handle_read_content, this,
boost::asio::placeholders::error, boost::ref(resp)));
}
else
{
std::cout << "Error: " << err << "\n";
}
}
The "bound" function looks like this:
void handle_read_content(const boost::system::error_code& err, RESTClient::response& resp){}
What could be wrong in my code?
Update:
I was able to compile the code with these changes
Upvotes: 0
Views: 2467
Reputation: 393457
According to this documentation page ReadHandler needs to take and error code as well as the number of bytes transferred.
It might be that MSVC is more picky/sensitive about the missing placeholders when invoking a bind expression.¹
Try adding the placeholder parameter to the bind:
// Start reading remaining data until EOF.
boost::asio::async_read(socket_, response_,
boost::asio::transfer_at_least(1),
boost::bind(&client::handle_read_content, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred,
boost::ref(resp)));
And obviously to the handler function itself too:
void handle_read_content(const boost::system::error_code& ec, size_t bytes_transferred, RESTClient::response& resp){}
I have spent unreasonable amounts of effort (thanks to @qballer, @nab, and others on the live feed too!) to reproduce this in Visual Studio and got this:
For the record: that was
¹ in fact I've sometimes noticed that Asio accepts slightly different signatures for handler functions using GCC (my preferred compiler). I've always wondered whether that is a feature, or perhaps a bug?
Upvotes: 1