Opened 12 years ago
Closed 12 years ago
#4744 closed Bugs (fixed)
Some handler arguments are not passed as lvalues
| Reported by: | chris_kohlhoff | Owned by: | chris_kohlhoff |
|---|---|---|---|
| Milestone: | To Be Determined | Component: | asio |
| Version: | Boost 1.44.0 | Severity: | Problem |
| Keywords: | Cc: |
Description
Some handler arguments (e.g. those passed by async_read() and other composed asynchronous operations) are not being passed as lvalues. This prevents interoperability with some implementations of std::tr1::bind.
The following program should compile correctly:
#include <boost/asio.hpp>
#include <boost/regex.hpp>
struct handler
{
template <typename T1, typename T2>
void operator()(T1&, T2&) {}
};
class match_char
{
public:
explicit match_char(char c) : c_(c) {}
template <typename Iterator>
std::pair<Iterator, bool> operator()(
Iterator begin, Iterator end) const
{
Iterator i = begin;
while (i != end)
if (c_ == *i++)
return std::make_pair(i, true);
return std::make_pair(i, false);
}
private:
char c_;
};
namespace boost {
namespace asio {
template <> struct is_match_condition<match_char>
: public boost::true_type {};
} // namespace asio
} // namespace boost
int main()
{
boost::asio::io_service io_service;
boost::asio::ip::tcp::socket sock(io_service);
char buf[1024]= "";
boost::asio::streambuf sb;
boost::asio::async_read(sock, boost::asio::buffer(buf), handler());
boost::asio::async_write(sock, boost::asio::buffer(buf), handler());
boost::asio::async_read(sock, sb, handler());
boost::asio::async_write(sock, sb, handler());
boost::asio::async_read_until(sock, sb, '\n', handler());
boost::asio::async_read_until(sock, sb, "\n", handler());
boost::asio::async_read_until(sock, sb, boost::regex("\n"), handler());
boost::asio::async_read_until(sock, sb, match_char('\n'), handler());
}
Change History (2)
comment:1 by , 12 years ago
comment:2 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| Status: | new → closed |
(In [66037]) Merge from trunk.
........
r65998 | chris_kohlhoff | 2010-10-16 15:30:12 +1100 (Sat, 16 Oct 2010) | 2 lines
Make unit tests build faster.
........
r66002 | chris_kohlhoff | 2010-10-16 16:13:46 +1100 (Sat, 16 Oct 2010) | 2 lines
Add a test case for bug where a deadline timer never fires if the io_service is run in a background thread. N.B. fails only on platforms that use kqueue. Fixes #4568.
........
r66004 | chris_kohlhoff | 2010-10-16 16:43:03 +1100 (Sat, 16 Oct 2010) | 2 lines
Fix the way the kqueue_reactor is interrupted when a new timer is scheduled. Fixes #4568.
........
r66005 | chris_kohlhoff | 2010-10-16 17:27:45 +1100 (Sat, 16 Oct 2010) | 2 lines
Fix a const-correctness issue that prevents valid uses of has_service<> from compiling. Fixes #4638.
........
r66006 | chris_kohlhoff | 2010-10-16 18:06:18 +1100 (Sat, 16 Oct 2010) | 2 lines
Use lower-case to keep MinGW cross-compilers happy. Fixes #4491.
........
r66007 | chris_kohlhoff | 2010-10-16 18:24:47 +1100 (Sat, 16 Oct 2010) | 2 lines
Don't use deprecated system functions. Fixes #4672.
........
r66008 | chris_kohlhoff | 2010-10-16 20:47:11 +1100 (Sat, 16 Oct 2010) | 2 lines
Ensure close()/closesocket() failures are correctly propagated. Fixes #4573.
........
r66009 | chris_kohlhoff | 2010-10-16 21:01:14 +1100 (Sat, 16 Oct 2010) | 2 lines
Check return code of InitializeCriticalSectionAndSpinCount. Fixes #4574.
........
r66010 | chris_kohlhoff | 2010-10-16 22:04:08 +1100 (Sat, 16 Oct 2010) | 2 lines
Add support for hardware flow control on QNX. Fixes #4625.
........
r66014 | chris_kohlhoff | 2010-10-16 22:39:13 +1100 (Sat, 16 Oct 2010) | 2 lines
Always use pselect() on HP-UX, if it is available. Fixes #4578.
........
r66017 | chris_kohlhoff | 2010-10-16 23:23:56 +1100 (Sat, 16 Oct 2010) | 2 lines
Ensure handler arguments are passed as lvalues. Fixes #4744.
........
r66018 | chris_kohlhoff | 2010-10-16 23:39:06 +1100 (Sat, 16 Oct 2010) | 2 lines
Fix Windows build when thread support is disabled. Fixes #4680.
........
r66020 | chris_kohlhoff | 2010-10-16 23:59:29 +1100 (Sat, 16 Oct 2010) | 3 lines
Timers with expiry times set more than 5 minutes in the future need the waitable timer to be periodic. Fixes #4745.
........
r66035 | chris_kohlhoff | 2010-10-17 22:33:28 +1100 (Sun, 17 Oct 2010) | 2 lines
Version bump.
........

(In [66017]) Ensure handler arguments are passed as lvalues. Refs #4744.