Update documentation to cover new features.
diff --git a/asio/include/asio/handler_type.hpp b/asio/include/asio/handler_type.hpp
index fa47504..08d033c 100644
--- a/asio/include/asio/handler_type.hpp
+++ b/asio/include/asio/handler_type.hpp
@@ -37,6 +37,8 @@
   typedef Handler type;
 };
 
+#if !defined(GENERATING_DOCUMENTATION)
+
 template <typename Handler, typename Signature>
 struct handler_type<const Handler, Signature>
   : handler_type<Handler, Signature> {};
@@ -98,6 +100,8 @@
 struct handler_type<ReturnType(Arg1, Arg2, Arg3, Arg4, Arg5), Signature>
   : handler_type<ReturnType(*)(Arg1, Arg2, Arg3, Arg4, Arg5), Signature> {};
 
+#endif // !defined(GENERATING_DOCUMENTATION)
+
 } // namespace asio
 
 #include "asio/detail/pop_options.hpp"
diff --git a/asio/include/asio/spawn.hpp b/asio/include/asio/spawn.hpp
index cf834da..501e073 100644
--- a/asio/include/asio/spawn.hpp
+++ b/asio/include/asio/spawn.hpp
@@ -26,10 +26,34 @@
 
 namespace asio {
 
+/// Context object the represents the currently executing coroutine.
+/**
+ * The basic_yield_context class is used to represent the currently executing
+ * stackful coroutine. A basic_yield_context may be passed as a handler to an
+ * asynchronous operation. For example:
+ *
+ * @code template <typename Handler>
+ * void my_coroutine(basic_yield_context<Handler> yield)
+ * {
+ *   ...
+ *   std::size_t n = my_socket.async_read_some(buffer, yield);
+ *   ...
+ * } @endcode
+ *
+ * The initiating function (async_read_some in the above example) suspends the
+ * current coroutine. The coroutine is resumed when the asynchronous operation
+ * completes, and the result of the operation is returned.
+ */
 template <typename Handler>
 class basic_yield_context
 {
 public:
+  /// Construct a yield context to represent the specified coroutine.
+  /**
+   * Most applications do not need to use this constructor. Instead, the
+   * spawn() function passes a yield context as an argument to the coroutine
+   * function.
+   */
   basic_yield_context(
       const detail::weak_ptr<boost::coroutines::coroutine<void()> >& coro,
       boost::coroutines::coroutine<void()>::caller_type& ca, Handler& handler)
@@ -40,6 +64,25 @@
   {
   }
 
+  /// Return a yield context that sets the specified error_code.
+  /**
+   * By default, when a yield context is used with an asynchronous operation, a
+   * non-success error_code is converted to system_error and thrown. This
+   * operator may be used to specify an error_code object that should instead be
+   * set with the asynchronous operation's result. For example:
+   *
+   * @code template <typename Handler>
+   * void my_coroutine(basic_yield_context<Handler> yield)
+   * {
+   *   ...
+   *   std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
+   *   if (ec)
+   *   {
+   *     // An error occurred.
+   *   }
+   *   ...
+   * } @endcode
+   */
   basic_yield_context operator[](asio::error_code& ec)
   {
     basic_yield_context tmp(*this);
@@ -57,6 +100,7 @@
 };
 
 #if defined(GENERATING_DOCUMENTATION)
+/// Context object the represents the currently executing coroutine.
 typedef basic_yield_context<unspecified> yield_context;
 #else // defined(GENERATING_DOCUMENTATION)
 typedef basic_yield_context<
@@ -65,30 +109,123 @@
     detail::is_continuation_if_running> > yield_context;
 #endif // defined(GENERATING_DOCUMENTATION)
 
+/**
+ * @defgroup spawn asio::spawn
+ *
+ * @brief Start a new stackful coroutine.
+ *
+ * The spawn() function is a high-level wrapper over the Boost.Coroutine
+ * library. This function enables programs to implement asynchronous logic in a
+ * synchronous manner, as illustrated by the following example:
+ *
+ * @code asio::spawn(my_strand, do_echo);
+ *
+ * // ...
+ *
+ * void do_echo(asio::yield_context yield)
+ * {
+ *   try
+ *   {
+ *     char data[128];
+ *     for (;;)
+ *     {
+ *       std::size_t length =
+ *         my_socket.async_read_some(
+ *           asio::buffer(data), yield);
+ *
+ *       asio::async_write(my_socket,
+ *           asio::buffer(data, length), yield);
+ *     }
+ *   }
+ *   catch (std::exception& e)
+ *   {
+ *     // ...
+ *   }
+ * } @endcode
+ */
+/*@{*/
+
+/// Start a new stackful coroutine, calling the specified handler when it
+/// completes.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param handler A handler to be called when the coroutine exits. More
+ * importantly, the handler provides an execution context (via the the handler
+ * invocation hook) for the coroutine. The handler must have the signature:
+ * @code void handler(); @endcode
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Handler, typename Function>
 void spawn(ASIO_MOVE_ARG(Handler) handler,
     ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine, inheriting the execution context of another.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param ctx Identifies the current coroutine as a parent of the new
+ * coroutine. This specifies that the new coroutine should inherit the
+ * execution context of the parent. For example, if the parent coroutine is
+ * executing in a particular strand, then the new coroutine will execute in the
+ * same strand.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(basic_yield_context<Handler> yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Handler, typename Function>
 void spawn(basic_yield_context<Handler> ctx,
     ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine that executes in the contex of a strand.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param strand Identifies a strand. By starting multiple coroutines on the
+ * same strand, the implementation ensures that none of those coroutines can
+ * execute simultaneously.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Function>
 void spawn(asio::io_service::strand strand,
     ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/// Start a new stackful coroutine that executes on a given io_service.
+/**
+ * This function is used to launch a new coroutine.
+ *
+ * @param io_service Identifies the io_service that will run the coroutine. The
+ * new coroutine is implicitly given its own strand within this io_service.
+ *
+ * @param function The coroutine function. The function must have the signature:
+ * @code void function(yield_context yield); @endcode
+ *
+ * @param attributes Boost.Coroutine attributes used to customise the coroutine.
+ */
 template <typename Function>
 void spawn(asio::io_service& io_service,
     ASIO_MOVE_ARG(Function) function,
     const boost::coroutines::attributes& attributes
       = boost::coroutines::attributes());
 
+/*@}*/
+
 } // namespace asio
 
 #include "asio/detail/pop_options.hpp"
diff --git a/asio/include/asio/use_future.hpp b/asio/include/asio/use_future.hpp
index 7321a89..f1722e1 100644
--- a/asio/include/asio/use_future.hpp
+++ b/asio/include/asio/use_future.hpp
@@ -22,27 +22,46 @@
 
 namespace asio {
 
+/// Class used to specify that an asynchronous operation should return a future.
+/**
+ * The use_future_t class is used to indicate that an asynchronous operation
+ * should return a std::future object. A use_future_t object may be passed as a
+ * handler to an asynchronous operation, typically using the special value @c
+ * asio::use_future. For example:
+ *
+ * @code std::future<std::size_t> my_future
+ *   = my_socket.async_read_some(my_buffer, asio::use_future); @endcode
+ *
+ * The initiating function (async_read_some in the above example) returns a
+ * future that will receive the result of the operation. If the operation
+ * completes with an error_code indicating failure, it is converted into a
+ * system_error and passed back to the caller via the future.
+ */
 template <typename Allocator = std::allocator<void> >
 class use_future_t
 {
 public:
   typedef Allocator allocator_type;
 
+  /// Construct using default-constructed allocator.
   constexpr use_future_t()
   {
   }
 
+  /// Construct using specified allocator.
   explicit use_future_t(const Allocator& allocator)
     : allocator_(allocator)
   {
   }
 
+  /// Specify an alternate allocator.
   template <typename OtherAllocator>
   use_future_t<OtherAllocator> operator[](const OtherAllocator& allocator) const
   {
     return use_future_t<OtherAllocator>(allocator);
   }
 
+  /// Obtain allocator.
   allocator_type get_allocator() const
   {
     return allocator_;
@@ -52,7 +71,10 @@
   Allocator allocator_;
 };
 
-// A special value, similar to std::nothrow.
+/// A special value, similar to std::nothrow.
+/**
+ * See the documentation for asio::use_future_t for a usage example.
+ */
 constexpr use_future_t<> use_future;
 
 } // namespace asio
diff --git a/asio/src/doc/overview.qbk b/asio/src/doc/overview.qbk
index 1980a35..92ca3a6 100644
--- a/asio/src/doc/overview.qbk
+++ b/asio/src/doc/overview.qbk
@@ -19,8 +19,11 @@
   * [link asio.overview.core.line_based Line-Based Operations]
   * [link asio.overview.core.allocation Custom Memory Allocation]
   * [link asio.overview.core.handler_tracking Handler Tracking]
+  * [link asio.overview.core.coroutine Stackless Coroutines]
+  * [link asio.overview.core.spawn Stackful Coroutines]
 * [link asio.overview.networking Networking]
   * [link asio.overview.networking.protocols TCP, UDP and ICMP]
+  * [link asio.overview.networking.other_protocols Support for Other Protocols]
   * [link asio.overview.networking.iostreams Socket Iostreams]
   * [link asio.overview.networking.bsd_sockets The BSD Socket API and Asio]
 * [link asio.overview.timers Timers]
@@ -50,6 +53,8 @@
 * [link asio.overview.core.line_based Line-Based Operations]
 * [link asio.overview.core.allocation Custom Memory Allocation]
 * [link asio.overview.core.handler_tracking Handler Tracking]
+* [link asio.overview.core.coroutine Stackless Coroutines]
+* [link asio.overview.core.spawn Stackful Coroutines]
 
 [include overview/basics.qbk]
 [include overview/async.qbk]
@@ -61,16 +66,20 @@
 [include overview/line_based.qbk]
 [include overview/allocation.qbk]
 [include overview/handler_tracking.qbk]
+[include overview/coroutine.qbk]
+[include overview/spawn.qbk]
 
 [endsect]
 
 [section:networking Networking]
 
 * [link asio.overview.networking.protocols TCP, UDP and ICMP]
+* [link asio.overview.networking.other_protocols Support for Other Protocols]
 * [link asio.overview.networking.iostreams Socket Iostreams]
 * [link asio.overview.networking.bsd_sockets The BSD Socket API and Asio]
 
 [include overview/protocols.qbk]
+[include overview/other_protocols.qbk]
 [include overview/iostreams.qbk]
 [include overview/bsd_sockets.qbk]
 
diff --git a/asio/src/doc/overview/coroutine.qbk b/asio/src/doc/overview/coroutine.qbk
new file mode 100644
index 0000000..3295a38
--- /dev/null
+++ b/asio/src/doc/overview/coroutine.qbk
@@ -0,0 +1,51 @@
+[/
+ / Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:coroutine Stackless Coroutines]
+
+The [link asio.reference.coroutine `coroutine`] class provides support for
+stackless coroutines. Stackless coroutines enable programs to implement
+asynchronous logic in a synchronous manner, with minimal overhead, as shown in
+the following example:
+
+  struct session : asio::coroutine
+  {
+    boost::shared_ptr<tcp::socket> socket_;
+    boost::shared_ptr<std::vector<char> > buffer_;
+
+    session(boost::shared_ptr<tcp::socket> socket)
+      : socket_(socket),
+        buffer_(new std::vector<char>(1024))
+    {
+    }
+
+    void operator()(asio::error_code ec = asio::error_code(), std::size_t n = 0)
+    {
+      if (!ec) reenter (this)
+      {
+        for (;;)
+        {
+          yield socket_->async_read_some(asio::buffer(*buffer_), *this);
+          yield asio::async_write(*socket_, asio::buffer(*buffer_, n), *this);
+        }
+      }
+    }
+  };
+
+The `coroutine` class is used in conjunction with the pseudo-keywords
+`reenter`, `yield` and `fork`. These are preprocessor macros, and are
+implemented in terms of a `switch` statement using a technique similar to
+Duff's Device. The [link asio.reference.coroutine `coroutine`] class's
+documentation provides a complete description of these pseudo-keywords.
+
+[heading See Also]
+
+[link asio.reference.coroutine coroutine],
+[link asio.examples.cpp03_examples.http_server_4 HTTP Server 4 example],
+[link asio.overview.core.spawn Stackful Coroutines].
+
+[endsect]
diff --git a/asio/src/doc/overview/cpp2011.qbk b/asio/src/doc/overview/cpp2011.qbk
index ad7ba92..e67129d 100644
--- a/asio/src/doc/overview/cpp2011.qbk
+++ b/asio/src/doc/overview/cpp2011.qbk
@@ -27,6 +27,8 @@
 
 [link asio.overview.cpp2011.chrono Chrono]
 
+[link asio.overview.cpp2011.futures Futures]
+
 [/boostify: non-boost docs start here]
 
 [section:system_error System Errors and Error Codes]
@@ -237,4 +239,37 @@
 
 [endsect]
 
+[section:futures Futures]
+
+The `asio::use_future` special value provides first-class support for returning a
+C++11 `std::future` from an asynchronous operation's initiating function.
+
+To use `asio::use_future`, pass it to an asynchronous operation instead of
+a normal completion handler. For example:
+
+  std::future<std::size_t> length =
+    my_socket.async_read_some(my_buffer, asio::use_future);
+
+Where a handler signature has the form:
+
+  void handler(asio::error_code ec, result_type result);
+
+the initiating function returns a `std::future` templated on `result_type`.
+In the above example, this is `std::size_t`. If the asynchronous operation
+fails, the `error_code` is converted into a `system_error` exception and
+passed back to the caller through the future.
+
+Where a handler signature has the form:
+
+  void handler(asio::error_code ec);
+
+the initiating function returns `std::future<void>`. As above, an error
+is passed back in the future as a `system_error` exception.
+
+[link asio.reference.use_future use_future],
+[link asio.reference.use_future_t use_future_t],
+[link asio.examples.cpp11_examples.futures Futures example (C++11)].
+
+[endsect]
+
 [endsect]
diff --git a/asio/src/doc/overview/other_protocols.qbk b/asio/src/doc/overview/other_protocols.qbk
new file mode 100644
index 0000000..8658b52
--- /dev/null
+++ b/asio/src/doc/overview/other_protocols.qbk
@@ -0,0 +1,94 @@
+[/
+ / Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:other_protocols Support for Other Protocols]
+
+Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can be
+added by implementing the [link asio.reference.Protocol protocol type
+requirements]. However, in many cases these protocols may also be used with
+Asio's generic protocol support. For this, Asio provides the following four
+classes:
+    
+* [link asio.reference.generic__datagram_protocol `generic::datagram_protocol`]
+* [link asio.reference.generic__raw_protocol `generic::raw_protocol`]
+* [link asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`]
+* [link asio.reference.generic__stream_protocol `generic::stream_protocol`]
+    
+These classes implement the [link asio.reference.Protocol protocol type
+requirements], but allow the user to specify the address family (e.g. `AF_INET`)
+and protocol type (e.g. `IPPROTO_TCP`) at runtime. For example:
+
+  asio::generic::stream_protocol::socket my_socket(my_io_service);
+  my_socket.open(asio::generic::stream_protocol(AF_INET, IPPROTO_TCP));
+  ...
+
+An endpoint class template, [link asio.reference.generic__basic_endpoint
+`asio::generic::basic_endpoint`], is included to support these protocol
+classes. This endpoint can hold any other endpoint type, provided its native
+representation fits into a `sockaddr_storage` object. This class will also
+convert from other types that implement the [link asio.reference.Endpoint
+endpoint] type requirements:
+
+  asio::ip::tcp::endpoint my_endpoint1 = ...;
+  asio::generic::stream_protocol::endpoint my_endpoint2(my_endpoint1);
+
+The conversion is implicit, so as to support the following use cases:
+
+  asio::generic::stream_protocol::socket my_socket(my_io_service);
+  asio::ip::tcp::endpoint my_endpoint = ...;
+  my_socket.connect(my_endpoint);
+
+[heading C++11 Move Construction]
+    
+When using C++11, it is possible to perform move construction from a socket (or
+acceptor) object to convert to the more generic protocol's socket (or acceptor)
+type. If the protocol conversion is valid:
+
+  Protocol1 p1 = ...;
+  Protocol2 p2(p1);
+
+then the corresponding socket conversion is allowed:
+
+  Protocol1::socket my_socket1(my_io_service);
+  ...
+  Protocol2::socket my_socket2(std::move(my_socket1));
+
+For example, one possible conversion is from a TCP socket to a generic
+stream-oriented socket:
+
+  asio::ip::tcp::socket my_socket1(my_io_service);
+  ...
+  asio::generic::stream_protocol::socket my_socket2(std::move(my_socket1));
+
+These conversions are also available for move-assignment.
+
+These conversions are not limited to the above generic protocol classes.
+User-defined protocols may take advantage of this feature by similarly ensuring
+the conversion from `Protocol1` to `Protocol2` is valid, as above.
+
+[heading Accepting Generic Sockets]
+
+As a convenience, a socket acceptor's `accept()` and `async_accept()` functions
+can directly accept into a different protocol's socket type, provided the
+corresponding protocol conversion is valid. For example, the following is
+supported because the protocol `asio::ip::tcp` is convertible to
+`asio::generic::stream_protocol`:
+
+  asio::ip::tcp::acceptor my_acceptor(my_io_service);
+  ...
+  asio::generic::stream_protocol::socket my_socket(my_io_service);
+  my_acceptor.accept(my_socket);
+
+[heading See Also]
+
+[link asio.reference.generic__datagram_protocol `generic::datagram_protocol`],
+[link asio.reference.generic__raw_protocol `generic::raw_protocol`],
+[link asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`],
+[link asio.reference.generic__stream_protocol `generic::stream_protocol`],
+[link asio.reference.Protocol protocol type requirements].
+
+[endsect]
diff --git a/asio/src/doc/overview/protocols.qbk b/asio/src/doc/overview/protocols.qbk
index 2cfe53b..b271292 100644
--- a/asio/src/doc/overview/protocols.qbk
+++ b/asio/src/doc/overview/protocols.qbk
@@ -138,12 +138,6 @@
 asio.reference.basic_raw_socket.async_send_to async_send_to()] member
 functions.
 
-[heading Other Protocols]
-
-Support for other socket protocols (such as Bluetooth or IRCOMM sockets) can be
-added by implementing the [link asio.reference.Protocol Protocol] type
-requirements.
-
 [heading See Also]
 
 [link asio.reference.ip__tcp ip::tcp],
diff --git a/asio/src/doc/overview/spawn.qbk b/asio/src/doc/overview/spawn.qbk
new file mode 100644
index 0000000..928e883
--- /dev/null
+++ b/asio/src/doc/overview/spawn.qbk
@@ -0,0 +1,102 @@
+[/
+ / Copyright (c) 2003-2013 Christopher M. Kohlhoff (chris at kohlhoff dot com)
+ /
+ / Distributed under the Boost Software License, Version 1.0. (See accompanying
+ / file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+ /]
+
+[section:spawn Stackful Coroutines]
+
+The [link asio.reference.spawn `spawn()`] function is a high-level wrapper for
+running stackful coroutines. It is based on the Boost.Coroutine library. The
+`spawn()` function enables programs to implement asynchronous logic in a
+synchronous manner, as shown in the following example:
+
+  asio::spawn(my_strand, do_echo);
+
+  // ...
+
+  void do_echo(asio::yield_context yield)
+  {
+    try
+    {
+      char data[128];
+      for (;;)
+      {
+        std::size_t length =
+          my_socket.async_read_some(
+            asio::buffer(data), yield);
+
+        asio::async_write(my_socket,
+            asio::buffer(data, length), yield);
+      }
+    }
+    catch (std::exception& e)
+    {
+      // ...
+    }
+  }
+
+The first argument to `spawn()` may be a
+[link asio.reference.io_service__strand `strand`],
+[link asio.reference.io_service `io_service`], or
+[link asio.reference.CompletionHandler completion handler].
+This argument determines the context in which the coroutine is permitted to
+execute. For example, a server's per-client object may consist of multiple
+coroutines; they should all run on the same `strand` so that no explicit
+synchronisation is required.
+
+The second argument is a function object with signature:
+
+  void coroutine(asio::yield_context yield);
+
+that specifies the code to be run as part of the coroutine. The parameter
+`yield` may be passed to an asynchronous operation in place of the completion
+handler, as in:
+
+  std::size_t length =
+    my_socket.async_read_some(
+      asio::buffer(data), yield);
+
+This starts the asynchronous operation and suspends the coroutine. The
+coroutine will be resumed automatically when the asynchronous operation
+completes.
+
+Where an asynchronous operation's handler signature has the form:
+
+  void handler(asio::error_code ec, result_type result);
+
+the initiating function returns the result_type. In the `async_read_some`
+example above, this is `size_t`. If the asynchronous operation fails, the
+`error_code` is converted into a `system_error` exception and thrown.
+
+Where a handler signature has the form:
+
+  void handler(asio::error_code ec);
+
+the initiating function returns `void`. As above, an error is passed back to
+the coroutine as a `system_error` exception.
+
+To collect the `error_code` from an operation, rather than have it throw an
+exception, associate the output variable with the `yield_context` as follows:
+
+  asio::error_code ec;
+  std::size_t length =
+    my_socket.async_read_some(
+      asio::buffer(data), yield[ec]);
+  
+[*Note:] if `spawn()` is used with a custom completion handler of type
+`Handler`, the function object signature is actually:
+  
+  void coroutine(asio::basic_yield_context<Handler> yield);
+
+[heading See Also]
+
+[link asio.reference.spawn spawn],
+[link asio.reference.yield_context yield_context],
+[link asio.reference.basic_yield_context basic_yield_context],
+[link asio.examples.cpp03_examples.spawn Spawn example (C++03)],
+[link asio.examples.cpp11_examples.spawn Spawn example (C++11)],
+[link asio.overview.core.coroutine Stackless Coroutines].
+
+[endsect]
diff --git a/asio/src/doc/quickref.xml b/asio/src/doc/quickref.xml
index 21047fd..7cc799f 100644
--- a/asio/src/doc/quickref.xml
+++ b/asio/src/doc/quickref.xml
@@ -28,6 +28,7 @@
           <simplelist type="vert" columns="1">
             <member><link linkend="asio.reference.const_buffer">const_buffer</link></member>
             <member><link linkend="asio.reference.const_buffers_1">const_buffers_1</link></member>
+            <member><link linkend="asio.reference.coroutine">coroutine</link></member>
             <member><link linkend="asio.reference.error_code">error_code</link></member>
             <member><link linkend="asio.reference.invalid_service_owner">invalid_service_owner</link></member>
             <member><link linkend="asio.reference.io_service">io_service</link></member>
@@ -42,11 +43,14 @@
             <member><link linkend="asio.reference.streambuf">streambuf</link></member>
             <member><link linkend="asio.reference.system_error">system_error</link></member>
             <member><link linkend="asio.reference.thread">thread</link></member>
+            <member><link linkend="asio.reference.use_future_t">use_future_t</link></member>
+            <member><link linkend="asio.reference.yield_context">yield_context</link></member>
           </simplelist>
           <bridgehead renderas="sect3">Class Templates</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="asio.reference.basic_io_object">basic_io_object</link></member>
             <member><link linkend="asio.reference.basic_streambuf">basic_streambuf</link></member>
+            <member><link linkend="asio.reference.basic_yield_context">basic_yield_context</link></member>
             <member><link linkend="asio.reference.buffered_read_stream">buffered_read_stream</link></member>
             <member><link linkend="asio.reference.buffered_stream">buffered_stream</link></member>
             <member><link linkend="asio.reference.buffered_write_stream">buffered_write_stream</link></member>
@@ -60,6 +64,7 @@
             <member><link linkend="asio.reference.asio_handler_allocate">asio_handler_allocate</link></member>
             <member><link linkend="asio.reference.asio_handler_deallocate">asio_handler_deallocate</link></member>
             <member><link linkend="asio.reference.asio_handler_invoke">asio_handler_invoke</link></member>
+            <member><link linkend="asio.reference.asio_handler_is_continuation">asio_handler_is_continuation</link></member>
             <member><link linkend="asio.reference.async_read">async_read</link></member>
             <member><link linkend="asio.reference.async_read_at">async_read_at</link></member>
             <member><link linkend="asio.reference.async_read_until">async_read_until</link></member>
@@ -75,6 +80,7 @@
             <member><link linkend="asio.reference.read">read</link></member>
             <member><link linkend="asio.reference.read_at">read_at</link></member>
             <member><link linkend="asio.reference.read_until">read_until</link></member>
+            <member><link linkend="asio.reference.spawn">spawn</link></member>
             <member><link linkend="asio.reference.transfer_all">transfer_all</link></member>
             <member><link linkend="asio.reference.transfer_at_least">transfer_at_least</link></member>
             <member><link linkend="asio.reference.transfer_exactly">transfer_exactly</link></member>
@@ -84,7 +90,11 @@
           </simplelist>
         </entry>
         <entry valign="top">
-          <bridgehead renderas="sect3">Placeholders</bridgehead>
+          <bridgehead renderas="sect3">Special Values</bridgehead>
+          <simplelist type="vert" columns="1">
+            <member><link linkend="asio.reference.use_future">use_future</link></member>
+          </simplelist>
+          <bridgehead renderas="sect3">Boost.Bind Placeholders</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="asio.reference.placeholders__bytes_transferred">placeholders::bytes_transferred</link></member>
             <member><link linkend="asio.reference.placeholders__error">placeholders::error</link></member>
@@ -100,6 +110,8 @@
           </simplelist>
           <bridgehead renderas="sect3">Type Traits</bridgehead>
           <simplelist type="vert" columns="1">
+            <member><link linkend="asio.reference.async_result">async_result</link></member>
+            <member><link linkend="asio.reference.handler_type">handler_type</link></member>
             <member><link linkend="asio.reference.is_match_condition">is_match_condition</link></member>
             <member><link linkend="asio.reference.is_read_buffered">is_read_buffered</link></member>
             <member><link linkend="asio.reference.is_write_buffered">is_write_buffered</link></member>
@@ -149,6 +161,19 @@
         <entry valign="top">
           <bridgehead renderas="sect3">Classes</bridgehead>
           <simplelist type="vert" columns="1">
+            <member><link linkend="asio.reference.generic__datagram_protocol">generic::datagram_protocol</link></member>
+            <member><link linkend="asio.reference.generic__datagram_protocol.endpoint">generic::datagram_protocol::endpoint</link></member>
+            <member><link linkend="asio.reference.generic__datagram_protocol.socket">generic::datagram_protocol::socket</link></member>
+            <member><link linkend="asio.reference.generic__raw_protocol">generic::raw_protocol</link></member>
+            <member><link linkend="asio.reference.generic__raw_protocol.endpoint">generic::raw_protocol::endpoint</link></member>
+            <member><link linkend="asio.reference.generic__raw_protocol.socket">generic::raw_protocol::socket</link></member>
+            <member><link linkend="asio.reference.generic__seq_packet_protocol">generic::seq_packet_protocol</link></member>
+            <member><link linkend="asio.reference.generic__seq_packet_protocol.endpoint">generic::seq_packet_protocol::endpoint</link></member>
+            <member><link linkend="asio.reference.generic__seq_packet_protocol.socket">generic::seq_packet_protocol::socket</link></member>
+            <member><link linkend="asio.reference.generic__stream_protocol">generic::stream_protocol</link></member>
+            <member><link linkend="asio.reference.generic__stream_protocol.endpoint">generic::stream_protocol::endpoint</link></member>
+            <member><link linkend="asio.reference.generic__stream_protocol.iostream">generic::stream_protocol::iostream</link></member>
+            <member><link linkend="asio.reference.generic__stream_protocol.socket">generic::stream_protocol::socket</link></member>
             <member><link linkend="asio.reference.ip__address">ip::address</link></member>
             <member><link linkend="asio.reference.ip__address_v4">ip::address_v4</link></member>
             <member><link linkend="asio.reference.ip__address_v6">ip::address_v6</link></member>
@@ -169,14 +194,14 @@
             <member><link linkend="asio.reference.ip__udp.socket">ip::udp::socket</link></member>
             <member><link linkend="asio.reference.socket_base">socket_base</link></member>
           </simplelist>
+        </entry>
+        <entry valign="top">
           <bridgehead renderas="sect3">Free Functions</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="asio.reference.async_connect">async_connect</link></member>
             <member><link linkend="asio.reference.connect">connect</link></member>
             <member><link linkend="asio.reference.ip__host_name">ip::host_name</link></member>
           </simplelist>
-        </entry>
-        <entry valign="top">
           <bridgehead renderas="sect3">Class Templates</bridgehead>
           <simplelist type="vert" columns="1">
             <member><link linkend="asio.reference.basic_datagram_socket">basic_datagram_socket</link></member>
@@ -188,6 +213,7 @@
             <member><link linkend="asio.reference.basic_socket_iostream">basic_socket_iostream</link></member>
             <member><link linkend="asio.reference.basic_socket_streambuf">basic_socket_streambuf</link></member>
             <member><link linkend="asio.reference.basic_stream_socket">basic_stream_socket</link></member>
+            <member><link linkend="asio.reference.generic__basic_endpoint">generic::basic_endpoint</link></member>
             <member><link linkend="asio.reference.ip__basic_endpoint">ip::basic_endpoint</link></member>
             <member><link linkend="asio.reference.ip__basic_resolver">ip::basic_resolver</link></member>
             <member><link linkend="asio.reference.ip__basic_resolver_entry">ip::basic_resolver_entry</link></member>
diff --git a/asio/src/doc/reference.dox b/asio/src/doc/reference.dox
index 7c39bad..36c9940 100644
--- a/asio/src/doc/reference.dox
+++ b/asio/src/doc/reference.dox
@@ -74,6 +74,7 @@
 #---------------------------------------------------------------------------
 INPUT                  = ./../../include/asio.hpp \
                          ./../../include/asio \
+                         ./../../include/asio/generic \
                          ./../../include/asio/impl \
                          ./../../include/asio/ip \
                          ./../../include/asio/local \
diff --git a/asio/src/doc/reference.qbk b/asio/src/doc/reference.qbk
index 1a1f50a..28080c9 100644
--- a/asio/src/doc/reference.qbk
+++ b/asio/src/doc/reference.qbk
@@ -15,6 +15,7 @@
 [include requirements/AsyncRandomAccessWriteDevice.qbk]
 [include requirements/AsyncReadStream.qbk]
 [include requirements/AsyncWriteStream.qbk]
+[include requirements/BufferedHandshakeHandler.qbk]
 [include requirements/CompletionHandler.qbk]
 [include requirements/ComposedConnectHandler.qbk]
 [include requirements/ConnectHandler.qbk]
@@ -111,9 +112,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -167,9 +168,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_alloc_hook.hpp]
+['Header: ][^asio/handler_alloc_hook.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -197,9 +198,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_alloc_hook.hpp]
+['Header: ][^asio/handler_alloc_hook.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -252,9 +253,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_invoke_hook.hpp]
+['Header: ][^asio/handler_invoke_hook.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -296,9 +297,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_continuation_hook.hpp]
+['Header: ][^asio/handler_continuation_hook.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -315,7 +316,7 @@
       typename ``[link asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload1 async_connect]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload1 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ComposedConnectHandler handler);
@@ -326,7 +327,7 @@
       typename ``[link asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload2 async_connect]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload2 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -339,7 +340,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload3 async_connect]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload3 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ConnectCondition connect_condition,
@@ -352,7 +353,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload4 async_connect]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_connect.overload4 async_connect]``(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -362,9 +363,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/connect.hpp]
+['Header: ][^asio/connect.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_connect (1 of 4 overloads)]
@@ -378,7 +379,7 @@
       typename ``[link asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ComposedConnectHandler handler);
@@ -473,7 +474,7 @@
       typename ``[link asio.reference.SocketService SocketService]``,
       typename Iterator,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -568,7 +569,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       ConnectCondition connect_condition,
@@ -698,7 +699,7 @@
       typename Iterator,
       typename ConnectCondition,
       typename ``[link asio.reference.ComposedConnectHandler ComposedConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       basic_socket< Protocol, SocketService > & s,
       Iterator begin,
       Iterator end,
@@ -826,7 +827,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read.overload1 async_read]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read.overload1 async_read]``(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -837,7 +838,7 @@
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read.overload2 async_read]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read.overload2 async_read]``(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -848,7 +849,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read.overload3 async_read]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read.overload3 async_read]``(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
@@ -859,7 +860,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read.overload4 async_read]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read.overload4 async_read]``(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -868,9 +869,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read.hpp]
+['Header: ][^asio/read.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_read (1 of 4 overloads)]
@@ -883,7 +884,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -897,7 +898,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -966,7 +967,7 @@
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       const MutableBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -1049,7 +1050,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       ReadHandler handler);
@@ -1063,7 +1064,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1122,7 +1123,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read(
       AsyncReadStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -1137,7 +1138,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other read operations (such as async\_read, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1195,7 +1196,7 @@
       typename ``[link asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload1 async_read_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload1 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       const MutableBufferSequence & buffers,
@@ -1207,7 +1208,7 @@
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload2 async_read_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload2 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       const MutableBufferSequence & buffers,
@@ -1219,7 +1220,7 @@
       typename ``[link asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload3 async_read_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload3 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -1231,7 +1232,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload4 async_read_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_at.overload4 async_read_at]``(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -1241,9 +1242,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read_at.hpp]
+['Header: ][^asio/read_at.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_read_at (1 of 4 overloads)]
@@ -1256,7 +1257,7 @@
       typename ``[link asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       const MutableBufferSequence & buffers,
@@ -1342,7 +1343,7 @@
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       const MutableBufferSequence & buffers,
@@ -1428,7 +1429,7 @@
       typename ``[link asio.reference.AsyncRandomAccessReadDevice AsyncRandomAccessReadDevice]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -1501,7 +1502,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_at(
       AsyncRandomAccessReadDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -1574,7 +1575,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload1 async_read_until]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload1 async_read_until]``(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       char delim,
@@ -1585,7 +1586,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload2 async_read_until]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload2 async_read_until]``(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       const std::string & delim,
@@ -1596,7 +1597,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload3 async_read_until]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload3 async_read_until]``(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       const boost::regex & expr,
@@ -1608,7 +1609,7 @@
       typename Allocator,
       typename MatchCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload4 async_read_until]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_read_until.overload4 async_read_until]``(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
@@ -1618,9 +1619,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read_until.hpp]
+['Header: ][^asio/read_until.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_read_until (1 of 4 overloads)]
@@ -1633,7 +1634,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_until(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       char delim,
@@ -1648,7 +1649,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1738,7 +1739,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_until(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       const std::string & delim,
@@ -1753,7 +1754,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains the delimiter, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1843,7 +1844,7 @@
       typename ``[link asio.reference.AsyncReadStream AsyncReadStream]``,
       typename Allocator,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_until(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       const boost::regex & expr,
@@ -1858,7 +1859,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the streambuf's get area already contains data that matches the regular expression, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the streambuf's get area already contains data that matches the regular expression, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -1950,7 +1951,7 @@
       typename Allocator,
       typename MatchCondition,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_until(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_until(
       AsyncReadStream & s,
       asio::basic_streambuf< Allocator > & b,
       MatchCondition match_condition,
@@ -1966,7 +1967,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a [*composed operation]. If the match condition function object already indicates a match, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_read\_some function, and is known as a ['composed operation]. If the match condition function object already indicates a match, this asynchronous operation completes immediately. The program must ensure that the stream performs no other read operations (such as async\_read, async\_read\_until, the stream's async\_read\_some function, or any other composed operations that perform reads) until this operation completes.
 
 
 [heading Parameters]
@@ -2122,9 +2123,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/async_result.hpp]
+['Header: ][^asio/async_result.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_result async_result::async_result]
@@ -2170,9 +2171,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/async_result.hpp]
+['Header: ][^asio/async_result.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -2191,7 +2192,7 @@
       typename ``[link asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write.overload1 async_write]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write.overload1 async_write]``(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -2202,7 +2203,7 @@
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write.overload2 async_write]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write.overload2 async_write]``(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -2213,7 +2214,7 @@
       typename ``[link asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename Allocator,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write.overload3 async_write]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write.overload3 async_write]``(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
@@ -2224,7 +2225,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write.overload4 async_write]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write.overload4 async_write]``(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -2233,9 +2234,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/write.hpp]
+['Header: ][^asio/write.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_write (1 of 4 overloads)]
@@ -2248,7 +2249,7 @@
       typename ``[link asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -2262,7 +2263,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2317,7 +2318,7 @@
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       const ConstBufferSequence & buffers,
       CompletionCondition completion_condition,
@@ -2332,7 +2333,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2401,7 +2402,7 @@
       typename ``[link asio.reference.AsyncWriteStream AsyncWriteStream]``,
       typename Allocator,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       WriteHandler handler);
@@ -2415,7 +2416,7 @@
 
 * An error occurred.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2460,7 +2461,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write(
       AsyncWriteStream & s,
       basic_streambuf< Allocator > & b,
       CompletionCondition completion_condition,
@@ -2475,7 +2476,7 @@
 
 * The completion\_condition function object returns 0.
 
-This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a [*composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
+This operation is implemented in terms of zero or more calls to the stream's async\_write\_some function, and is known as a ['composed operation]. The program must ensure that the stream performs no other write operations (such as async\_write, the stream's async\_write\_some function, or any other composed operations that perform writes) until this operation completes.
 
 
 [heading Parameters]
@@ -2532,7 +2533,7 @@
       typename ``[link asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload1 async_write_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload1 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       const ConstBufferSequence & buffers,
@@ -2544,7 +2545,7 @@
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload2 async_write_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload2 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       const ConstBufferSequence & buffers,
@@ -2556,7 +2557,7 @@
       typename ``[link asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename Allocator,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload3 async_write_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload3 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -2568,7 +2569,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload4 async_write_at]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.async_write_at.overload4 async_write_at]``(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -2578,9 +2579,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/write_at.hpp]
+['Header: ][^asio/write_at.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 async_write_at (1 of 4 overloads)]
@@ -2593,7 +2594,7 @@
       typename ``[link asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       const ConstBufferSequence & buffers,
@@ -2665,7 +2666,7 @@
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       const ConstBufferSequence & buffers,
@@ -2752,7 +2753,7 @@
       typename ``[link asio.reference.AsyncRandomAccessWriteDevice AsyncRandomAccessWriteDevice]``,
       typename Allocator,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -2814,7 +2815,7 @@
       typename Allocator,
       typename CompletionCondition,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_at(
       AsyncRandomAccessWriteDevice & d,
       uint64_t offset,
       basic_streambuf< Allocator > & b,
@@ -3106,7 +3107,9 @@
 
      Construct a basic_datagram_socket on an existing native socket. 
 
-     Move-construct a basic_datagram_socket from another. ]
+     Move-construct a basic_datagram_socket from another. 
+
+     Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -3192,7 +3195,9 @@
   
   [
     [[link asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_datagram_socket from another. ]
+    [Move-assign a basic_datagram_socket from another. 
+
+     Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -3300,17 +3305,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_datagram_socket::assign]
 
@@ -3382,7 +3387,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -3447,7 +3452,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive.overload1 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.async_receive.overload1 more...]]``
@@ -3455,7 +3460,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive.overload2 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -3471,7 +3476,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -3528,7 +3533,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -3579,7 +3584,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive_from.overload1 async_receive_from]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive_from.overload1 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -3588,7 +3593,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive_from.overload2 async_receive_from]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_receive_from.overload2 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -3605,7 +3610,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -3661,7 +3666,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -3710,7 +3715,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send.overload1 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.async_send.overload1 more...]]``
@@ -3718,7 +3723,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send.overload2 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -3734,7 +3739,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -3791,7 +3796,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -3842,7 +3847,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send_to.overload1 async_send_to]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send_to.overload1 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -3851,7 +3856,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send_to.overload2 async_send_to]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_datagram_socket.async_send_to.overload2 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -3868,7 +3873,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -3926,7 +3931,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -4189,7 +4194,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.basic_datagram_socket.overload5 more...]]``
 
 
-[section:overload1 basic_datagram_socket::basic_datagram_socket (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.DatagramSocketService DatagramSocketService1]``>
+  ``[link asio.reference.basic_datagram_socket.basic_datagram_socket.overload6 basic_datagram_socket]``(
+      basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.basic_datagram_socket.overload6 more...]]``
+
+
+[section:overload1 basic_datagram_socket::basic_datagram_socket (1 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] without opening it. 
@@ -4218,7 +4235,7 @@
 
 
 
-[section:overload2 basic_datagram_socket::basic_datagram_socket (2 of 5 overloads)]
+[section:overload2 basic_datagram_socket::basic_datagram_socket (2 of 6 overloads)]
 
 
 Construct and open a [link asio.reference.basic_datagram_socket `basic_datagram_socket`]. 
@@ -4260,7 +4277,7 @@
 
 
 
-[section:overload3 basic_datagram_socket::basic_datagram_socket (3 of 5 overloads)]
+[section:overload3 basic_datagram_socket::basic_datagram_socket (3 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`], opening it and binding it to the given local endpoint. 
@@ -4302,7 +4319,7 @@
 
 
 
-[section:overload4 basic_datagram_socket::basic_datagram_socket (4 of 5 overloads)]
+[section:overload4 basic_datagram_socket::basic_datagram_socket (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] on an existing native socket. 
@@ -4347,7 +4364,7 @@
 
 
 
-[section:overload5 basic_datagram_socket::basic_datagram_socket (5 of 5 overloads)]
+[section:overload5 basic_datagram_socket::basic_datagram_socket (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 
@@ -4380,6 +4397,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_datagram_socket::basic_datagram_socket (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.DatagramSocketService DatagramSocketService1]``>
+  basic_datagram_socket(
+      basic_datagram_socket< Protocol1, DatagramSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves a datagram socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_datagram_socket::bind]
@@ -4553,9 +4608,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -4596,9 +4651,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5000,9 +5055,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5054,9 +5109,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5108,9 +5163,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5129,9 +5184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5425,9 +5480,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5629,9 +5684,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -5684,9 +5739,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -6086,7 +6141,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -6172,7 +6229,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -6265,18 +6324,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -6349,9 +6408,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -6442,9 +6501,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -6814,9 +6873,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -6992,9 +7051,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -7121,13 +7180,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_datagram_socket::operator=]
 
 [indexterm2 operator=..basic_datagram_socket] 
 Move-assign a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 
 
 
+  basic_datagram_socket & ``[link asio.reference.basic_datagram_socket.operator_eq_.overload1 operator=]``(
+      basic_datagram_socket && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.DatagramSocketService DatagramSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & ``[link asio.reference.basic_datagram_socket.operator_eq_.overload2 operator=]``(
+      basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_datagram_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_datagram_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from another. 
+
+
   basic_datagram_socket & operator=(
       basic_datagram_socket && other);
 
@@ -7156,6 +7236,45 @@
 
 
 
+[section:overload2 basic_datagram_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_datagram_socket `basic_datagram_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.DatagramSocketService DatagramSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_datagram_socket >::type & operator=(
+      basic_datagram_socket< Protocol1, DatagramSocketService1 > && other);
+
+
+This assignment operator moves a datagram socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_datagram_socket `basic_datagram_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_datagram_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_datagram_socket] 
@@ -7168,9 +7287,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -7413,9 +7532,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -7657,9 +7776,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -7828,9 +7947,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -8073,9 +8192,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -8127,9 +8246,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -8365,9 +8484,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_datagram_socket.hpp]
+['Header: ][^asio/basic_datagram_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -8821,9 +8940,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
@@ -8908,9 +9027,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_wait basic_deadline_timer::async_wait]
@@ -8921,7 +9040,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -9309,9 +9428,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -9758,9 +9877,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -9806,9 +9925,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -9827,9 +9946,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -9848,9 +9967,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_deadline_timer.hpp]
+['Header: ][^asio/basic_deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -10031,9 +10150,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_io_object.hpp]
+['Header: ][^asio/basic_io_object.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:basic_io_object basic_io_object::basic_io_object]
 
@@ -10241,9 +10360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_io_object.hpp]
+['Header: ][^asio/basic_io_object.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -10313,9 +10432,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_io_object.hpp]
+['Header: ][^asio/basic_io_object.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -10572,7 +10691,9 @@
 
      Construct a basic_raw_socket on an existing native socket. 
 
-     Move-construct a basic_raw_socket from another. ]
+     Move-construct a basic_raw_socket from another. 
+
+     Move-construct a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -10658,7 +10779,9 @@
   
   [
     [[link asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_raw_socket from another. ]
+    [Move-assign a basic_raw_socket from another. 
+
+     Move-assign a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -10766,17 +10889,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_raw_socket::assign]
 
@@ -10848,7 +10971,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -10913,7 +11036,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive.overload1 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.async_receive.overload1 more...]]``
@@ -10921,7 +11044,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive.overload2 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -10937,7 +11060,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -10994,7 +11117,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -11045,7 +11168,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive_from.overload1 async_receive_from]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive_from.overload1 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -11054,7 +11177,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive_from.overload2 async_receive_from]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_receive_from.overload2 async_receive_from]``(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -11071,7 +11194,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       ReadHandler handler);
@@ -11127,7 +11250,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
       socket_base::message_flags flags,
@@ -11176,7 +11299,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send.overload1 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.async_send.overload1 more...]]``
@@ -11184,7 +11307,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send.overload2 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -11200,7 +11323,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -11257,7 +11380,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -11308,7 +11431,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send_to.overload1 async_send_to]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send_to.overload1 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -11317,7 +11440,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send_to.overload2 async_send_to]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_raw_socket.async_send_to.overload2 async_send_to]``(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -11334,7 +11457,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       WriteHandler handler);
@@ -11392,7 +11515,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
       socket_base::message_flags flags,
@@ -11655,7 +11778,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.basic_raw_socket.overload5 more...]]``
 
 
-[section:overload1 basic_raw_socket::basic_raw_socket (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.RawSocketService RawSocketService1]``>
+  ``[link asio.reference.basic_raw_socket.basic_raw_socket.overload6 basic_raw_socket]``(
+      basic_raw_socket< Protocol1, RawSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.basic_raw_socket.overload6 more...]]``
+
+
+[section:overload1 basic_raw_socket::basic_raw_socket (1 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_raw_socket `basic_raw_socket`] without opening it. 
@@ -11684,7 +11819,7 @@
 
 
 
-[section:overload2 basic_raw_socket::basic_raw_socket (2 of 5 overloads)]
+[section:overload2 basic_raw_socket::basic_raw_socket (2 of 6 overloads)]
 
 
 Construct and open a [link asio.reference.basic_raw_socket `basic_raw_socket`]. 
@@ -11726,7 +11861,7 @@
 
 
 
-[section:overload3 basic_raw_socket::basic_raw_socket (3 of 5 overloads)]
+[section:overload3 basic_raw_socket::basic_raw_socket (3 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_raw_socket `basic_raw_socket`], opening it and binding it to the given local endpoint. 
@@ -11768,7 +11903,7 @@
 
 
 
-[section:overload4 basic_raw_socket::basic_raw_socket (4 of 5 overloads)]
+[section:overload4 basic_raw_socket::basic_raw_socket (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_raw_socket `basic_raw_socket`] on an existing native socket. 
@@ -11813,7 +11948,7 @@
 
 
 
-[section:overload5 basic_raw_socket::basic_raw_socket (5 of 5 overloads)]
+[section:overload5 basic_raw_socket::basic_raw_socket (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_raw_socket `basic_raw_socket`] from another. 
@@ -11846,6 +11981,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_raw_socket::basic_raw_socket (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.RawSocketService RawSocketService1]``>
+  basic_raw_socket(
+      basic_raw_socket< Protocol1, RawSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves a raw socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_raw_socket::bind]
@@ -12019,9 +12192,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12062,9 +12235,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12466,9 +12639,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12520,9 +12693,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12574,9 +12747,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12595,9 +12768,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -12891,9 +13064,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -13095,9 +13268,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -13150,9 +13323,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -13552,7 +13725,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -13638,7 +13813,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -13731,18 +13908,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -13815,9 +13992,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -13908,9 +14085,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -14280,9 +14457,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -14458,9 +14635,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -14587,13 +14764,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_raw_socket::operator=]
 
 [indexterm2 operator=..basic_raw_socket] 
 Move-assign a [link asio.reference.basic_raw_socket `basic_raw_socket`] from another. 
 
 
+  basic_raw_socket & ``[link asio.reference.basic_raw_socket.operator_eq_.overload1 operator=]``(
+      basic_raw_socket && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.RawSocketService RawSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & ``[link asio.reference.basic_raw_socket.operator_eq_.overload2 operator=]``(
+      basic_raw_socket< Protocol1, RawSocketService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_raw_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_raw_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_raw_socket `basic_raw_socket`] from another. 
+
+
   basic_raw_socket & operator=(
       basic_raw_socket && other);
 
@@ -14622,6 +14820,45 @@
 
 
 
+[section:overload2 basic_raw_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_raw_socket `basic_raw_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.RawSocketService RawSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_raw_socket >::type & operator=(
+      basic_raw_socket< Protocol1, RawSocketService1 > && other);
+
+
+This assignment operator moves a raw socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_raw_socket `basic_raw_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_raw_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_raw_socket] 
@@ -14634,9 +14871,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -14879,9 +15116,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -15123,9 +15360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -15294,9 +15531,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -15539,9 +15776,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -15593,9 +15830,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -15831,9 +16068,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_raw_socket.hpp]
+['Header: ][^asio/basic_raw_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -16354,7 +16591,9 @@
 
      Construct a basic_seq_packet_socket on an existing native socket. 
 
-     Move-construct a basic_seq_packet_socket from another. ]
+     Move-construct a basic_seq_packet_socket from another. 
+
+     Move-construct a basic_seq_packet_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -16440,7 +16679,9 @@
   
   [
     [[link asio.reference.basic_seq_packet_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_seq_packet_socket from another. ]
+    [Move-assign a basic_seq_packet_socket from another. 
+
+     Move-assign a basic_seq_packet_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -16540,17 +16781,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_seq_packet_socket::assign]
 
@@ -16622,7 +16863,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -16687,7 +16928,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_seq_packet_socket.async_receive.overload1 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_seq_packet_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags & out_flags,
       ReadHandler handler);
@@ -16696,7 +16937,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_seq_packet_socket.async_receive.overload2 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_seq_packet_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags in_flags,
       socket_base::message_flags & out_flags,
@@ -16713,7 +16954,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags & out_flags,
       ReadHandler handler);
@@ -16768,7 +17009,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags in_flags,
       socket_base::message_flags & out_flags,
@@ -16830,7 +17071,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -17098,7 +17339,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload5 more...]]``
 
 
-[section:overload1 basic_seq_packet_socket::basic_seq_packet_socket (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+  ``[link asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload6 basic_seq_packet_socket]``(
+      basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_seq_packet_socket.basic_seq_packet_socket.overload6 more...]]``
+
+
+[section:overload1 basic_seq_packet_socket::basic_seq_packet_socket (1 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] without opening it. 
@@ -17127,7 +17380,7 @@
 
 
 
-[section:overload2 basic_seq_packet_socket::basic_seq_packet_socket (2 of 5 overloads)]
+[section:overload2 basic_seq_packet_socket::basic_seq_packet_socket (2 of 6 overloads)]
 
 
 Construct and open a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`]. 
@@ -17169,7 +17422,7 @@
 
 
 
-[section:overload3 basic_seq_packet_socket::basic_seq_packet_socket (3 of 5 overloads)]
+[section:overload3 basic_seq_packet_socket::basic_seq_packet_socket (3 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`], opening it and binding it to the given local endpoint. 
@@ -17211,7 +17464,7 @@
 
 
 
-[section:overload4 basic_seq_packet_socket::basic_seq_packet_socket (4 of 5 overloads)]
+[section:overload4 basic_seq_packet_socket::basic_seq_packet_socket (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] on an existing native socket. 
@@ -17256,7 +17509,7 @@
 
 
 
-[section:overload5 basic_seq_packet_socket::basic_seq_packet_socket (5 of 5 overloads)]
+[section:overload5 basic_seq_packet_socket::basic_seq_packet_socket (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 
@@ -17289,6 +17542,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_seq_packet_socket::basic_seq_packet_socket (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+  basic_seq_packet_socket(
+      basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves a sequenced packet socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_seq_packet_socket::bind]
@@ -17462,9 +17753,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -17505,9 +17796,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -17909,9 +18200,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -17963,9 +18254,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18017,9 +18308,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18038,9 +18329,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18334,9 +18625,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18538,9 +18829,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18593,9 +18884,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -18995,7 +19286,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -19081,7 +19374,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -19174,18 +19469,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -19258,9 +19553,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -19351,9 +19646,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -19723,9 +20018,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -19901,9 +20196,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20030,13 +20325,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_seq_packet_socket::operator=]
 
 [indexterm2 operator=..basic_seq_packet_socket] 
 Move-assign a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 
 
 
+  basic_seq_packet_socket & ``[link asio.reference.basic_seq_packet_socket.operator_eq_.overload1 operator=]``(
+      basic_seq_packet_socket && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_seq_packet_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & ``[link asio.reference.basic_seq_packet_socket.operator_eq_.overload2 operator=]``(
+      basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_seq_packet_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_seq_packet_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from another. 
+
+
   basic_seq_packet_socket & operator=(
       basic_seq_packet_socket && other);
 
@@ -20065,6 +20381,45 @@
 
 
 
+[section:overload2 basic_seq_packet_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SeqPacketSocketService SeqPacketSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_seq_packet_socket >::type & operator=(
+      basic_seq_packet_socket< Protocol1, SeqPacketSocketService1 > && other);
+
+
+This assignment operator moves a sequenced packet socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_seq_packet_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_seq_packet_socket] 
@@ -20077,9 +20432,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20343,9 +20698,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20397,9 +20752,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20568,9 +20923,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20751,9 +21106,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20805,9 +21160,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -20853,9 +21208,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_seq_packet_socket.hpp]
+['Header: ][^asio/basic_seq_packet_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -21354,17 +21709,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_serial_port::assign]
 
@@ -21424,7 +21779,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -21481,7 +21836,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -22137,9 +22492,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -22415,18 +22770,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -22477,9 +22832,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -22498,9 +22853,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -22866,9 +23221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_serial_port.hpp]
+['Header: ][^asio/basic_serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -23219,9 +23574,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -23276,9 +23631,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_signal_set.hpp]
+['Header: ][^asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:add basic_signal_set::add]
 
@@ -23377,7 +23732,7 @@
 
   template<
       typename ``[link asio.reference.SignalHandler SignalHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       SignalHandler handler);
 
 
@@ -23961,9 +24316,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_signal_set.hpp]
+['Header: ][^asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -24107,9 +24462,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_signal_set.hpp]
+['Header: ][^asio/basic_signal_set.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -24326,7 +24681,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -24412,7 +24769,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -24505,17 +24864,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_socket::assign]
 
@@ -24578,7 +24937,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -24845,7 +25204,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_socket.basic_socket.overload5 more...]]``
 
 
-[section:overload1 basic_socket::basic_socket (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_socket `basic_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketService SocketService1]``>
+  ``[link asio.reference.basic_socket.basic_socket.overload6 basic_socket]``(
+      basic_socket< Protocol1, SocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket.basic_socket.overload6 more...]]``
+
+
+[section:overload1 basic_socket::basic_socket (1 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_socket `basic_socket`] without opening it. 
@@ -24874,7 +25245,7 @@
 
 
 
-[section:overload2 basic_socket::basic_socket (2 of 5 overloads)]
+[section:overload2 basic_socket::basic_socket (2 of 6 overloads)]
 
 
 Construct and open a [link asio.reference.basic_socket `basic_socket`]. 
@@ -24916,7 +25287,7 @@
 
 
 
-[section:overload3 basic_socket::basic_socket (3 of 5 overloads)]
+[section:overload3 basic_socket::basic_socket (3 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_socket `basic_socket`], opening it and binding it to the given local endpoint. 
@@ -24958,7 +25329,7 @@
 
 
 
-[section:overload4 basic_socket::basic_socket (4 of 5 overloads)]
+[section:overload4 basic_socket::basic_socket (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_socket `basic_socket`] on an existing native socket. 
@@ -25003,7 +25374,7 @@
 
 
 
-[section:overload5 basic_socket::basic_socket (5 of 5 overloads)]
+[section:overload5 basic_socket::basic_socket (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_socket `basic_socket`] from another. 
@@ -25036,6 +25407,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_socket::basic_socket (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_socket `basic_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketService SocketService1]``>
+  basic_socket(
+      basic_socket< Protocol1, SocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves a socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_socket::bind]
@@ -25203,9 +25612,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -25246,9 +25655,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -25632,9 +26041,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -25686,9 +26095,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -25740,9 +26149,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -25761,9 +26170,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -26055,9 +26464,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -26254,9 +26663,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -26309,9 +26718,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -26696,7 +27105,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -26782,7 +27193,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -26875,18 +27288,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -26959,9 +27372,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27046,9 +27459,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27409,9 +27822,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27578,9 +27991,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27701,13 +28114,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_socket::operator=]
 
 [indexterm2 operator=..basic_socket] 
 Move-assign a [link asio.reference.basic_socket `basic_socket`] from another. 
 
 
+  basic_socket & ``[link asio.reference.basic_socket.operator_eq_.overload1 operator=]``(
+      basic_socket && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_socket `basic_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketService SocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & ``[link asio.reference.basic_socket.operator_eq_.overload2 operator=]``(
+      basic_socket< Protocol1, SocketService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_socket `basic_socket`] from another. 
+
+
   basic_socket & operator=(
       basic_socket && other);
 
@@ -27736,6 +28170,45 @@
 
 
 
+[section:overload2 basic_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_socket `basic_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketService SocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket >::type & operator=(
+      basic_socket< Protocol1, SocketService1 > && other);
+
+
+This assignment operator moves a socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_socket `basic_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_socket] 
@@ -27748,9 +28221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27802,9 +28275,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -27856,9 +28329,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -28021,9 +28494,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -28075,9 +28548,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -28129,9 +28602,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -28177,9 +28650,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket.hpp]
+['Header: ][^asio/basic_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -28687,7 +29160,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor. 
 
-     Move-construct a basic_socket_acceptor from another. ]
+     Move-construct a basic_socket_acceptor from another. 
+
+     Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -28766,7 +29241,9 @@
   
   [
     [[link asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket_acceptor from another. ]
+    [Move-assign a basic_socket_acceptor from another. 
+
+     Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -28844,9 +29321,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -28867,9 +29344,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:accept basic_socket_acceptor::accept]
 
@@ -28878,16 +29355,20 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``>
   void ``[link asio.reference.basic_socket_acceptor.accept.overload1 accept]``(
-      basic_socket< protocol_type, SocketService > & peer);
+      basic_socket< Protocol1, SocketService > & peer,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
   ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.accept.overload1 more...]]``
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``>
   asio::error_code ``[link asio.reference.basic_socket_acceptor.accept.overload2 accept]``(
-      basic_socket< protocol_type, SocketService > & peer,
-      asio::error_code & ec);
+      basic_socket< Protocol1, SocketService > & peer,
+      asio::error_code & ec,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
   ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.accept.overload2 more...]]``
 
 
@@ -28917,9 +29398,11 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``>
   void accept(
-      basic_socket< protocol_type, SocketService > & peer);
+      basic_socket< Protocol1, SocketService > & peer,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
 
 
 This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.
@@ -28971,10 +29454,12 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``>
   asio::error_code accept(
-      basic_socket< protocol_type, SocketService > & peer,
-      asio::error_code & ec);
+      basic_socket< Protocol1, SocketService > & peer,
+      asio::error_code & ec,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
 
 
 This function is used to accept a new connection from a peer into the given socket. The function call will block until a new connection has been accepted successfully or an error occurs.
@@ -29190,17 +29675,19 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``,
       typename ``[link asio.reference.AcceptHandler AcceptHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_socket_acceptor.async_accept.overload1 async_accept]``(
-      basic_socket< protocol_type, SocketService > & peer,
-      AcceptHandler handler);
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_socket_acceptor.async_accept.overload1 async_accept]``(
+      basic_socket< Protocol1, SocketService > & peer,
+      AcceptHandler handler,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
   ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.async_accept.overload1 more...]]``
 
   template<
       typename ``[link asio.reference.SocketService SocketService]``,
       typename ``[link asio.reference.AcceptHandler AcceptHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_socket_acceptor.async_accept.overload2 async_accept]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_socket_acceptor.async_accept.overload2 async_accept]``(
       basic_socket< protocol_type, SocketService > & peer,
       endpoint_type & peer_endpoint,
       AcceptHandler handler);
@@ -29214,11 +29701,13 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``,
       typename ``[link asio.reference.AcceptHandler AcceptHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_accept(
-      basic_socket< protocol_type, SocketService > & peer,
-      AcceptHandler handler);
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
+      basic_socket< Protocol1, SocketService > & peer,
+      AcceptHandler handler,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
 
 
 This function is used to asynchronously accept a new connection into a socket. The function call always returns immediately.
@@ -29280,7 +29769,7 @@
   template<
       typename ``[link asio.reference.SocketService SocketService]``,
       typename ``[link asio.reference.AcceptHandler AcceptHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_accept(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
       basic_socket< protocol_type, SocketService > & peer,
       endpoint_type & peer_endpoint,
       AcceptHandler handler);
@@ -29364,7 +29853,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload5 more...]]``
 
 
-[section:overload1 basic_socket_acceptor::basic_socket_acceptor (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+  ``[link asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload6 basic_socket_acceptor]``(
+      basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.basic_socket_acceptor.overload6 more...]]``
+
+
+[section:overload1 basic_socket_acceptor::basic_socket_acceptor (1 of 6 overloads)]
 
 
 Construct an acceptor without opening it. 
@@ -29393,7 +29894,7 @@
 
 
 
-[section:overload2 basic_socket_acceptor::basic_socket_acceptor (2 of 5 overloads)]
+[section:overload2 basic_socket_acceptor::basic_socket_acceptor (2 of 6 overloads)]
 
 
 Construct an open acceptor. 
@@ -29435,7 +29936,7 @@
 
 
 
-[section:overload3 basic_socket_acceptor::basic_socket_acceptor (3 of 5 overloads)]
+[section:overload3 basic_socket_acceptor::basic_socket_acceptor (3 of 6 overloads)]
 
 
 Construct an acceptor opened on the given endpoint. 
@@ -29495,7 +29996,7 @@
 
 
 
-[section:overload4 basic_socket_acceptor::basic_socket_acceptor (4 of 5 overloads)]
+[section:overload4 basic_socket_acceptor::basic_socket_acceptor (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] on an existing native acceptor. 
@@ -29540,7 +30041,7 @@
 
 
 
-[section:overload5 basic_socket_acceptor::basic_socket_acceptor (5 of 5 overloads)]
+[section:overload5 basic_socket_acceptor::basic_socket_acceptor (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 
@@ -29573,6 +30074,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_socket_acceptor::basic_socket_acceptor (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+  basic_socket_acceptor(
+      basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves an acceptor from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_socket_acceptor::bind]
@@ -29629,8 +30168,9 @@
 
 
    asio::ip::tcp::acceptor acceptor(io_service);
-   acceptor.open(asio::ip::tcp::v4());
-   acceptor.bind(asio::ip::tcp::endpoint(12345));
+   asio::ip::tcp::endpoint endpoint(asio::ip::tcp::v4(), 12345);
+   acceptor.open(endpoint.protocol());
+   acceptor.bind(endpoint);
 
 
 
@@ -29673,9 +30213,10 @@
 
 
    asio::ip::tcp::acceptor acceptor(io_service);
-   acceptor.open(asio::ip::tcp::v4());
+   asio::ip::tcp::endpoint endpoint(asio::ip::tcp::v4(), 12345);
+   acceptor.open(endpoint.protocol());
    asio::error_code ec;
-   acceptor.bind(asio::ip::tcp::endpoint(12345), ec);
+   acceptor.bind(endpoint, ec);
    if (ec)
    {
      // An error occurred.
@@ -29738,9 +30279,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -29781,9 +30322,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30000,9 +30541,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30054,9 +30595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30108,9 +30649,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30129,9 +30670,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30423,9 +30964,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30620,9 +31161,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30675,9 +31216,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -30966,9 +31507,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31053,9 +31594,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31197,9 +31738,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31366,9 +31907,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31489,13 +32030,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_socket_acceptor::operator=]
 
 [indexterm2 operator=..basic_socket_acceptor] 
 Move-assign a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 
 
 
+  basic_socket_acceptor & ``[link asio.reference.basic_socket_acceptor.operator_eq_.overload1 operator=]``(
+      basic_socket_acceptor && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & ``[link asio.reference.basic_socket_acceptor.operator_eq_.overload2 operator=]``(
+      basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_socket_acceptor.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_socket_acceptor::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from another. 
+
+
   basic_socket_acceptor & operator=(
       basic_socket_acceptor && other);
 
@@ -31524,6 +32086,45 @@
 
 
 
+[section:overload2 basic_socket_acceptor::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] from an acceptor of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.SocketAcceptorService SocketAcceptorService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_socket_acceptor >::type & operator=(
+      basic_socket_acceptor< Protocol1, SocketAcceptorService1 > && other);
+
+
+This assignment operator moves an acceptor from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_socket_acceptor `basic_socket_acceptor`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_socket_acceptor::protocol_type]
 
 [indexterm2 protocol_type..basic_socket_acceptor] 
@@ -31536,9 +32137,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31590,9 +32191,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31644,9 +32245,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31698,9 +32299,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31752,9 +32353,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31806,9 +32407,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -31854,9 +32455,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_acceptor.hpp]
+['Header: ][^asio/basic_socket_acceptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -32126,9 +32727,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_iostream.hpp]
+['Header: ][^asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:basic_socket_iostream basic_socket_iostream::basic_socket_iostream]
 
@@ -32242,9 +32843,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_iostream.hpp]
+['Header: ][^asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -32263,9 +32864,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_iostream.hpp]
+['Header: ][^asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -32471,9 +33072,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_iostream.hpp]
+['Header: ][^asio/basic_socket_iostream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -32933,9 +33534,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_socket_streambuf::assign]
 
@@ -33007,7 +33608,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -33424,9 +34025,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -33467,9 +34068,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -33871,9 +34472,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -33925,9 +34526,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -33946,9 +34547,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34000,9 +34601,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34021,9 +34622,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34476,9 +35077,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34627,9 +35228,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34698,9 +35299,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -34753,9 +35354,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -35155,7 +35756,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -35241,7 +35844,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -35334,18 +35939,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -35418,9 +36023,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -35514,9 +36119,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -35889,9 +36494,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36067,9 +36672,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36225,9 +36830,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36300,9 +36905,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36354,9 +36959,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36525,9 +37130,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36579,9 +37184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36633,9 +37238,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -36681,9 +37286,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -37023,9 +37628,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -37041,9 +37646,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_socket_streambuf.hpp]
+['Header: ][^asio/basic_socket_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -37305,7 +37910,9 @@
 
      Construct a basic_stream_socket on an existing native socket. 
 
-     Move-construct a basic_stream_socket from another. ]
+     Move-construct a basic_stream_socket from another. 
+
+     Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -37391,7 +37998,9 @@
   
   [
     [[link asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_stream_socket from another. ]
+    [Move-assign a basic_stream_socket from another. 
+
+     Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -37501,18 +38110,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign basic_stream_socket::assign]
 
@@ -37584,7 +38193,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
 
@@ -37650,7 +38259,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -37706,7 +38315,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_receive.overload1 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_receive.overload1 async_receive]``(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.async_receive.overload1 more...]]``
@@ -37714,7 +38323,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_receive.overload2 async_receive]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_receive.overload2 async_receive]``(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -37730,7 +38339,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -37787,7 +38396,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
       ReadHandler handler);
@@ -37848,7 +38457,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_send.overload1 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_send.overload1 async_send]``(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
   ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.async_send.overload1 more...]]``
@@ -37856,7 +38465,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_send.overload2 async_send]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.basic_stream_socket.async_send.overload2 async_send]``(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -37872,7 +38481,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -37929,7 +38538,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
       WriteHandler handler);
@@ -37991,7 +38600,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -38261,7 +38870,19 @@
   ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.basic_stream_socket.overload5 more...]]``
 
 
-[section:overload1 basic_stream_socket::basic_stream_socket (1 of 5 overloads)]
+Move-construct a [link asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.StreamSocketService StreamSocketService1]``>
+  ``[link asio.reference.basic_stream_socket.basic_stream_socket.overload6 basic_stream_socket]``(
+      basic_stream_socket< Protocol1, StreamSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+  ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.basic_stream_socket.overload6 more...]]``
+
+
+[section:overload1 basic_stream_socket::basic_stream_socket (1 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_stream_socket `basic_stream_socket`] without opening it. 
@@ -38290,7 +38911,7 @@
 
 
 
-[section:overload2 basic_stream_socket::basic_stream_socket (2 of 5 overloads)]
+[section:overload2 basic_stream_socket::basic_stream_socket (2 of 6 overloads)]
 
 
 Construct and open a [link asio.reference.basic_stream_socket `basic_stream_socket`]. 
@@ -38332,7 +38953,7 @@
 
 
 
-[section:overload3 basic_stream_socket::basic_stream_socket (3 of 5 overloads)]
+[section:overload3 basic_stream_socket::basic_stream_socket (3 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_stream_socket `basic_stream_socket`], opening it and binding it to the given local endpoint. 
@@ -38374,7 +38995,7 @@
 
 
 
-[section:overload4 basic_stream_socket::basic_stream_socket (4 of 5 overloads)]
+[section:overload4 basic_stream_socket::basic_stream_socket (4 of 6 overloads)]
 
 
 Construct a [link asio.reference.basic_stream_socket `basic_stream_socket`] on an existing native socket. 
@@ -38419,7 +39040,7 @@
 
 
 
-[section:overload5 basic_stream_socket::basic_stream_socket (5 of 5 overloads)]
+[section:overload5 basic_stream_socket::basic_stream_socket (5 of 6 overloads)]
 
 
 Move-construct a [link asio.reference.basic_stream_socket `basic_stream_socket`] from another. 
@@ -38452,6 +39073,44 @@
 [endsect]
 
 
+
+[section:overload6 basic_stream_socket::basic_stream_socket (6 of 6 overloads)]
+
+
+Move-construct a [link asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.StreamSocketService StreamSocketService1]``>
+  basic_stream_socket(
+      basic_stream_socket< Protocol1, StreamSocketService1 > && other,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+This constructor moves a stream socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 [section:bind basic_stream_socket::bind]
@@ -38625,9 +39284,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -38668,9 +39327,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39072,9 +39731,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39126,9 +39785,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39180,9 +39839,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39201,9 +39860,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39497,9 +40156,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39701,9 +40360,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -39756,9 +40415,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -40158,7 +40817,9 @@
 
      Construct a basic_socket on an existing native socket. 
 
-     Move-construct a basic_socket from another. ]
+     Move-construct a basic_socket from another. 
+
+     Move-construct a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -40244,7 +40905,9 @@
   
   [
     [[link asio.reference.basic_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket from another. ]
+    [Move-assign a basic_socket from another. 
+
+     Move-assign a basic_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -40337,18 +41000,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -40421,9 +41084,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -40514,9 +41177,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -40886,9 +41549,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -41064,9 +41727,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -41193,13 +41856,34 @@
 
 [endsect]
 
-
 [section:operator_eq_ basic_stream_socket::operator=]
 
 [indexterm2 operator=..basic_stream_socket] 
 Move-assign a [link asio.reference.basic_stream_socket `basic_stream_socket`] from another. 
 
 
+  basic_stream_socket & ``[link asio.reference.basic_stream_socket.operator_eq_.overload1 operator=]``(
+      basic_stream_socket && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.operator_eq_.overload1 more...]]``
+
+
+Move-assign a [link asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.StreamSocketService StreamSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & ``[link asio.reference.basic_stream_socket.operator_eq_.overload2 operator=]``(
+      basic_stream_socket< Protocol1, StreamSocketService1 > && other);
+  ``  [''''&raquo;''' [link asio.reference.basic_stream_socket.operator_eq_.overload2 more...]]``
+
+
+[section:overload1 basic_stream_socket::operator= (1 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_stream_socket `basic_stream_socket`] from another. 
+
+
   basic_stream_socket & operator=(
       basic_stream_socket && other);
 
@@ -41228,6 +41912,45 @@
 
 
 
+[section:overload2 basic_stream_socket::operator= (2 of 2 overloads)]
+
+
+Move-assign a [link asio.reference.basic_stream_socket `basic_stream_socket`] from a socket of another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
+      typename ``[link asio.reference.StreamSocketService StreamSocketService1]``>
+  enable_if< is_convertible< Protocol1, Protocol >::value, basic_stream_socket >::type & operator=(
+      basic_stream_socket< Protocol1, StreamSocketService1 > && other);
+
+
+This assignment operator moves a stream socket from one object to another.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[other][The other [link asio.reference.basic_stream_socket `basic_stream_socket`] object from which the move will occur.]]
+
+]
+
+
+[heading Remarks]
+      
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:protocol_type basic_stream_socket::protocol_type]
 
 [indexterm2 protocol_type..basic_stream_socket] 
@@ -41240,9 +41963,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -41625,9 +42348,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -41679,9 +42402,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -41850,9 +42573,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -42105,9 +42828,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -42159,9 +42882,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -42207,9 +42930,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_stream_socket.hpp]
+['Header: ][^asio/basic_stream_socket.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -42793,9 +43516,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_streambuf.hpp]
+['Header: ][^asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:basic_streambuf basic_streambuf::basic_streambuf]
@@ -42859,9 +43582,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_streambuf.hpp]
+['Header: ][^asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -42956,9 +43679,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_streambuf.hpp]
+['Header: ][^asio/basic_streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -43237,7 +43960,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the asio::waitable\_timer typedef.
+Most applications will use one of the [link asio.reference.steady_timer `steady_timer`], [link asio.reference.system_timer `system_timer`] or [link asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -43247,20 +43970,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait: 
+Performing a blocking wait (C++11): 
 
    // Construct a timer without setting an expiry time.
-   asio::waitable_timer timer(io_service);
+   asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
-   timer.expires_from_now(boost::posix_time::seconds(5));
+   timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -43269,7 +43992,7 @@
 
 
 
-Performing an asynchronous wait: 
+Performing an asynchronous wait (C++11): 
 
    void handler(const asio::error_code& error)
    {
@@ -43282,8 +44005,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
-   asio::waitable_timer timer(io_service,
-       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+   asio::steady_timer timer(io_service,
+       std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -43292,7 +44015,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -43334,9 +44057,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_wait basic_waitable_timer::async_wait]
@@ -43347,7 +44070,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -43735,9 +44458,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -43756,9 +44479,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -44205,9 +44928,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -44253,9 +44976,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -44274,9 +44997,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -44295,9 +45018,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/basic_waitable_timer.hpp]
+['Header: ][^asio/basic_waitable_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -44381,6 +45104,8 @@
 [section:basic_yield_context basic_yield_context]
 
 
+Context object the represents the currently executing coroutine. 
+
 
   template<
       typename ``[link asio.reference.Handler Handler]``>
@@ -44393,26 +45118,45 @@
 
   [
     [[link asio.reference.basic_yield_context.basic_yield_context [*basic_yield_context]]]
-    []
+    [Construct a yield context to represent the specified coroutine. ]
   ]
   
   [
     [[link asio.reference.basic_yield_context.operator_lb__rb_ [*operator\[\]]]]
-    []
+    [Return a yield context that sets the specified error_code. ]
   ]
   
 ]
 
+The [link asio.reference.basic_yield_context `basic_yield_context`] class is used to represent the currently executing stackful coroutine. A [link asio.reference.basic_yield_context `basic_yield_context`] may be passed as a handler to an asynchronous operation. For example:
+
+
+
+   template <typename Handler>
+   void my_coroutine(basic_yield_context<Handler> yield)
+   {
+     ...
+     std::size_t n = my_socket.async_read_some(buffer, yield);
+     ...
+   } 
+
+
+
+
+The initiating function (async\_read\_some in the above example) suspends the current coroutine. The coroutine is resumed when the asynchronous operation completes, and the result of the operation is returned. 
+
 [heading Requirements]
 
-[*Header: ][^asio/spawn.hpp]
+['Header: ][^asio/spawn.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:basic_yield_context basic_yield_context::basic_yield_context]
 
 [indexterm2 basic_yield_context..basic_yield_context] 
+Construct a yield context to represent the specified coroutine. 
+
 
   basic_yield_context(
       const detail::weak_ptr< boost::coroutines::coroutine< void()> > & coro,
@@ -44420,6 +45164,8 @@
       Handler & handler);
 
 
+Most applications do not need to use this constructor. Instead, the `spawn()` function passes a yield context as an argument to the coroutine function. 
+
 
 [endsect]
 
@@ -44428,11 +45174,32 @@
 [section:operator_lb__rb_ basic_yield_context::operator\[\]]
 
 [indexterm2 operator\[\]..basic_yield_context] 
+Return a yield context that sets the specified [link asio.reference.error_code `error_code`]. 
+
 
   basic_yield_context operator[](
       asio::error_code & ec);
 
 
+By default, when a yield context is used with an asynchronous operation, a non-success [link asio.reference.error_code `error_code`] is converted to [link asio.reference.system_error `system_error`] and thrown. This operator may be used to specify an [link asio.reference.error_code `error_code`] object that should instead be set with the asynchronous operation's result. For example:
+
+
+
+   template <typename Handler>
+   void my_coroutine(basic_yield_context<Handler> yield)
+   {
+     ...
+     std::size_t n = my_socket.async_read_some(buffer, yield[ec]);
+     if (ec)
+     {
+       // An error occurred.
+     }
+     ...
+   } 
+
+
+
+
 
 [endsect]
 
@@ -44673,7 +45440,7 @@
 
 
 
-In all three cases above, the buffers created are exactly 128 bytes long. Note that a vector is [*never] automatically resized when creating or using a buffer. The buffer size is determined using the vector's `size()` member function, and not its capacity.
+In all three cases above, the buffers created are exactly 128 bytes long. Note that a vector is ['never] automatically resized when creating or using a buffer. The buffer size is determined using the vector's `size()` member function, and not its capacity.
 
 
 [heading Accessing Buffer Contents]
@@ -44815,9 +45582,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 buffer (1 of 28 overloads)]
@@ -45754,9 +46521,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 buffer_cast (1 of 2 overloads)]
@@ -46018,9 +46785,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 buffer_copy (1 of 30 overloads)]
@@ -47554,9 +48321,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 buffer_size (1 of 5 overloads)]
@@ -47768,18 +48535,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_read_stream.hpp]
+['Header: ][^asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_fill buffered_read_stream::async_fill]
@@ -48115,9 +48882,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_read_stream.hpp]
+['Header: ][^asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -48150,9 +48917,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_read_stream.hpp]
+['Header: ][^asio/buffered_read_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -48471,18 +49238,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_stream.hpp]
+['Header: ][^asio/buffered_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_fill buffered_stream::async_fill]
@@ -48871,9 +49638,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_stream.hpp]
+['Header: ][^asio/buffered_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -48906,9 +49673,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_stream.hpp]
+['Header: ][^asio/buffered_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -49226,18 +49993,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_write_stream.hpp]
+['Header: ][^asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_flush buffered_write_stream::async_flush]
@@ -49573,9 +50340,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_write_stream.hpp]
+['Header: ][^asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -49608,9 +50375,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffered_write_stream.hpp]
+['Header: ][^asio/buffered_write_stream.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -49814,9 +50581,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -49837,9 +50604,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50006,9 +50773,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:begin buffers_iterator::begin]
@@ -50052,9 +50819,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50088,9 +50855,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50124,9 +50891,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50162,9 +50929,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50184,9 +50951,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50287,9 +51054,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50309,9 +51076,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50410,9 +51177,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50432,9 +51199,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50454,9 +51221,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50476,9 +51243,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50498,9 +51265,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50536,9 +51303,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50559,9 +51326,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50580,9 +51347,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffers_iterator.hpp]
+['Header: ][^asio/buffers_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -50687,9 +51454,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/connect.hpp]
+['Header: ][^asio/connect.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 connect (1 of 8 overloads)]
@@ -51406,9 +52173,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:const_buffer const_buffer::const_buffer]
 
@@ -51602,9 +52369,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:begin const_buffers_1::begin]
@@ -51685,9 +52452,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -51822,9 +52589,382 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:coroutine coroutine]
+
+
+Provides support for implementing stackless coroutines. 
+
+
+  class coroutine
+
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.coroutine.coroutine [*coroutine]]]
+    [Constructs a coroutine in its initial state. ]
+  ]
+  
+  [
+    [[link asio.reference.coroutine.is_child [*is_child]]]
+    [Returns true if the coroutine is the child of a fork. ]
+  ]
+  
+  [
+    [[link asio.reference.coroutine.is_complete [*is_complete]]]
+    [Returns true if the coroutine has reached its terminal state. ]
+  ]
+  
+  [
+    [[link asio.reference.coroutine.is_parent [*is_parent]]]
+    [Returns true if the coroutine is the parent of a fork. ]
+  ]
+  
+]
+
+The `coroutine` class may be used to implement stackless coroutines. The class itself is used to store the current state of the coroutine.
+
+Coroutines are copy-constructible and assignable, and the space overhead is a single int. They can be used as a base class:
+
+
+
+   class session : coroutine
+   {
+     ...
+   }; 
+
+
+
+
+or as a data member:
+
+
+
+   class session
+   {
+     ...
+     coroutine coro_;
+   }; 
+
+
+
+
+or even bound in as a function argument using lambdas or `bind()`. The important thing is that as the application maintains a copy of the object for as long as the coroutine must be kept alive.
+
+
+[heading Pseudo-keywords]
+  
+
+
+A coroutine is used in conjunction with certain "pseudo-keywords", which are implemented as macros. These macros are defined by a header file:
+
+
+
+   #include <asio/yield.hpp>
+
+
+
+
+and may conversely be undefined as follows:
+
+
+
+   #include <asio/unyield.hpp>
+
+
+
+
+[*reenter]
+
+The `reenter` macro is used to define the body of a coroutine. It takes a single argument: a pointer or reference to a coroutine object. For example, if the base class is a coroutine object you may write:
+
+
+
+   reenter (this)
+   {
+     ... coroutine body ...
+   } 
+
+
+
+
+and if a data member or other variable you can write:
+
+
+
+   reenter (coro_)
+   {
+     ... coroutine body ...
+   } 
+
+
+
+
+When `reenter` is executed at runtime, control jumps to the location of the last `yield` or `fork`.
+
+The coroutine body may also be a single statement, such as:
+
+
+
+   reenter (this) for (;;)
+   {
+     ...
+   } 
+
+
+
+
+[*Limitation:] The `reenter` macro is implemented using a switch. This means that you must take care when using local variables within the coroutine body. The local variable is not allowed in a position where reentering the coroutine could bypass the variable definition.
+
+[*yield ['statement]]
+
+This form of the `yield` keyword is often used with asynchronous operations:
+
+
+
+   yield socket_->async_read_some(buffer(*buffer_), *this); 
+
+
+
+
+This divides into four logical steps:
+
+
+* `yield` saves the current state of the coroutine. 
+
+* The statement initiates the asynchronous operation. 
+
+* The resume point is defined immediately following the statement. 
+
+* Control is transferred to the end of the coroutine body.
+
+When the asynchronous operation completes, the function object is invoked and `reenter` causes control to transfer to the resume point. It is important to remember to carry the coroutine state forward with the asynchronous operation. In the above snippet, the current class is a function object object with a coroutine object as base class or data member.
+
+The statement may also be a compound statement, and this permits us to define local variables with limited scope:
+
+
+
+   yield
+   {
+     mutable_buffers_1 b = buffer(*buffer_);
+     socket_->async_read_some(b, *this);
+   } 
+
+
+
+
+[*yield return ['expression] ;]
+
+This form of `yield` is often used in generators or coroutine-based parsers. For example, the function object:
+
+
+
+   struct interleave : coroutine
+   {
+     istream& is1;
+     istream& is2;
+     char operator()(char c)
+     {
+       reenter (this) for (;;)
+       {
+         yield return is1.get();
+         yield return is2.get();
+       }
+     }
+   }; 
+
+
+
+
+defines a trivial coroutine that interleaves the characters from two input streams.
+
+This type of `yield` divides into three logical steps:
+
+
+* `yield` saves the current state of the coroutine. 
+
+* The resume point is defined immediately following the semicolon. 
+
+* The value of the expression is returned from the function.
+
+[*yield ;]
+
+This form of `yield` is equivalent to the following steps:
+
+
+* `yield` saves the current state of the coroutine. 
+
+* The resume point is defined immediately following the semicolon. 
+
+* Control is transferred to the end of the coroutine body.
+
+This form might be applied when coroutines are used for cooperative threading and scheduling is explicitly managed. For example:
+
+
+
+   struct task : coroutine
+   {
+     ...
+     void operator()()
+     {
+       reenter (this)
+       {
+         while (... not finished ...)
+         {
+           ... do something ...
+           yield;
+           ... do some more ...
+           yield;
+         }
+       }
+     }
+     ...
+   };
+   ...
+   task t1, t2;
+   for (;;)
+   {
+     t1();
+     t2();
+   } 
+
+
+
+
+[*yield break ;]
+
+The final form of `yield` is used to explicitly terminate the coroutine. This form is comprised of two steps:
+
+
+* `yield` sets the coroutine state to indicate termination. 
+
+* Control is transferred to the end of the coroutine body.
+
+Once terminated, calls to `is_complete()` return true and the coroutine cannot be reentered.
+
+Note that a coroutine may also be implicitly terminated if the coroutine body is exited without a yield, e.g. by return, throw or by running to the end of the body.
+
+[*fork ['statement]]
+
+The `fork` pseudo-keyword is used when "forking" a coroutine, i.e. splitting it into two (or more) copies. One use of `fork` is in a server, where a new coroutine is created to handle each client connection:
+
+
+
+   reenter (this)
+   {
+     do
+     {
+       socket_.reset(new tcp::socket(io_service_));
+       yield acceptor->async_accept(*socket_, *this);
+       fork server(*this)();
+     } while (is_parent());
+     ... client-specific handling follows ...
+   } 
+
+
+
+
+The logical steps involved in a `fork` are:
+
+
+* `fork` saves the current state of the coroutine. 
+
+* The statement creates a copy of the coroutine and either executes it immediately or schedules it for later execution. 
+
+* The resume point is defined immediately following the semicolon. 
+
+* For the "parent", control immediately continues from the next line.
+
+The functions `is_parent()` and `is_child()` can be used to differentiate between parent and child. You would use these functions to alter subsequent control flow.
+
+Note that `fork` doesn't do the actual forking by itself. It is the application's responsibility to create a clone of the coroutine and call it. The clone can be called immediately, as above, or scheduled for delayed execution using something like `io_service::post()`.
+
+
+[heading Alternate macro names]
+  
+
+
+If preferred, an application can use macro names that follow a more typical naming convention, rather than the pseudo-keywords. These are:
+
+
+* `ASIO_CORO_REENTER` instead of `reenter` 
+
+* `ASIO_CORO_YIELD` instead of `yield` 
+
+* `ASIO_CORO_FORK` instead of `fork` 
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/coroutine.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[section:coroutine coroutine::coroutine]
+
+[indexterm2 coroutine..coroutine] 
+Constructs a coroutine in its initial state. 
+
+
+  coroutine();
+
+
+
+[endsect]
+
+
+
+[section:is_child coroutine::is_child]
+
+[indexterm2 is_child..coroutine] 
+Returns true if the coroutine is the child of a fork. 
+
+
+  bool is_child() const;
+
+
+
+[endsect]
+
+
+
+[section:is_complete coroutine::is_complete]
+
+[indexterm2 is_complete..coroutine] 
+Returns true if the coroutine has reached its terminal state. 
+
+
+  bool is_complete() const;
+
+
+
+[endsect]
+
+
+
+[section:is_parent coroutine::is_parent]
+
+[indexterm2 is_parent..coroutine] 
+Returns true if the coroutine is the parent of a fork. 
+
+
+  bool is_parent() const;
+
 
 
 [endsect]
@@ -51956,6 +53096,11 @@
   ]
   
   [
+    [[link asio.reference.datagram_socket_service.converting_move_construct [*converting_move_construct]]]
+    [Move-construct a new datagram socket implementation from another protocol type. ]
+  ]
+  
+  [
     [[link asio.reference.datagram_socket_service.datagram_socket_service [*datagram_socket_service]]]
     [Construct a new datagram socket service for the specified io_service. ]
   ]
@@ -52079,9 +53224,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign datagram_socket_service::assign]
@@ -52110,7 +53255,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -52130,7 +53275,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -52151,7 +53296,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
@@ -52173,7 +53318,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -52194,7 +53339,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
@@ -52318,6 +53463,25 @@
 
 
 
+[section:converting_move_construct datagram_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..datagram_socket_service] 
+Move-construct a new datagram socket implementation from another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``>
+  void converting_move_construct(
+      implementation_type & impl,
+      typename datagram_socket_service< Protocol1 >::implementation_type & other_impl,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+
+[endsect]
+
+
+
 [section:datagram_socket_service datagram_socket_service::datagram_socket_service]
 
 [indexterm2 datagram_socket_service..datagram_socket_service] 
@@ -52360,9 +53524,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -52431,9 +53595,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -52565,9 +53729,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -52640,9 +53804,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -52730,9 +53894,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/datagram_socket_service.hpp]
+['Header: ][^asio/datagram_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53021,9 +54185,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
@@ -53109,9 +54273,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer.hpp]
+['Header: ][^asio/deadline_timer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53237,9 +54401,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer_service.hpp]
+['Header: ][^asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_wait deadline_timer_service::async_wait]
@@ -53248,7 +54412,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -53347,9 +54511,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer_service.hpp]
+['Header: ][^asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53507,9 +54671,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer_service.hpp]
+['Header: ][^asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53528,9 +54692,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer_service.hpp]
+['Header: ][^asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53549,9 +54713,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/deadline_timer_service.hpp]
+['Header: ][^asio/deadline_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53584,9 +54748,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53620,9 +54784,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53842,9 +55006,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53860,9 +55024,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53878,9 +55042,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53896,9 +55060,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53914,9 +55078,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/error.hpp]
+['Header: ][^asio/ssl/error.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -53932,9 +55096,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -53966,9 +55130,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 error::make_error_code (1 of 5 overloads)]
@@ -54047,9 +55211,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54095,9 +55259,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54113,9 +55277,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54161,9 +55325,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54179,9 +55343,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/error.hpp]
+['Header: ][^asio/ssl/error.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -54197,9 +55361,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/error.hpp]
+['Header: ][^asio/ssl/error.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -54215,9 +55379,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error.hpp]
+['Header: ][^asio/error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54266,9 +55430,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:message error_category::message]
@@ -54438,9 +55602,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:category error_code::category]
@@ -54589,9 +55753,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54611,9 +55775,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54643,9 +55807,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54677,9 +55841,3993 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+[section:generic__basic_endpoint generic::basic_endpoint]
+
+
+Describes an endpoint for any socket type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  class basic_endpoint
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+    [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+    [Default constructor. 
+
+     Construct an endpoint from the specified socket address. 
+
+     Construct an endpoint from the specific endpoint type. 
+
+     Copy constructor. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+    [Get the capacity of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.data [*data]]]
+    [Get the underlying endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+    [Assign from another endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+    [The protocol associated with the endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.resize [*resize]]]
+    [Set the underlying size of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.size [*size]]]
+    [Get the underlying size of the endpoint in the native type. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+    [Compare two endpoints for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+    [Compare two endpoints for equality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+      
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+[section:basic_endpoint generic::basic_endpoint::basic_endpoint]
+
+[indexterm2 basic_endpoint..generic::basic_endpoint] 
+Default constructor. 
+
+
+  ``[link asio.reference.generic__basic_endpoint.basic_endpoint.overload1 basic_endpoint]``();
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.basic_endpoint.overload1 more...]]``
+
+
+Construct an endpoint from the specified socket address. 
+
+
+  ``[link asio.reference.generic__basic_endpoint.basic_endpoint.overload2 basic_endpoint]``(
+      const void * socket_address,
+      std::size_t socket_address_size,
+      int socket_protocol = 0);
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.basic_endpoint.overload2 more...]]``
+
+
+Construct an endpoint from the specific endpoint type. 
+
+
+  template<
+      typename ``[link asio.reference.Endpoint Endpoint]``>
+  ``[link asio.reference.generic__basic_endpoint.basic_endpoint.overload3 basic_endpoint]``(
+      const Endpoint & endpoint);
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.basic_endpoint.overload3 more...]]``
+
+
+Copy constructor. 
+
+
+  ``[link asio.reference.generic__basic_endpoint.basic_endpoint.overload4 basic_endpoint]``(
+      const basic_endpoint & other);
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.basic_endpoint.overload4 more...]]``
+
+
+[section:overload1 generic::basic_endpoint::basic_endpoint (1 of 4 overloads)]
+
+
+Default constructor. 
+
+
+  basic_endpoint();
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::basic_endpoint::basic_endpoint (2 of 4 overloads)]
+
+
+Construct an endpoint from the specified socket address. 
+
+
+  basic_endpoint(
+      const void * socket_address,
+      std::size_t socket_address_size,
+      int socket_protocol = 0);
+
+
+
+[endsect]
+
+
+
+[section:overload3 generic::basic_endpoint::basic_endpoint (3 of 4 overloads)]
+
+
+Construct an endpoint from the specific endpoint type. 
+
+
+  template<
+      typename ``[link asio.reference.Endpoint Endpoint]``>
+  basic_endpoint(
+      const Endpoint & endpoint);
+
+
+
+[endsect]
+
+
+
+[section:overload4 generic::basic_endpoint::basic_endpoint (4 of 4 overloads)]
+
+
+Copy constructor. 
+
+
+  basic_endpoint(
+      const basic_endpoint & other);
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:capacity generic::basic_endpoint::capacity]
+
+[indexterm2 capacity..generic::basic_endpoint] 
+Get the capacity of the endpoint in the native type. 
+
+
+  std::size_t capacity() const;
+
+
+
+[endsect]
+
+
+[section:data generic::basic_endpoint::data]
+
+[indexterm2 data..generic::basic_endpoint] 
+Get the underlying endpoint in the native type. 
+
+
+  data_type * ``[link asio.reference.generic__basic_endpoint.data.overload1 data]``();
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.data.overload1 more...]]``
+
+  const data_type * ``[link asio.reference.generic__basic_endpoint.data.overload2 data]``() const;
+  ``  [''''&raquo;''' [link asio.reference.generic__basic_endpoint.data.overload2 more...]]``
+
+
+[section:overload1 generic::basic_endpoint::data (1 of 2 overloads)]
+
+
+Get the underlying endpoint in the native type. 
+
+
+  data_type * data();
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::basic_endpoint::data (2 of 2 overloads)]
+
+
+Get the underlying endpoint in the native type. 
+
+
+  const data_type * data() const;
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:data_type generic::basic_endpoint::data_type]
+
+[indexterm2 data_type..generic::basic_endpoint] 
+The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. 
+
+
+  typedef implementation_defined data_type;
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::basic_endpoint::operator!=]
+
+[indexterm2 operator!=..generic::basic_endpoint] 
+Compare two endpoints for inequality. 
+
+
+  friend bool operator!=(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_lt_ generic::basic_endpoint::operator<]
+
+[indexterm2 operator<..generic::basic_endpoint] 
+Compare endpoints for ordering. 
+
+
+  friend bool operator<(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_lt__eq_ generic::basic_endpoint::operator<=]
+
+[indexterm2 operator<=..generic::basic_endpoint] 
+Compare endpoints for ordering. 
+
+
+  friend bool operator<=(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq_ generic::basic_endpoint::operator=]
+
+[indexterm2 operator=..generic::basic_endpoint] 
+Assign from another endpoint. 
+
+
+  basic_endpoint & operator=(
+      const basic_endpoint & other);
+
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::basic_endpoint::operator==]
+
+[indexterm2 operator==..generic::basic_endpoint] 
+Compare two endpoints for equality. 
+
+
+  friend bool operator==(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_gt_ generic::basic_endpoint::operator>]
+
+[indexterm2 operator>..generic::basic_endpoint] 
+Compare endpoints for ordering. 
+
+
+  friend bool operator>(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_gt__eq_ generic::basic_endpoint::operator>=]
+
+[indexterm2 operator>=..generic::basic_endpoint] 
+Compare endpoints for ordering. 
+
+
+  friend bool operator>=(
+      const basic_endpoint< Protocol > & e1,
+      const basic_endpoint< Protocol > & e2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::basic_endpoint::protocol]
+
+[indexterm2 protocol..generic::basic_endpoint] 
+The protocol associated with the endpoint. 
+
+
+  protocol_type protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:protocol_type generic::basic_endpoint::protocol_type]
+
+[indexterm2 protocol_type..generic::basic_endpoint] 
+The protocol type associated with the endpoint. 
+
+
+  typedef Protocol protocol_type;
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/basic_endpoint.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:resize generic::basic_endpoint::resize]
+
+[indexterm2 resize..generic::basic_endpoint] 
+Set the underlying size of the endpoint in the native type. 
+
+
+  void resize(
+      std::size_t new_size);
+
+
+
+[endsect]
+
+
+
+[section:size generic::basic_endpoint::size]
+
+[indexterm2 size..generic::basic_endpoint] 
+Get the underlying size of the endpoint in the native type. 
+
+
+  std::size_t size() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__datagram_protocol generic::datagram_protocol]
+
+
+Encapsulates the flags needed for a generic datagram-oriented socket. 
+
+
+  class datagram_protocol
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__datagram_protocol.endpoint [*endpoint]]]
+    [The type of an endpoint. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__datagram_protocol.socket [*socket]]]
+    [The generic socket type. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__datagram_protocol.datagram_protocol [*datagram_protocol]]]
+    [Construct a protocol object for a specific address family and protocol. 
+
+     Construct a generic protocol object from a specific protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__datagram_protocol.family [*family]]]
+    [Obtain an identifier for the protocol family. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__datagram_protocol.protocol [*protocol]]]
+    [Obtain an identifier for the protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__datagram_protocol.type [*type]]]
+    [Obtain an identifier for the type of the protocol. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__datagram_protocol.operator_not__eq_ [*operator!=]]]
+    [Compare two protocols for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__datagram_protocol.operator_eq__eq_ [*operator==]]]
+    [Compare two protocols for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__datagram_protocol `generic::datagram_protocol`] class contains flags necessary for datagram-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+  
+Constructing using a native address family and socket protocol: 
+
+   datagram_protocol p(AF_INET, IPPROTO_UDP); 
+
+
+Constructing from a specific protocol type: 
+
+   datagram_protocol p(asio::ip::udp::v4()); 
+
+
+
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+[section:datagram_protocol generic::datagram_protocol::datagram_protocol]
+
+[indexterm2 datagram_protocol..generic::datagram_protocol] 
+Construct a protocol object for a specific address family and protocol. 
+
+
+  ``[link asio.reference.generic__datagram_protocol.datagram_protocol.overload1 datagram_protocol]``(
+      int address_family,
+      int socket_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__datagram_protocol.datagram_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  ``[link asio.reference.generic__datagram_protocol.datagram_protocol.overload2 datagram_protocol]``(
+      const Protocol & source_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__datagram_protocol.datagram_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::datagram_protocol::datagram_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol. 
+
+
+  datagram_protocol(
+      int address_family,
+      int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::datagram_protocol::datagram_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  datagram_protocol(
+      const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[@c][bad\_cast Thrown if the source protocol is not datagram-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:endpoint generic::datagram_protocol::endpoint]
+
+[indexterm2 endpoint..generic::datagram_protocol] 
+The type of an endpoint. 
+
+
+  typedef basic_endpoint< datagram_protocol > endpoint;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+    [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+    [Default constructor. 
+
+     Construct an endpoint from the specified socket address. 
+
+     Construct an endpoint from the specific endpoint type. 
+
+     Copy constructor. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+    [Get the capacity of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.data [*data]]]
+    [Get the underlying endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+    [Assign from another endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+    [The protocol associated with the endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.resize [*resize]]]
+    [Set the underlying size of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.size [*size]]]
+    [Get the underlying size of the endpoint in the native type. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+    [Compare two endpoints for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+    [Compare two endpoints for equality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+      
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::datagram_protocol::family]
+
+[indexterm2 family..generic::datagram_protocol] 
+Obtain an identifier for the protocol family. 
+
+
+  int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::datagram_protocol::operator!=]
+
+[indexterm2 operator!=..generic::datagram_protocol] 
+Compare two protocols for inequality. 
+
+
+  friend bool operator!=(
+      const datagram_protocol & p1,
+      const datagram_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::datagram_protocol::operator==]
+
+[indexterm2 operator==..generic::datagram_protocol] 
+Compare two protocols for equality. 
+
+
+  friend bool operator==(
+      const datagram_protocol & p1,
+      const datagram_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::datagram_protocol::protocol]
+
+[indexterm2 protocol..generic::datagram_protocol] 
+Obtain an identifier for the protocol. 
+
+
+  int protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:socket generic::datagram_protocol::socket]
+
+[indexterm2 socket..generic::datagram_protocol] 
+The generic socket type. 
+
+
+  typedef basic_datagram_socket< datagram_protocol > socket;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.broadcast [*broadcast]]]
+    [Socket option to permit sending of broadcast messages. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.bytes_readable [*bytes_readable]]]
+    [IO control command to get the amount of data that can be read without blocking. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.debug [*debug]]]
+    [Socket option to enable socket-level debugging. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.do_not_route [*do_not_route]]]
+    [Socket option to prevent routing, use local interfaces only. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.enable_connection_aborted [*enable_connection_aborted]]]
+    [Socket option to report aborted connections on accept. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.endpoint_type [*endpoint_type]]]
+    [The endpoint type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.implementation_type [*implementation_type]]]
+    [The underlying implementation type of I/O object. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.keep_alive [*keep_alive]]]
+    [Socket option to send keep-alives. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.linger [*linger]]]
+    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.lowest_layer_type [*lowest_layer_type]]]
+    [A basic_socket is always the lowest layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.message_flags [*message_flags]]]
+    [Bitmask type for flags that can be passed to send and receive operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.native_handle_type [*native_handle_type]]]
+    [The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.native_type [*native_type]]]
+    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.non_blocking_io [*non_blocking_io]]]
+    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.protocol_type [*protocol_type]]]
+    [The protocol type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.receive_buffer_size [*receive_buffer_size]]]
+    [Socket option for the receive buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.receive_low_watermark [*receive_low_watermark]]]
+    [Socket option for the receive low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.reuse_address [*reuse_address]]]
+    [Socket option to allow the socket to be bound to an address that is already in use. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.send_buffer_size [*send_buffer_size]]]
+    [Socket option for the send buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.send_low_watermark [*send_low_watermark]]]
+    [Socket option for the send low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.service_type [*service_type]]]
+    [The type of the service that will be used to provide I/O operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_datagram_socket.shutdown_type [*shutdown_type]]]
+    [Different ways a socket may be shutdown. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_datagram_socket.assign [*assign]]]
+    [Assign an existing native socket to the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.async_connect [*async_connect]]]
+    [Start an asynchronous connect. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.async_receive [*async_receive]]]
+    [Start an asynchronous receive on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.async_receive_from [*async_receive_from]]]
+    [Start an asynchronous receive. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.async_send [*async_send]]]
+    [Start an asynchronous send on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.async_send_to [*async_send_to]]]
+    [Start an asynchronous send. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.at_mark [*at_mark]]]
+    [Determine whether the socket is at the out-of-band data mark. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.available [*available]]]
+    [Determine the number of bytes available for reading. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.basic_datagram_socket [*basic_datagram_socket]]]
+    [Construct a basic_datagram_socket without opening it. 
+
+     Construct and open a basic_datagram_socket. 
+
+     Construct a basic_datagram_socket, opening it and binding it to the given local endpoint. 
+
+     Construct a basic_datagram_socket on an existing native socket. 
+
+     Move-construct a basic_datagram_socket from another. 
+
+     Move-construct a basic_datagram_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.bind [*bind]]]
+    [Bind the socket to the given local endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.cancel [*cancel]]]
+    [Cancel all asynchronous operations associated with the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.close [*close]]]
+    [Close the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.connect [*connect]]]
+    [Connect the socket to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.get_io_service [*get_io_service]]]
+    [Get the io_service associated with the object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.get_option [*get_option]]]
+    [Get an option from the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.io_control [*io_control]]]
+    [Perform an IO control command on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.is_open [*is_open]]]
+    [Determine whether the socket is open. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.local_endpoint [*local_endpoint]]]
+    [Get the local endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.lowest_layer [*lowest_layer]]]
+    [Get a reference to the lowest layer. 
+
+     Get a const reference to the lowest layer. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.native [*native]]]
+    [(Deprecated: Use native_handle().) Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.native_handle [*native_handle]]]
+    [Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.native_non_blocking [*native_non_blocking]]]
+    [Gets the non-blocking mode of the native socket implementation. 
+
+     Sets the non-blocking mode of the native socket implementation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.non_blocking [*non_blocking]]]
+    [Gets the non-blocking mode of the socket. 
+
+     Sets the non-blocking mode of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.open [*open]]]
+    [Open the socket using the specified protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
+    [Move-assign a basic_datagram_socket from another. 
+
+     Move-assign a basic_datagram_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.receive [*receive]]]
+    [Receive some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.receive_from [*receive_from]]]
+    [Receive a datagram with the endpoint of the sender. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.remote_endpoint [*remote_endpoint]]]
+    [Get the remote endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.send [*send]]]
+    [Send some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.send_to [*send_to]]]
+    [Send a datagram to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.set_option [*set_option]]]
+    [Set an option on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.shutdown [*shutdown]]]
+    [Disable sends or receives on the socket. ]
+  ]
+  
+]
+
+[heading Protected Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_datagram_socket.get_implementation [*get_implementation]]]
+    [Get the underlying implementation of the I/O object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_datagram_socket.get_service [*get_service]]]
+    [Get the service associated with the I/O object. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_datagram_socket.max_connections [*max_connections]]]
+    [The maximum length of the queue of pending incoming connections. ]
+  ]
+
+  [
+    [[link asio.reference.basic_datagram_socket.message_do_not_route [*message_do_not_route]]]
+    [Specify that the data should not be subject to routing. ]
+  ]
+
+  [
+    [[link asio.reference.basic_datagram_socket.message_end_of_record [*message_end_of_record]]]
+    [Specifies that the data marks the end of a record. ]
+  ]
+
+  [
+    [[link asio.reference.basic_datagram_socket.message_out_of_band [*message_out_of_band]]]
+    [Process out-of-band data. ]
+  ]
+
+  [
+    [[link asio.reference.basic_datagram_socket.message_peek [*message_peek]]]
+    [Peek at incoming data without removing it from the input queue. ]
+  ]
+
+]
+
+[heading Protected Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_datagram_socket.implementation [*implementation]]]
+    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+  ]
+
+  [
+    [[link asio.reference.basic_datagram_socket.service [*service]]]
+    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+  ]
+
+]
+
+The [link asio.reference.basic_datagram_socket `basic_datagram_socket`] class template provides asynchronous and blocking datagram-oriented socket functionality.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe. 
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/datagram_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::datagram_protocol::type]
+
+[indexterm2 type..generic::datagram_protocol] 
+Obtain an identifier for the type of the protocol. 
+
+
+  int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__raw_protocol generic::raw_protocol]
+
+
+Encapsulates the flags needed for a generic raw socket. 
+
+
+  class raw_protocol
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__raw_protocol.endpoint [*endpoint]]]
+    [The type of an endpoint. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__raw_protocol.socket [*socket]]]
+    [The generic socket type. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__raw_protocol.family [*family]]]
+    [Obtain an identifier for the protocol family. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__raw_protocol.protocol [*protocol]]]
+    [Obtain an identifier for the protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__raw_protocol.raw_protocol [*raw_protocol]]]
+    [Construct a protocol object for a specific address family and protocol. 
+
+     Construct a generic protocol object from a specific protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__raw_protocol.type [*type]]]
+    [Obtain an identifier for the type of the protocol. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__raw_protocol.operator_not__eq_ [*operator!=]]]
+    [Compare two protocols for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__raw_protocol.operator_eq__eq_ [*operator==]]]
+    [Compare two protocols for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__raw_protocol `generic::raw_protocol`] class contains flags necessary for raw sockets of any address family and protocol.
+
+
+[heading Examples]
+  
+Constructing using a native address family and socket protocol: 
+
+   raw_protocol p(AF_INET, IPPROTO_ICMP); 
+
+
+Constructing from a specific protocol type: 
+
+   raw_protocol p(asio::ip::icmp::v4()); 
+
+
+
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[section:endpoint generic::raw_protocol::endpoint]
+
+[indexterm2 endpoint..generic::raw_protocol] 
+The type of an endpoint. 
+
+
+  typedef basic_endpoint< raw_protocol > endpoint;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+    [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+    [Default constructor. 
+
+     Construct an endpoint from the specified socket address. 
+
+     Construct an endpoint from the specific endpoint type. 
+
+     Copy constructor. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+    [Get the capacity of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.data [*data]]]
+    [Get the underlying endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+    [Assign from another endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+    [The protocol associated with the endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.resize [*resize]]]
+    [Set the underlying size of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.size [*size]]]
+    [Get the underlying size of the endpoint in the native type. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+    [Compare two endpoints for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+    [Compare two endpoints for equality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+      
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::raw_protocol::family]
+
+[indexterm2 family..generic::raw_protocol] 
+Obtain an identifier for the protocol family. 
+
+
+  int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::raw_protocol::operator!=]
+
+[indexterm2 operator!=..generic::raw_protocol] 
+Compare two protocols for inequality. 
+
+
+  friend bool operator!=(
+      const raw_protocol & p1,
+      const raw_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::raw_protocol::operator==]
+
+[indexterm2 operator==..generic::raw_protocol] 
+Compare two protocols for equality. 
+
+
+  friend bool operator==(
+      const raw_protocol & p1,
+      const raw_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::raw_protocol::protocol]
+
+[indexterm2 protocol..generic::raw_protocol] 
+Obtain an identifier for the protocol. 
+
+
+  int protocol() const;
+
+
+
+[endsect]
+
+
+[section:raw_protocol generic::raw_protocol::raw_protocol]
+
+[indexterm2 raw_protocol..generic::raw_protocol] 
+Construct a protocol object for a specific address family and protocol. 
+
+
+  ``[link asio.reference.generic__raw_protocol.raw_protocol.overload1 raw_protocol]``(
+      int address_family,
+      int socket_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__raw_protocol.raw_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  ``[link asio.reference.generic__raw_protocol.raw_protocol.overload2 raw_protocol]``(
+      const Protocol & source_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__raw_protocol.raw_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::raw_protocol::raw_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol. 
+
+
+  raw_protocol(
+      int address_family,
+      int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::raw_protocol::raw_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  raw_protocol(
+      const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[@c][bad\_cast Thrown if the source protocol is not raw-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:socket generic::raw_protocol::socket]
+
+[indexterm2 socket..generic::raw_protocol] 
+The generic socket type. 
+
+
+  typedef basic_raw_socket< raw_protocol > socket;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.broadcast [*broadcast]]]
+    [Socket option to permit sending of broadcast messages. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.bytes_readable [*bytes_readable]]]
+    [IO control command to get the amount of data that can be read without blocking. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.debug [*debug]]]
+    [Socket option to enable socket-level debugging. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.do_not_route [*do_not_route]]]
+    [Socket option to prevent routing, use local interfaces only. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.enable_connection_aborted [*enable_connection_aborted]]]
+    [Socket option to report aborted connections on accept. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.endpoint_type [*endpoint_type]]]
+    [The endpoint type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.implementation_type [*implementation_type]]]
+    [The underlying implementation type of I/O object. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.keep_alive [*keep_alive]]]
+    [Socket option to send keep-alives. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.linger [*linger]]]
+    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.lowest_layer_type [*lowest_layer_type]]]
+    [A basic_socket is always the lowest layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.message_flags [*message_flags]]]
+    [Bitmask type for flags that can be passed to send and receive operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.native_handle_type [*native_handle_type]]]
+    [The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.native_type [*native_type]]]
+    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.non_blocking_io [*non_blocking_io]]]
+    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.protocol_type [*protocol_type]]]
+    [The protocol type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.receive_buffer_size [*receive_buffer_size]]]
+    [Socket option for the receive buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.receive_low_watermark [*receive_low_watermark]]]
+    [Socket option for the receive low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.reuse_address [*reuse_address]]]
+    [Socket option to allow the socket to be bound to an address that is already in use. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.send_buffer_size [*send_buffer_size]]]
+    [Socket option for the send buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.send_low_watermark [*send_low_watermark]]]
+    [Socket option for the send low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.service_type [*service_type]]]
+    [The type of the service that will be used to provide I/O operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_raw_socket.shutdown_type [*shutdown_type]]]
+    [Different ways a socket may be shutdown. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_raw_socket.assign [*assign]]]
+    [Assign an existing native socket to the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.async_connect [*async_connect]]]
+    [Start an asynchronous connect. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.async_receive [*async_receive]]]
+    [Start an asynchronous receive on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.async_receive_from [*async_receive_from]]]
+    [Start an asynchronous receive. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.async_send [*async_send]]]
+    [Start an asynchronous send on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.async_send_to [*async_send_to]]]
+    [Start an asynchronous send. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.at_mark [*at_mark]]]
+    [Determine whether the socket is at the out-of-band data mark. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.available [*available]]]
+    [Determine the number of bytes available for reading. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.basic_raw_socket [*basic_raw_socket]]]
+    [Construct a basic_raw_socket without opening it. 
+
+     Construct and open a basic_raw_socket. 
+
+     Construct a basic_raw_socket, opening it and binding it to the given local endpoint. 
+
+     Construct a basic_raw_socket on an existing native socket. 
+
+     Move-construct a basic_raw_socket from another. 
+
+     Move-construct a basic_raw_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.bind [*bind]]]
+    [Bind the socket to the given local endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.cancel [*cancel]]]
+    [Cancel all asynchronous operations associated with the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.close [*close]]]
+    [Close the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.connect [*connect]]]
+    [Connect the socket to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.get_io_service [*get_io_service]]]
+    [Get the io_service associated with the object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.get_option [*get_option]]]
+    [Get an option from the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.io_control [*io_control]]]
+    [Perform an IO control command on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.is_open [*is_open]]]
+    [Determine whether the socket is open. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.local_endpoint [*local_endpoint]]]
+    [Get the local endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.lowest_layer [*lowest_layer]]]
+    [Get a reference to the lowest layer. 
+
+     Get a const reference to the lowest layer. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.native [*native]]]
+    [(Deprecated: Use native_handle().) Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.native_handle [*native_handle]]]
+    [Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.native_non_blocking [*native_non_blocking]]]
+    [Gets the non-blocking mode of the native socket implementation. 
+
+     Sets the non-blocking mode of the native socket implementation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.non_blocking [*non_blocking]]]
+    [Gets the non-blocking mode of the socket. 
+
+     Sets the non-blocking mode of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.open [*open]]]
+    [Open the socket using the specified protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
+    [Move-assign a basic_raw_socket from another. 
+
+     Move-assign a basic_raw_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.receive [*receive]]]
+    [Receive some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.receive_from [*receive_from]]]
+    [Receive raw data with the endpoint of the sender. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.remote_endpoint [*remote_endpoint]]]
+    [Get the remote endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.send [*send]]]
+    [Send some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.send_to [*send_to]]]
+    [Send raw data to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.set_option [*set_option]]]
+    [Set an option on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.shutdown [*shutdown]]]
+    [Disable sends or receives on the socket. ]
+  ]
+  
+]
+
+[heading Protected Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_raw_socket.get_implementation [*get_implementation]]]
+    [Get the underlying implementation of the I/O object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_raw_socket.get_service [*get_service]]]
+    [Get the service associated with the I/O object. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_raw_socket.max_connections [*max_connections]]]
+    [The maximum length of the queue of pending incoming connections. ]
+  ]
+
+  [
+    [[link asio.reference.basic_raw_socket.message_do_not_route [*message_do_not_route]]]
+    [Specify that the data should not be subject to routing. ]
+  ]
+
+  [
+    [[link asio.reference.basic_raw_socket.message_end_of_record [*message_end_of_record]]]
+    [Specifies that the data marks the end of a record. ]
+  ]
+
+  [
+    [[link asio.reference.basic_raw_socket.message_out_of_band [*message_out_of_band]]]
+    [Process out-of-band data. ]
+  ]
+
+  [
+    [[link asio.reference.basic_raw_socket.message_peek [*message_peek]]]
+    [Peek at incoming data without removing it from the input queue. ]
+  ]
+
+]
+
+[heading Protected Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_raw_socket.implementation [*implementation]]]
+    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+  ]
+
+  [
+    [[link asio.reference.basic_raw_socket.service [*service]]]
+    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+  ]
+
+]
+
+The [link asio.reference.basic_raw_socket `basic_raw_socket`] class template provides asynchronous and blocking raw-oriented socket functionality.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe. 
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/raw_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::raw_protocol::type]
+
+[indexterm2 type..generic::raw_protocol] 
+Obtain an identifier for the type of the protocol. 
+
+
+  int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__seq_packet_protocol generic::seq_packet_protocol]
+
+
+Encapsulates the flags needed for a generic sequenced packet socket. 
+
+
+  class seq_packet_protocol
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__seq_packet_protocol.endpoint [*endpoint]]]
+    [The type of an endpoint. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__seq_packet_protocol.socket [*socket]]]
+    [The generic socket type. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__seq_packet_protocol.family [*family]]]
+    [Obtain an identifier for the protocol family. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__seq_packet_protocol.protocol [*protocol]]]
+    [Obtain an identifier for the protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__seq_packet_protocol.seq_packet_protocol [*seq_packet_protocol]]]
+    [Construct a protocol object for a specific address family and protocol. 
+
+     Construct a generic protocol object from a specific protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__seq_packet_protocol.type [*type]]]
+    [Obtain an identifier for the type of the protocol. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__seq_packet_protocol.operator_not__eq_ [*operator!=]]]
+    [Compare two protocols for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__seq_packet_protocol.operator_eq__eq_ [*operator==]]]
+    [Compare two protocols for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__seq_packet_protocol `generic::seq_packet_protocol`] class contains flags necessary for seq\_packet-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+  
+Constructing using a native address family and socket protocol: 
+
+   seq_packet_protocol p(AF_INET, IPPROTO_SCTP); 
+
+
+
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[section:endpoint generic::seq_packet_protocol::endpoint]
+
+[indexterm2 endpoint..generic::seq_packet_protocol] 
+The type of an endpoint. 
+
+
+  typedef basic_endpoint< seq_packet_protocol > endpoint;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+    [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+    [Default constructor. 
+
+     Construct an endpoint from the specified socket address. 
+
+     Construct an endpoint from the specific endpoint type. 
+
+     Copy constructor. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+    [Get the capacity of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.data [*data]]]
+    [Get the underlying endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+    [Assign from another endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+    [The protocol associated with the endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.resize [*resize]]]
+    [Set the underlying size of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.size [*size]]]
+    [Get the underlying size of the endpoint in the native type. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+    [Compare two endpoints for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+    [Compare two endpoints for equality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+      
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::seq_packet_protocol::family]
+
+[indexterm2 family..generic::seq_packet_protocol] 
+Obtain an identifier for the protocol family. 
+
+
+  int family() const;
+
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::seq_packet_protocol::operator!=]
+
+[indexterm2 operator!=..generic::seq_packet_protocol] 
+Compare two protocols for inequality. 
+
+
+  friend bool operator!=(
+      const seq_packet_protocol & p1,
+      const seq_packet_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::seq_packet_protocol::operator==]
+
+[indexterm2 operator==..generic::seq_packet_protocol] 
+Compare two protocols for equality. 
+
+
+  friend bool operator==(
+      const seq_packet_protocol & p1,
+      const seq_packet_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::seq_packet_protocol::protocol]
+
+[indexterm2 protocol..generic::seq_packet_protocol] 
+Obtain an identifier for the protocol. 
+
+
+  int protocol() const;
+
+
+
+[endsect]
+
+
+[section:seq_packet_protocol generic::seq_packet_protocol::seq_packet_protocol]
+
+[indexterm2 seq_packet_protocol..generic::seq_packet_protocol] 
+Construct a protocol object for a specific address family and protocol. 
+
+
+  ``[link asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload1 seq_packet_protocol]``(
+      int address_family,
+      int socket_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  ``[link asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload2 seq_packet_protocol]``(
+      const Protocol & source_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__seq_packet_protocol.seq_packet_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::seq_packet_protocol::seq_packet_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol. 
+
+
+  seq_packet_protocol(
+      int address_family,
+      int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::seq_packet_protocol::seq_packet_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  seq_packet_protocol(
+      const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[@c][bad\_cast Thrown if the source protocol is not based around sequenced packets. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:socket generic::seq_packet_protocol::socket]
+
+[indexterm2 socket..generic::seq_packet_protocol] 
+The generic socket type. 
+
+
+  typedef basic_seq_packet_socket< seq_packet_protocol > socket;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.broadcast [*broadcast]]]
+    [Socket option to permit sending of broadcast messages. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.bytes_readable [*bytes_readable]]]
+    [IO control command to get the amount of data that can be read without blocking. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.debug [*debug]]]
+    [Socket option to enable socket-level debugging. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.do_not_route [*do_not_route]]]
+    [Socket option to prevent routing, use local interfaces only. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.enable_connection_aborted [*enable_connection_aborted]]]
+    [Socket option to report aborted connections on accept. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.endpoint_type [*endpoint_type]]]
+    [The endpoint type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.implementation_type [*implementation_type]]]
+    [The underlying implementation type of I/O object. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.keep_alive [*keep_alive]]]
+    [Socket option to send keep-alives. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.linger [*linger]]]
+    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.lowest_layer_type [*lowest_layer_type]]]
+    [A basic_socket is always the lowest layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.message_flags [*message_flags]]]
+    [Bitmask type for flags that can be passed to send and receive operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.native_handle_type [*native_handle_type]]]
+    [The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.native_type [*native_type]]]
+    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.non_blocking_io [*non_blocking_io]]]
+    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.protocol_type [*protocol_type]]]
+    [The protocol type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.receive_buffer_size [*receive_buffer_size]]]
+    [Socket option for the receive buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.receive_low_watermark [*receive_low_watermark]]]
+    [Socket option for the receive low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.reuse_address [*reuse_address]]]
+    [Socket option to allow the socket to be bound to an address that is already in use. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.send_buffer_size [*send_buffer_size]]]
+    [Socket option for the send buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.send_low_watermark [*send_low_watermark]]]
+    [Socket option for the send low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.service_type [*service_type]]]
+    [The type of the service that will be used to provide I/O operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_seq_packet_socket.shutdown_type [*shutdown_type]]]
+    [Different ways a socket may be shutdown. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.assign [*assign]]]
+    [Assign an existing native socket to the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.async_connect [*async_connect]]]
+    [Start an asynchronous connect. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.async_receive [*async_receive]]]
+    [Start an asynchronous receive. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.async_send [*async_send]]]
+    [Start an asynchronous send. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.at_mark [*at_mark]]]
+    [Determine whether the socket is at the out-of-band data mark. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.available [*available]]]
+    [Determine the number of bytes available for reading. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.basic_seq_packet_socket [*basic_seq_packet_socket]]]
+    [Construct a basic_seq_packet_socket without opening it. 
+
+     Construct and open a basic_seq_packet_socket. 
+
+     Construct a basic_seq_packet_socket, opening it and binding it to the given local endpoint. 
+
+     Construct a basic_seq_packet_socket on an existing native socket. 
+
+     Move-construct a basic_seq_packet_socket from another. 
+
+     Move-construct a basic_seq_packet_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.bind [*bind]]]
+    [Bind the socket to the given local endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.cancel [*cancel]]]
+    [Cancel all asynchronous operations associated with the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.close [*close]]]
+    [Close the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.connect [*connect]]]
+    [Connect the socket to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.get_io_service [*get_io_service]]]
+    [Get the io_service associated with the object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.get_option [*get_option]]]
+    [Get an option from the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.io_control [*io_control]]]
+    [Perform an IO control command on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.is_open [*is_open]]]
+    [Determine whether the socket is open. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.local_endpoint [*local_endpoint]]]
+    [Get the local endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.lowest_layer [*lowest_layer]]]
+    [Get a reference to the lowest layer. 
+
+     Get a const reference to the lowest layer. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.native [*native]]]
+    [(Deprecated: Use native_handle().) Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.native_handle [*native_handle]]]
+    [Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.native_non_blocking [*native_non_blocking]]]
+    [Gets the non-blocking mode of the native socket implementation. 
+
+     Sets the non-blocking mode of the native socket implementation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.non_blocking [*non_blocking]]]
+    [Gets the non-blocking mode of the socket. 
+
+     Sets the non-blocking mode of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.open [*open]]]
+    [Open the socket using the specified protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.operator_eq_ [*operator=]]]
+    [Move-assign a basic_seq_packet_socket from another. 
+
+     Move-assign a basic_seq_packet_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.receive [*receive]]]
+    [Receive some data on the socket. 
+
+     Receive some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.remote_endpoint [*remote_endpoint]]]
+    [Get the remote endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.send [*send]]]
+    [Send some data on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.set_option [*set_option]]]
+    [Set an option on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.shutdown [*shutdown]]]
+    [Disable sends or receives on the socket. ]
+  ]
+  
+]
+
+[heading Protected Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.get_implementation [*get_implementation]]]
+    [Get the underlying implementation of the I/O object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_seq_packet_socket.get_service [*get_service]]]
+    [Get the service associated with the I/O object. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.max_connections [*max_connections]]]
+    [The maximum length of the queue of pending incoming connections. ]
+  ]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.message_do_not_route [*message_do_not_route]]]
+    [Specify that the data should not be subject to routing. ]
+  ]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.message_end_of_record [*message_end_of_record]]]
+    [Specifies that the data marks the end of a record. ]
+  ]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.message_out_of_band [*message_out_of_band]]]
+    [Process out-of-band data. ]
+  ]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.message_peek [*message_peek]]]
+    [Peek at incoming data without removing it from the input queue. ]
+  ]
+
+]
+
+[heading Protected Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.implementation [*implementation]]]
+    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+  ]
+
+  [
+    [[link asio.reference.basic_seq_packet_socket.service [*service]]]
+    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+  ]
+
+]
+
+The [link asio.reference.basic_seq_packet_socket `basic_seq_packet_socket`] class template provides asynchronous and blocking sequenced packet socket functionality.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe. 
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/seq_packet_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:type generic::seq_packet_protocol::type]
+
+[indexterm2 type..generic::seq_packet_protocol] 
+Obtain an identifier for the type of the protocol. 
+
+
+  int type() const;
+
+
+
+[endsect]
+
+
+
+[endsect]
+
+[section:generic__stream_protocol generic::stream_protocol]
+
+
+Encapsulates the flags needed for a generic stream-oriented socket. 
+
+
+  class stream_protocol
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__stream_protocol.endpoint [*endpoint]]]
+    [The type of an endpoint. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__stream_protocol.iostream [*iostream]]]
+    [The generic socket iostream type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__stream_protocol.socket [*socket]]]
+    [The generic socket type. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__stream_protocol.family [*family]]]
+    [Obtain an identifier for the protocol family. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__stream_protocol.protocol [*protocol]]]
+    [Obtain an identifier for the protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__stream_protocol.stream_protocol [*stream_protocol]]]
+    [Construct a protocol object for a specific address family and protocol. 
+
+     Construct a generic protocol object from a specific protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__stream_protocol.type [*type]]]
+    [Obtain an identifier for the type of the protocol. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__stream_protocol.operator_not__eq_ [*operator!=]]]
+    [Compare two protocols for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__stream_protocol.operator_eq__eq_ [*operator==]]]
+    [Compare two protocols for equality. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__stream_protocol `generic::stream_protocol`] class contains flags necessary for stream-oriented sockets of any address family and protocol.
+
+
+[heading Examples]
+  
+Constructing using a native address family and socket protocol: 
+
+   stream_protocol p(AF_INET, IPPROTO_TCP); 
+
+
+Constructing from a specific protocol type: 
+
+   stream_protocol p(asio::ip::tcp::v4()); 
+
+
+
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Safe.
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[section:endpoint generic::stream_protocol::endpoint]
+
+[indexterm2 endpoint..generic::stream_protocol] 
+The type of an endpoint. 
+
+
+  typedef basic_endpoint< stream_protocol > endpoint;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.data_type [*data_type]]]
+    [The type of the endpoint structure. This type is dependent on the underlying implementation of the socket layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.generic__basic_endpoint.protocol_type [*protocol_type]]]
+    [The protocol type associated with the endpoint. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.basic_endpoint [*basic_endpoint]]]
+    [Default constructor. 
+
+     Construct an endpoint from the specified socket address. 
+
+     Construct an endpoint from the specific endpoint type. 
+
+     Copy constructor. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.capacity [*capacity]]]
+    [Get the capacity of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.data [*data]]]
+    [Get the underlying endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq_ [*operator=]]]
+    [Assign from another endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.protocol [*protocol]]]
+    [The protocol associated with the endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.resize [*resize]]]
+    [Set the underlying size of the endpoint in the native type. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.size [*size]]]
+    [Get the underlying size of the endpoint in the native type. ]
+  ]
+  
+]
+
+[heading Friends]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_not__eq_ [*operator!=]]]
+    [Compare two endpoints for inequality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt_ [*operator<]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_lt__eq_ [*operator<=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_eq__eq_ [*operator==]]]
+    [Compare two endpoints for equality. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt_ [*operator>]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+  [
+    [[link asio.reference.generic__basic_endpoint.operator_gt__eq_ [*operator>=]]]
+    [Compare endpoints for ordering. ]
+  ]
+  
+]
+
+The [link asio.reference.generic__basic_endpoint `generic::basic_endpoint`] class template describes an endpoint that may be associated with any socket type.
+
+
+[heading Remarks]
+      
+The socket types sockaddr type must be able to fit into a `sockaddr_storage` structure.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:family generic::stream_protocol::family]
+
+[indexterm2 family..generic::stream_protocol] 
+Obtain an identifier for the protocol family. 
+
+
+  int family() const;
+
+
+
+[endsect]
+
+
+
+[section:iostream generic::stream_protocol::iostream]
+
+[indexterm2 iostream..generic::stream_protocol] 
+The generic socket iostream type. 
+
+
+  typedef basic_socket_iostream< stream_protocol > iostream;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.basic_socket_iostream.duration_type [*duration_type]]]
+    [The duration type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_socket_iostream.endpoint_type [*endpoint_type]]]
+    [The endpoint type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_socket_iostream.time_type [*time_type]]]
+    [The time type. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_socket_iostream.basic_socket_iostream [*basic_socket_iostream]]]
+    [Construct a basic_socket_iostream without establishing a connection. 
+
+     Establish a connection to an endpoint corresponding to a resolver query. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.close [*close]]]
+    [Close the connection. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.connect [*connect]]]
+    [Establish a connection to an endpoint corresponding to a resolver query. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.error [*error]]]
+    [Get the last error associated with the stream. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.expires_at [*expires_at]]]
+    [Get the stream's expiry time as an absolute time. 
+
+     Set the stream's expiry time as an absolute time. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.expires_from_now [*expires_from_now]]]
+    [Get the timer's expiry time relative to now. 
+
+     Set the stream's expiry time relative to now. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_socket_iostream.rdbuf [*rdbuf]]]
+    [Return a pointer to the underlying streambuf. ]
+  ]
+  
+]
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_not__eq_ generic::stream_protocol::operator!=]
+
+[indexterm2 operator!=..generic::stream_protocol] 
+Compare two protocols for inequality. 
+
+
+  friend bool operator!=(
+      const stream_protocol & p1,
+      const stream_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:operator_eq__eq_ generic::stream_protocol::operator==]
+
+[indexterm2 operator==..generic::stream_protocol] 
+Compare two protocols for equality. 
+
+
+  friend bool operator==(
+      const stream_protocol & p1,
+      const stream_protocol & p2);
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+
+[section:protocol generic::stream_protocol::protocol]
+
+[indexterm2 protocol..generic::stream_protocol] 
+Obtain an identifier for the protocol. 
+
+
+  int protocol() const;
+
+
+
+[endsect]
+
+
+
+[section:socket generic::stream_protocol::socket]
+
+[indexterm2 socket..generic::stream_protocol] 
+The generic socket type. 
+
+
+  typedef basic_stream_socket< stream_protocol > socket;
+
+
+[heading Types]
+[table
+  [[Name][Description]]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.broadcast [*broadcast]]]
+    [Socket option to permit sending of broadcast messages. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.bytes_readable [*bytes_readable]]]
+    [IO control command to get the amount of data that can be read without blocking. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.debug [*debug]]]
+    [Socket option to enable socket-level debugging. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.do_not_route [*do_not_route]]]
+    [Socket option to prevent routing, use local interfaces only. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.enable_connection_aborted [*enable_connection_aborted]]]
+    [Socket option to report aborted connections on accept. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.endpoint_type [*endpoint_type]]]
+    [The endpoint type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.implementation_type [*implementation_type]]]
+    [The underlying implementation type of I/O object. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.keep_alive [*keep_alive]]]
+    [Socket option to send keep-alives. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.linger [*linger]]]
+    [Socket option to specify whether the socket lingers on close if unsent data is present. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.lowest_layer_type [*lowest_layer_type]]]
+    [A basic_socket is always the lowest layer. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.message_flags [*message_flags]]]
+    [Bitmask type for flags that can be passed to send and receive operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.native_handle_type [*native_handle_type]]]
+    [The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.native_type [*native_type]]]
+    [(Deprecated: Use native_handle_type.) The native representation of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.non_blocking_io [*non_blocking_io]]]
+    [(Deprecated: Use non_blocking().) IO control command to set the blocking mode of the socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.protocol_type [*protocol_type]]]
+    [The protocol type. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.receive_buffer_size [*receive_buffer_size]]]
+    [Socket option for the receive buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.receive_low_watermark [*receive_low_watermark]]]
+    [Socket option for the receive low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.reuse_address [*reuse_address]]]
+    [Socket option to allow the socket to be bound to an address that is already in use. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.send_buffer_size [*send_buffer_size]]]
+    [Socket option for the send buffer size of a socket. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.send_low_watermark [*send_low_watermark]]]
+    [Socket option for the send low watermark. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.service_type [*service_type]]]
+    [The type of the service that will be used to provide I/O operations. ]
+  
+  ]
+
+  [
+
+    [[link asio.reference.basic_stream_socket.shutdown_type [*shutdown_type]]]
+    [Different ways a socket may be shutdown. ]
+  
+  ]
+
+]
+
+[heading Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_stream_socket.assign [*assign]]]
+    [Assign an existing native socket to the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.async_connect [*async_connect]]]
+    [Start an asynchronous connect. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.async_read_some [*async_read_some]]]
+    [Start an asynchronous read. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.async_receive [*async_receive]]]
+    [Start an asynchronous receive. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.async_send [*async_send]]]
+    [Start an asynchronous send. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.async_write_some [*async_write_some]]]
+    [Start an asynchronous write. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.at_mark [*at_mark]]]
+    [Determine whether the socket is at the out-of-band data mark. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.available [*available]]]
+    [Determine the number of bytes available for reading. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.basic_stream_socket [*basic_stream_socket]]]
+    [Construct a basic_stream_socket without opening it. 
+
+     Construct and open a basic_stream_socket. 
+
+     Construct a basic_stream_socket, opening it and binding it to the given local endpoint. 
+
+     Construct a basic_stream_socket on an existing native socket. 
+
+     Move-construct a basic_stream_socket from another. 
+
+     Move-construct a basic_stream_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.bind [*bind]]]
+    [Bind the socket to the given local endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.cancel [*cancel]]]
+    [Cancel all asynchronous operations associated with the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.close [*close]]]
+    [Close the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.connect [*connect]]]
+    [Connect the socket to the specified endpoint. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.get_io_service [*get_io_service]]]
+    [Get the io_service associated with the object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.get_option [*get_option]]]
+    [Get an option from the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.io_control [*io_control]]]
+    [Perform an IO control command on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.is_open [*is_open]]]
+    [Determine whether the socket is open. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.local_endpoint [*local_endpoint]]]
+    [Get the local endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.lowest_layer [*lowest_layer]]]
+    [Get a reference to the lowest layer. 
+
+     Get a const reference to the lowest layer. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.native [*native]]]
+    [(Deprecated: Use native_handle().) Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.native_handle [*native_handle]]]
+    [Get the native socket representation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.native_non_blocking [*native_non_blocking]]]
+    [Gets the non-blocking mode of the native socket implementation. 
+
+     Sets the non-blocking mode of the native socket implementation. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.non_blocking [*non_blocking]]]
+    [Gets the non-blocking mode of the socket. 
+
+     Sets the non-blocking mode of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.open [*open]]]
+    [Open the socket using the specified protocol. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
+    [Move-assign a basic_stream_socket from another. 
+
+     Move-assign a basic_stream_socket from a socket of another protocol type. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.read_some [*read_some]]]
+    [Read some data from the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.receive [*receive]]]
+    [Receive some data on the socket. 
+
+     Receive some data on a connected socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.remote_endpoint [*remote_endpoint]]]
+    [Get the remote endpoint of the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.send [*send]]]
+    [Send some data on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.set_option [*set_option]]]
+    [Set an option on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.shutdown [*shutdown]]]
+    [Disable sends or receives on the socket. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.write_some [*write_some]]]
+    [Write some data to the socket. ]
+  ]
+  
+]
+
+[heading Protected Member Functions]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_stream_socket.get_implementation [*get_implementation]]]
+    [Get the underlying implementation of the I/O object. ]
+  ]
+  
+  [
+    [[link asio.reference.basic_stream_socket.get_service [*get_service]]]
+    [Get the service associated with the I/O object. ]
+  ]
+  
+]
+
+[heading Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_stream_socket.max_connections [*max_connections]]]
+    [The maximum length of the queue of pending incoming connections. ]
+  ]
+
+  [
+    [[link asio.reference.basic_stream_socket.message_do_not_route [*message_do_not_route]]]
+    [Specify that the data should not be subject to routing. ]
+  ]
+
+  [
+    [[link asio.reference.basic_stream_socket.message_end_of_record [*message_end_of_record]]]
+    [Specifies that the data marks the end of a record. ]
+  ]
+
+  [
+    [[link asio.reference.basic_stream_socket.message_out_of_band [*message_out_of_band]]]
+    [Process out-of-band data. ]
+  ]
+
+  [
+    [[link asio.reference.basic_stream_socket.message_peek [*message_peek]]]
+    [Peek at incoming data without removing it from the input queue. ]
+  ]
+
+]
+
+[heading Protected Data Members]
+[table
+  [[Name][Description]]
+
+  [
+    [[link asio.reference.basic_stream_socket.implementation [*implementation]]]
+    [(Deprecated: Use get_implementation().) The underlying implementation of the I/O object. ]
+  ]
+
+  [
+    [[link asio.reference.basic_stream_socket.service [*service]]]
+    [(Deprecated: Use get_service().) The service associated with the I/O object. ]
+  ]
+
+]
+
+The [link asio.reference.basic_stream_socket `basic_stream_socket`] class template provides asynchronous and blocking stream-oriented socket functionality.
+
+
+[heading Thread Safety]
+  
+['Distinct] ['objects:] Safe.
+
+['Shared] ['objects:] Unsafe.
+
+
+
+
+
+[heading Requirements]
+
+['Header: ][^asio/generic/stream_protocol.hpp]
+
+['Convenience header: ][^asio.hpp]
+
+
+[endsect]
+
+
+[section:stream_protocol generic::stream_protocol::stream_protocol]
+
+[indexterm2 stream_protocol..generic::stream_protocol] 
+Construct a protocol object for a specific address family and protocol. 
+
+
+  ``[link asio.reference.generic__stream_protocol.stream_protocol.overload1 stream_protocol]``(
+      int address_family,
+      int socket_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__stream_protocol.stream_protocol.overload1 more...]]``
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  ``[link asio.reference.generic__stream_protocol.stream_protocol.overload2 stream_protocol]``(
+      const Protocol & source_protocol);
+  ``  [''''&raquo;''' [link asio.reference.generic__stream_protocol.stream_protocol.overload2 more...]]``
+
+
+[section:overload1 generic::stream_protocol::stream_protocol (1 of 2 overloads)]
+
+
+Construct a protocol object for a specific address family and protocol. 
+
+
+  stream_protocol(
+      int address_family,
+      int socket_protocol);
+
+
+
+[endsect]
+
+
+
+[section:overload2 generic::stream_protocol::stream_protocol (2 of 2 overloads)]
+
+
+Construct a generic protocol object from a specific protocol. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol]``>
+  stream_protocol(
+      const Protocol & source_protocol);
+
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[@c][bad\_cast Thrown if the source protocol is not stream-oriented. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
+[section:type generic::stream_protocol::type]
+
+[indexterm2 type..generic::stream_protocol] 
+Obtain an identifier for the type of the protocol. 
+
+
+  int type() const;
+
+
+
+[endsect]
+
 
 
 [endsect]
@@ -54692,7 +59840,7 @@
 
   template<
       typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
+      typename Signature>
   struct handler_type
 
 
@@ -54715,9 +59863,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_type.hpp]
+['Header: ][^asio/handler_type.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:type handler_type::type]
@@ -54732,9 +59880,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/handler_type.hpp]
+['Header: ][^asio/handler_type.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -54743,281 +59891,6 @@
 
 [endsect]
 
-[section:handler_type_lt__Handler_&,_Signature__gt_ handler_type< Handler &, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< Handler &, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp__rp_,_Signature__gt_ handler_type< ReturnType(), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(), Signature > :
-    public handler_type< ReturnType(*)(), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp_Arg1_rp_,_Signature__gt_ handler_type< ReturnType(Arg1), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Arg1 Arg1]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(Arg1), Signature > :
-    public handler_type< ReturnType(*)(Arg1), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp_Arg1,_Arg2_rp_,_Signature__gt_ handler_type< ReturnType(Arg1, Arg2), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Arg1 Arg1]``,
-      typename ``[link asio.reference.Arg2 Arg2]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(Arg1, Arg2), Signature > :
-    public handler_type< ReturnType(*)(Arg1, Arg2), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp_Arg1,_Arg2,_Arg3_rp_,_Signature__gt_ handler_type< ReturnType(Arg1, Arg2, Arg3), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Arg1 Arg1]``,
-      typename ``[link asio.reference.Arg2 Arg2]``,
-      typename ``[link asio.reference.Arg3 Arg3]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(Arg1, Arg2, Arg3), Signature > :
-    public handler_type< ReturnType(*)(Arg1, Arg2, Arg3), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp_Arg1,_Arg2,_Arg3,_Arg4_rp_,_Signature__gt_ handler_type< ReturnType(Arg1, Arg2, Arg3, Arg4), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Arg1 Arg1]``,
-      typename ``[link asio.reference.Arg2 Arg2]``,
-      typename ``[link asio.reference.Arg3 Arg3]``,
-      typename ``[link asio.reference.Arg4 Arg4]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(Arg1, Arg2, Arg3, Arg4), Signature > :
-    public handler_type< ReturnType(*)(Arg1, Arg2, Arg3, Arg4), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__ReturnType_lp_Arg1,_Arg2,_Arg3,_Arg4,_Arg5_rp_,_Signature__gt_ handler_type< ReturnType(Arg1, Arg2, Arg3, Arg4, Arg5), Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.ReturnType ReturnType]``,
-      typename ``[link asio.reference.Arg1 Arg1]``,
-      typename ``[link asio.reference.Arg2 Arg2]``,
-      typename ``[link asio.reference.Arg3 Arg3]``,
-      typename ``[link asio.reference.Arg4 Arg4]``,
-      typename ``[link asio.reference.Arg5 Arg5]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< ReturnType(Arg1, Arg2, Arg3, Arg4, Arg5), Signature > :
-    public handler_type< ReturnType(*)(Arg1, Arg2, Arg3, Arg4, Arg5), Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__const_Handler_&,_Signature__gt_ handler_type< const Handler &, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< const Handler &, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__const_Handler,_Signature__gt_ handler_type< const Handler, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< const Handler, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__const_volatile_Handler_&,_Signature__gt_ handler_type< const volatile Handler &, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< const volatile Handler &, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__const_volatile_Handler,_Signature__gt_ handler_type< const volatile Handler, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< const volatile Handler, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__volatile_Handler_&,_Signature__gt_ handler_type< volatile Handler &, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< volatile Handler &, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
-[section:handler_type_lt__volatile_Handler,_Signature__gt_ handler_type< volatile Handler, Signature >]
-
-
-
-  template<
-      typename ``[link asio.reference.Handler Handler]``,
-      typename ``[link asio.reference.Signature Signature]``>
-  struct handler_type< volatile Handler, Signature > :
-    public handler_type< Handler, Signature >
-
-
-[heading Requirements]
-
-[*Header: ][^asio/handler_type.hpp]
-
-[*Convenience header: ][^asio.hpp]
-
-
-[endsect]
-
 
 [section:has_service has_service]
 
@@ -55050,9 +59923,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -55206,7 +60079,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the asio::waitable\_timer typedef.
+Most applications will use one of the [link asio.reference.steady_timer `steady_timer`], [link asio.reference.system_timer `system_timer`] or [link asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -55216,20 +60089,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait: 
+Performing a blocking wait (C++11): 
 
    // Construct a timer without setting an expiry time.
-   asio::waitable_timer timer(io_service);
+   asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
-   timer.expires_from_now(boost::posix_time::seconds(5));
+   timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -55238,7 +60111,7 @@
 
 
 
-Performing an asynchronous wait: 
+Performing an asynchronous wait (C++11): 
 
    void handler(const asio::error_code& error)
    {
@@ -55251,8 +60124,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
-   asio::waitable_timer timer(io_service,
-       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+   asio::steady_timer timer(io_service,
+       std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -55261,7 +60134,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -55311,9 +60184,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/high_resolution_timer.hpp]
+['Header: ][^asio/high_resolution_timer.hpp]
 
-[*Convenience header: ]None
+['Convenience header: ]None
 
 
 [endsect]
@@ -55341,9 +60214,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:invalid_service_owner invalid_service_owner::invalid_service_owner]
@@ -55519,9 +60392,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe, with the specific exceptions of the `reset()` and `notify_fork()` functions. Calling `reset()` while there are unfinished `run()`, `run_one()`, `poll()` or `poll_one()` calls results in undefined behaviour. The `notify_fork()` function should not be called while any [link asio.reference.io_service `io_service`] function, or any function on an I/O object that is associated with the [link asio.reference.io_service `io_service`], is being called in another thread.
+['Shared] ['objects:] Safe, with the specific exceptions of the `reset()` and `notify_fork()` functions. Calling `reset()` while there are unfinished `run()`, `run_one()`, `poll()` or `poll_one()` calls results in undefined behaviour. The `notify_fork()` function should not be called while any [link asio.reference.io_service `io_service`] function, or any function on an I/O object that is associated with the [link asio.reference.io_service `io_service`], is being called in another thread.
 
 
 
@@ -55538,7 +60411,7 @@
 
 If an exception is thrown from a handler, the exception is allowed to propagate through the throwing thread's invocation of `run()`, `run_one()`, `poll()` or `poll_one()`. No other threads that are calling any of these functions are affected. It is then the responsibility of the application to catch the exception.
 
-After the exception has been caught, the `run()`, `run_one()`, `poll()` or `poll_one()` call may be restarted [*without] the need for an intervening call to `reset()`. This allows the thread to rejoin the [link asio.reference.io_service `io_service`] object's thread pool without impacting any other threads in the pool.
+After the exception has been caught, the `run()`, `run_one()`, `poll()` or `poll_one()` call may be restarted ['without] the need for an intervening call to `reset()`. This allows the thread to rejoin the [link asio.reference.io_service `io_service`] object's thread pool without impacting any other threads in the pool.
 
 For example:
 
@@ -55614,9 +60487,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:add_service io_service::add_service]
@@ -55666,9 +60539,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -55683,7 +60556,7 @@
 
   template<
       typename ``[link asio.reference.CompletionHandler CompletionHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` dispatch(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` dispatch(
       CompletionHandler handler);
 
 
@@ -55794,9 +60667,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -56099,7 +60972,7 @@
 
   template<
       typename ``[link asio.reference.CompletionHandler CompletionHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` post(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` post(
       CompletionHandler handler);
 
 
@@ -56403,9 +61276,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -56535,9 +61408,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:id io_service::id::id]
@@ -56611,9 +61484,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:get_io_service io_service::service::get_io_service]
@@ -56803,18 +61676,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/strand.hpp]
+['Header: ][^asio/strand.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:dispatch io_service::strand::dispatch]
@@ -56825,7 +61698,7 @@
 
   template<
       typename ``[link asio.reference.CompletionHandler CompletionHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` dispatch(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` dispatch(
       CompletionHandler handler);
 
 
@@ -56887,7 +61760,7 @@
 
   template<
       typename ``[link asio.reference.CompletionHandler CompletionHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` post(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` post(
       CompletionHandler handler);
 
 
@@ -57084,9 +61957,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:get_io_service io_service::work::get_io_service]
@@ -57307,17 +62180,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:address ip::address::address]
 
@@ -57585,9 +62458,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -57607,9 +62480,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -57669,9 +62542,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -57764,9 +62637,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -57786,9 +62659,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -57808,9 +62681,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address.hpp]
+['Header: ][^asio/ip/address.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58059,17 +62932,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:address_v4 ip::address_v4::address_v4]
 
@@ -58249,9 +63122,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58472,9 +63345,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58494,9 +63367,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58556,9 +63429,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58593,9 +63466,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58615,9 +63488,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58637,9 +63510,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v4.hpp]
+['Header: ][^asio/ip/address_v4.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -58919,17 +63792,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:address_v6 ip::address_v6::address_v6]
 
@@ -59038,9 +63911,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59330,9 +64203,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59352,9 +64225,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59414,9 +64287,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59451,9 +64324,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59473,9 +64346,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59495,9 +64368,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/address_v6.hpp]
+['Header: ][^asio/ip/address_v6.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -59800,18 +64673,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:address ip::basic_endpoint::address]
 
@@ -60045,9 +64918,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60067,9 +64940,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60089,9 +64962,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60148,9 +65021,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60185,9 +65058,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60207,9 +65080,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60229,9 +65102,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60312,9 +65185,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_endpoint.hpp]
+['Header: ][^asio/ip/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60485,17 +65358,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:async_resolve ip::basic_resolver::async_resolve]
 
@@ -60505,7 +65378,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ip__basic_resolver.async_resolve.overload1 async_resolve]``(
       const query & q,
       ResolveHandler handler);
   ``  [''''&raquo;''' [link asio.reference.ip__basic_resolver.async_resolve.overload1 more...]]``
@@ -60516,7 +65389,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ip__basic_resolver.async_resolve.overload2 async_resolve]``(
       const endpoint_type & e,
       ResolveHandler handler);
   ``  [''''&raquo;''' [link asio.reference.ip__basic_resolver.async_resolve.overload2 more...]]``
@@ -60530,7 +65403,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_resolve(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       const query & q,
       ResolveHandler handler);
 
@@ -60578,7 +65451,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_resolve(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       const endpoint_type & e,
       ResolveHandler handler);
 
@@ -60677,9 +65550,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60840,9 +65713,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60962,18 +65835,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -60992,9 +65865,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61108,18 +65981,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61377,9 +66250,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver.hpp]
+['Header: ][^asio/ip/basic_resolver.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61457,17 +66330,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_entry.hpp]
+['Header: ][^asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:basic_resolver_entry ip::basic_resolver_entry::basic_resolver_entry]
 
@@ -61548,9 +66421,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_entry.hpp]
+['Header: ][^asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61597,9 +66470,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_entry.hpp]
+['Header: ][^asio/ip/basic_resolver_entry.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61737,17 +66610,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:basic_resolver_iterator ip::basic_resolver_iterator::basic_resolver_iterator]
@@ -61834,9 +66707,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61855,9 +66728,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61891,9 +66764,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61975,9 +66848,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -61996,9 +66869,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -62072,18 +66945,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -62157,18 +67030,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_iterator.hpp]
+['Header: ][^asio/ip/basic_resolver_iterator.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -62287,17 +67160,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_query.hpp]
+['Header: ][^asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:address_configured ip::basic_resolver_query::address_configured]
@@ -62570,9 +67443,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_query.hpp]
+['Header: ][^asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -62670,9 +67543,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/basic_resolver_query.hpp]
+['Header: ][^asio/ip/basic_resolver_query.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -62727,9 +67600,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/host_name.hpp]
+['Header: ][^asio/ip/host_name.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 ip::host_name (1 of 2 overloads)]
@@ -62850,18 +67723,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:endpoint ip::icmp::endpoint]
@@ -63006,9 +67879,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -63016,9 +67889,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63052,9 +67925,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63074,9 +67947,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63226,18 +68099,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63467,7 +68340,9 @@
 
      Construct a basic_raw_socket on an existing native socket. 
 
-     Move-construct a basic_raw_socket from another. ]
+     Move-construct a basic_raw_socket from another. 
+
+     Move-construct a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -63553,7 +68428,9 @@
   
   [
     [[link asio.reference.basic_raw_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_raw_socket from another. ]
+    [Move-assign a basic_raw_socket from another. 
+
+     Move-assign a basic_raw_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -63661,18 +68538,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/icmp.hpp]
+['Header: ][^asio/ip/icmp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63766,9 +68643,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/multicast.hpp]
+['Header: ][^asio/ip/multicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63817,9 +68694,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/multicast.hpp]
+['Header: ][^asio/ip/multicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63858,9 +68735,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/multicast.hpp]
+['Header: ][^asio/ip/multicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63899,9 +68776,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/multicast.hpp]
+['Header: ][^asio/ip/multicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -63940,9 +68817,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/multicast.hpp]
+['Header: ][^asio/ip/multicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64024,9 +68901,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_query_base.hpp]
+['Header: ][^asio/ip/resolver_query_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:address_configured ip::resolver_query_base::address_configured]
@@ -64083,9 +68960,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_query_base.hpp]
+['Header: ][^asio/ip/resolver_query_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64275,9 +69152,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:async_resolve ip::resolver_service::async_resolve]
 
@@ -64287,7 +69164,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.ip__resolver_service.async_resolve.overload1 async_resolve]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ip__resolver_service.async_resolve.overload1 async_resolve]``(
       implementation_type & impl,
       const query_type & query,
       ResolveHandler handler);
@@ -64299,7 +69176,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` ``[link asio.reference.ip__resolver_service.async_resolve.overload2 async_resolve]``(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ip__resolver_service.async_resolve.overload2 async_resolve]``(
       implementation_type & impl,
       const endpoint_type & endpoint,
       ResolveHandler handler);
@@ -64314,7 +69191,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_resolve(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       implementation_type & impl,
       const query_type & query,
       ResolveHandler handler);
@@ -64333,7 +69210,7 @@
 
   template<
       typename ``[link asio.reference.ResolveHandler ResolveHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_resolve(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_resolve(
       implementation_type & impl,
       const endpoint_type & endpoint,
       ResolveHandler handler);
@@ -64403,9 +69280,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64455,9 +69332,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64577,18 +69454,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64607,9 +69484,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64723,18 +69600,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/resolver_service.hpp]
+['Header: ][^asio/ip/resolver_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -64925,18 +69802,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:acceptor ip::tcp::acceptor]
@@ -65132,7 +70009,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor. 
 
-     Move-construct a basic_socket_acceptor from another. ]
+     Move-construct a basic_socket_acceptor from another. 
+
+     Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -65211,7 +70090,9 @@
   
   [
     [[link asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket_acceptor from another. ]
+    [Move-assign a basic_socket_acceptor from another. 
+
+     Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -65289,9 +70170,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -65313,9 +70194,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65464,9 +70345,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -65474,9 +70355,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65583,9 +70464,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65634,9 +70515,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65656,9 +70537,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65678,9 +70559,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -65830,18 +70711,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -66071,7 +70952,9 @@
 
      Construct a basic_stream_socket on an existing native socket. 
 
-     Move-construct a basic_stream_socket from another. ]
+     Move-construct a basic_stream_socket from another. 
+
+     Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -66157,7 +71040,9 @@
   
   [
     [[link asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_stream_socket from another. ]
+    [Move-assign a basic_stream_socket from another. 
+
+     Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -66267,9 +71152,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -66277,9 +71162,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/tcp.hpp]
+['Header: ][^asio/ip/tcp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -66418,18 +71303,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:endpoint ip::udp::endpoint]
@@ -66574,9 +71459,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -66584,9 +71469,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -66620,9 +71505,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -66642,9 +71527,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -66794,18 +71679,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67035,7 +71920,9 @@
 
      Construct a basic_datagram_socket on an existing native socket. 
 
-     Move-construct a basic_datagram_socket from another. ]
+     Move-construct a basic_datagram_socket from another. 
+
+     Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -67121,7 +72008,9 @@
   
   [
     [[link asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_datagram_socket from another. ]
+    [Move-assign a basic_datagram_socket from another. 
+
+     Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -67229,18 +72118,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/udp.hpp]
+['Header: ][^asio/ip/udp.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67334,9 +72223,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/unicast.hpp]
+['Header: ][^asio/ip/unicast.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67385,9 +72274,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ip/v6_only.hpp]
+['Header: ][^asio/ip/v6_only.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67417,9 +72306,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read_until.hpp]
+['Header: ][^asio/read_until.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:value is_match_condition::value]
@@ -67462,9 +72351,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/is_read_buffered.hpp]
+['Header: ][^asio/is_read_buffered.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:value is_read_buffered::value]
@@ -67507,9 +72396,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/is_write_buffered.hpp]
+['Header: ][^asio/is_write_buffered.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:value is_write_buffered::value]
@@ -67663,18 +72552,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:basic_endpoint local::basic_endpoint::basic_endpoint]
 
@@ -67835,9 +72724,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67857,9 +72746,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67879,9 +72768,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67938,9 +72827,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67975,9 +72864,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -67997,9 +72886,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -68019,9 +72908,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -68121,9 +73010,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/basic_endpoint.hpp]
+['Header: ][^asio/local/basic_endpoint.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -68188,9 +73077,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/connect_pair.hpp]
+['Header: ][^asio/local/connect_pair.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 local::connect_pair (1 of 2 overloads)]
@@ -68290,18 +73179,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/local/datagram_protocol.hpp]
+['Header: ][^asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:endpoint local::datagram_protocol::endpoint]
@@ -68437,9 +73326,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -68447,9 +73336,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/datagram_protocol.hpp]
+['Header: ][^asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -68707,7 +73596,9 @@
 
      Construct a basic_datagram_socket on an existing native socket. 
 
-     Move-construct a basic_datagram_socket from another. ]
+     Move-construct a basic_datagram_socket from another. 
+
+     Move-construct a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -68793,7 +73684,9 @@
   
   [
     [[link asio.reference.basic_datagram_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_datagram_socket from another. ]
+    [Move-assign a basic_datagram_socket from another. 
+
+     Move-assign a basic_datagram_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -68901,18 +73794,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/local/datagram_protocol.hpp]
+['Header: ][^asio/local/datagram_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -69004,18 +73897,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/local/stream_protocol.hpp]
+['Header: ][^asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:acceptor local::stream_protocol::acceptor]
@@ -69211,7 +74104,9 @@
 
      Construct a basic_socket_acceptor on an existing native acceptor. 
 
-     Move-construct a basic_socket_acceptor from another. ]
+     Move-construct a basic_socket_acceptor from another. 
+
+     Move-construct a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -69290,7 +74185,9 @@
   
   [
     [[link asio.reference.basic_socket_acceptor.operator_eq_ [*operator=]]]
-    [Move-assign a basic_socket_acceptor from another. ]
+    [Move-assign a basic_socket_acceptor from another. 
+
+     Move-assign a basic_socket_acceptor from an acceptor of another protocol type. ]
   ]
   
   [
@@ -69368,9 +74265,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -69392,9 +74289,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/stream_protocol.hpp]
+['Header: ][^asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -69534,9 +74431,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -69544,9 +74441,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/stream_protocol.hpp]
+['Header: ][^asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -69653,9 +74550,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/stream_protocol.hpp]
+['Header: ][^asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -69899,7 +74796,9 @@
 
      Construct a basic_stream_socket on an existing native socket. 
 
-     Move-construct a basic_stream_socket from another. ]
+     Move-construct a basic_stream_socket from another. 
+
+     Move-construct a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -69985,7 +74884,9 @@
   
   [
     [[link asio.reference.basic_stream_socket.operator_eq_ [*operator=]]]
-    [Move-assign a basic_stream_socket from another. ]
+    [Move-assign a basic_stream_socket from another. 
+
+     Move-assign a basic_stream_socket from a socket of another protocol type. ]
   ]
   
   [
@@ -70095,9 +74996,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -70105,9 +75006,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/local/stream_protocol.hpp]
+['Header: ][^asio/local/stream_protocol.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70185,9 +75086,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:mutable_buffer mutable_buffer::mutable_buffer]
 
@@ -70358,9 +75259,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:begin mutable_buffers_1::begin]
@@ -70389,9 +75290,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70576,9 +75477,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70634,9 +75535,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:begin null_buffers::begin]
@@ -70665,9 +75566,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70744,9 +75645,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/buffer.hpp]
+['Header: ][^asio/buffer.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70772,9 +75673,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70792,9 +75693,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/placeholders.hpp]
+['Header: ][^asio/placeholders.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70812,9 +75713,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/placeholders.hpp]
+['Header: ][^asio/placeholders.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70832,9 +75733,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/placeholders.hpp]
+['Header: ][^asio/placeholders.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -70852,9 +75753,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/placeholders.hpp]
+['Header: ][^asio/placeholders.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -71056,17 +75957,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign posix::basic_descriptor::assign]
 
@@ -71285,9 +76186,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -71592,9 +76493,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72002,18 +76903,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72064,9 +76965,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72208,9 +77109,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72377,9 +77278,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72477,9 +77378,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_descriptor.hpp]
+['Header: ][^asio/posix/basic_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -72712,18 +77613,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign posix::basic_stream_descriptor::assign]
 
@@ -72789,7 +77690,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -72846,7 +77747,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -73062,9 +77963,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -73381,9 +78282,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -73805,18 +78706,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -73873,9 +78774,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74026,9 +78927,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74204,9 +79105,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74433,9 +79334,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/basic_stream_descriptor.hpp]
+['Header: ][^asio/posix/basic_stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74612,9 +79513,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/descriptor_base.hpp]
+['Header: ][^asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:bytes_readable posix::descriptor_base::bytes_readable]
@@ -74648,9 +79549,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/descriptor_base.hpp]
+['Header: ][^asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74687,9 +79588,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/descriptor_base.hpp]
+['Header: ][^asio/posix/descriptor_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -74920,9 +79821,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -74930,9 +79831,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/stream_descriptor.hpp]
+['Header: ][^asio/posix/stream_descriptor.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -75098,9 +79999,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/stream_descriptor_service.hpp]
+['Header: ][^asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign posix::stream_descriptor_service::assign]
@@ -75129,7 +80030,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -75149,7 +80050,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -75265,9 +80166,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/stream_descriptor_service.hpp]
+['Header: ][^asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -75383,9 +80284,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/stream_descriptor_service.hpp]
+['Header: ][^asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -75458,9 +80359,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/posix/stream_descriptor_service.hpp]
+['Header: ][^asio/posix/stream_descriptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -75714,6 +80615,11 @@
   ]
   
   [
+    [[link asio.reference.raw_socket_service.converting_move_construct [*converting_move_construct]]]
+    [Move-construct a new raw socket implementation from another protocol type. ]
+  ]
+  
+  [
     [[link asio.reference.raw_socket_service.destroy [*destroy]]]
     [Destroy a raw socket implementation. ]
   ]
@@ -75837,9 +80743,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign raw_socket_service::assign]
@@ -75868,7 +80774,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -75888,7 +80794,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -75909,7 +80815,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive_from(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive_from(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       endpoint_type & sender_endpoint,
@@ -75931,7 +80837,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -75952,7 +80858,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send_to(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send_to(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       const endpoint_type & destination,
@@ -76076,6 +80982,25 @@
 
 
 
+[section:converting_move_construct raw_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..raw_socket_service] 
+Move-construct a new raw socket implementation from another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``>
+  void converting_move_construct(
+      implementation_type & impl,
+      typename raw_socket_service< Protocol1 >::implementation_type & other_impl,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy raw_socket_service::destroy]
 
 [indexterm2 destroy..raw_socket_service] 
@@ -76103,9 +81028,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -76174,9 +81099,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -76308,9 +81233,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -76383,9 +81308,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -76473,9 +81398,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/raw_socket_service.hpp]
+['Header: ][^asio/raw_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -76717,9 +81642,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read.hpp]
+['Header: ][^asio/read.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 read (1 of 8 overloads)]
@@ -77386,9 +82311,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read_at.hpp]
+['Header: ][^asio/read_at.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 read_at (1 of 8 overloads)]
@@ -78064,9 +82989,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/read_until.hpp]
+['Header: ][^asio/read_until.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 read_until (1 of 8 overloads)]
@@ -78849,6 +83774,11 @@
   ]
   
   [
+    [[link asio.reference.seq_packet_socket_service.converting_move_construct [*converting_move_construct]]]
+    [Move-construct a new sequenced packet socket implementation from another protocol type. ]
+  ]
+  
+  [
     [[link asio.reference.seq_packet_socket_service.destroy [*destroy]]]
     [Destroy a sequenced packet socket implementation. ]
   ]
@@ -78962,9 +83892,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign seq_packet_socket_service::assign]
@@ -78993,7 +83923,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -79160,6 +84090,25 @@
 
 
 
+[section:converting_move_construct seq_packet_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..seq_packet_socket_service] 
+Move-construct a new sequenced packet socket implementation from another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``>
+  void converting_move_construct(
+      implementation_type & impl,
+      typename seq_packet_socket_service< Protocol1 >::implementation_type & other_impl,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy seq_packet_socket_service::destroy]
 
 [indexterm2 destroy..seq_packet_socket_service] 
@@ -79187,9 +84136,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79258,9 +84207,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79392,9 +84341,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79467,9 +84416,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79559,9 +84508,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/seq_packet_socket_service.hpp]
+['Header: ][^asio/seq_packet_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79870,18 +84819,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port.hpp]
+['Header: ][^asio/serial_port.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -79950,9 +84899,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:_serial_port_base serial_port_base::~serial_port_base]
@@ -80010,9 +84959,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:baud_rate serial_port_base::baud_rate::baud_rate]
@@ -80109,9 +85058,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:character_size serial_port_base::character_size::character_size]
@@ -80221,9 +85170,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:flow_control serial_port_base::flow_control::flow_control]
@@ -80369,9 +85318,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:load serial_port_base::parity::load]
@@ -80517,9 +85466,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_base.hpp]
+['Header: ][^asio/serial_port_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:load serial_port_base::stop_bits::load]
@@ -80769,9 +85718,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_service.hpp]
+['Header: ][^asio/serial_port_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign serial_port_service::assign]
@@ -80800,7 +85749,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -80820,7 +85769,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -80955,9 +85904,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_service.hpp]
+['Header: ][^asio/serial_port_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -81054,9 +86003,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_service.hpp]
+['Header: ][^asio/serial_port_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -81075,9 +86024,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/serial_port_service.hpp]
+['Header: ][^asio/serial_port_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -81213,9 +86162,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:service_already_exists service_already_exists::service_already_exists]
@@ -81348,9 +86297,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -81406,9 +86355,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/signal_set.hpp]
+['Header: ][^asio/signal_set.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -81501,9 +86450,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/signal_set_service.hpp]
+['Header: ][^asio/signal_set_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:add signal_set_service::add]
@@ -81529,7 +86478,7 @@
 
   template<
       typename ``[link asio.reference.SignalHandler SignalHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       SignalHandler handler);
 
@@ -81644,9 +86593,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/signal_set_service.hpp]
+['Header: ][^asio/signal_set_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -81780,6 +86729,11 @@
   ]
   
   [
+    [[link asio.reference.socket_acceptor_service.converting_move_construct [*converting_move_construct]]]
+    [Move-construct a new socket acceptor implementation from another protocol type. ]
+  ]
+  
+  [
     [[link asio.reference.socket_acceptor_service.destroy [*destroy]]]
     [Destroy a socket acceptor implementation. ]
   ]
@@ -81878,9 +86832,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:accept socket_acceptor_service::accept]
@@ -81890,12 +86844,14 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``>
   asio::error_code accept(
       implementation_type & impl,
-      basic_socket< protocol_type, SocketService > & peer,
+      basic_socket< Protocol1, SocketService > & peer,
       endpoint_type * peer_endpoint,
-      asio::error_code & ec);
+      asio::error_code & ec,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
 
 
 
@@ -81928,13 +86884,15 @@
 
 
   template<
+      typename ``[link asio.reference.Protocol Protocol1]``,
       typename ``[link asio.reference.SocketService SocketService]``,
       typename ``[link asio.reference.AcceptHandler AcceptHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_accept(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_accept(
       implementation_type & impl,
-      basic_socket< protocol_type, SocketService > & peer,
+      basic_socket< Protocol1, SocketService > & peer,
       endpoint_type * peer_endpoint,
-      AcceptHandler handler);
+      AcceptHandler handler,
+      typename enable_if< is_convertible< Protocol, Protocol1 >::value >::type *  = 0);
 
 
 
@@ -82006,6 +86964,25 @@
 
 
 
+[section:converting_move_construct socket_acceptor_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..socket_acceptor_service] 
+Move-construct a new socket acceptor implementation from another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``>
+  void converting_move_construct(
+      implementation_type & impl,
+      typename socket_acceptor_service< Protocol1 >::implementation_type & other_impl,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy socket_acceptor_service::destroy]
 
 [indexterm2 destroy..socket_acceptor_service] 
@@ -82033,9 +87010,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82104,9 +87081,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82255,9 +87232,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82330,9 +87307,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82422,9 +87399,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_acceptor_service.hpp]
+['Header: ][^asio/socket_acceptor_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82631,9 +87608,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:broadcast socket_base::broadcast]
@@ -82678,9 +87655,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82718,9 +87695,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82769,9 +87746,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82820,9 +87797,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82871,9 +87848,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82922,9 +87899,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -82974,9 +87951,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83037,9 +88014,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83104,9 +88081,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83155,9 +88132,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83206,9 +88183,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83257,9 +88234,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83308,9 +88285,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83359,9 +88336,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/socket_base.hpp]
+['Header: ][^asio/socket_base.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -83425,7 +88402,9 @@
 [section:spawn spawn]
 
 [indexterm1 spawn] 
-    
+Start a new stackful coroutine. 
+
+      
   template<
       typename ``[link asio.reference.Handler Handler]``,
       typename Function>
@@ -83460,16 +88439,50 @@
       const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
   ``  [''''&raquo;''' [link asio.reference.spawn.overload4 more...]]``
 
+The `spawn()` function is a high-level wrapper over the Boost.Coroutine library. This function enables programs to implement asynchronous logic in a synchronous manner, as illustrated by the following example:
+
+
+
+   asio::spawn(my_strand, do_echo);
+
+   // ...
+
+   void do_echo(asio::yield_context yield)
+   {
+     try
+     {
+       char data[128];
+       for (;;)
+       {
+         std::size_t length =
+           my_socket.async_read_some(
+             asio::buffer(data), yield);
+
+         asio::async_write(my_socket,
+             asio::buffer(data, length), yield);
+       }
+     }
+     catch (std::exception& e)
+     {
+       // ...
+     }
+   } 
+
+
+
+
 [heading Requirements]
 
-[*Header: ][^asio/spawn.hpp]
+['Header: ][^asio/spawn.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 spawn (1 of 4 overloads)]
 
 
+Start a new stackful coroutine, calling the specified handler when it completes. 
+
 
   template<
       typename ``[link asio.reference.Handler Handler]``,
@@ -83480,6 +88493,32 @@
       const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
 
 
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[handler][A handler to be called when the coroutine exits. More importantly, the handler provides an execution context (via the the handler invocation hook) for the coroutine. The handler must have the signature: 
+``
+   void handler(); 
+``
+]]
+
+[[function][The coroutine function. The function must have the signature: 
+``
+   void function(basic_yield_context<Handler> yield); 
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
 
 [endsect]
 
@@ -83488,6 +88527,8 @@
 [section:overload2 spawn (2 of 4 overloads)]
 
 
+Start a new stackful coroutine, inheriting the execution context of another. 
+
 
   template<
       typename ``[link asio.reference.Handler Handler]``,
@@ -83498,6 +88539,28 @@
       const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
 
 
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[ctx][Identifies the current coroutine as a parent of the new coroutine. This specifies that the new coroutine should inherit the execution context of the parent. For example, if the parent coroutine is executing in a particular strand, then the new coroutine will execute in the same strand.]]
+
+[[function][The coroutine function. The function must have the signature: 
+``
+   void function(basic_yield_context<Handler> yield); 
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
 
 [endsect]
 
@@ -83506,6 +88569,8 @@
 [section:overload3 spawn (3 of 4 overloads)]
 
 
+Start a new stackful coroutine that executes in the contex of a strand. 
+
 
   template<
       typename Function>
@@ -83515,6 +88580,28 @@
       const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
 
 
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[strand][Identifies a strand. By starting multiple coroutines on the same strand, the implementation ensures that none of those coroutines can execute simultaneously.]]
+
+[[function][The coroutine function. The function must have the signature: 
+``
+   void function(yield_context yield); 
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
 
 [endsect]
 
@@ -83523,6 +88610,8 @@
 [section:overload4 spawn (4 of 4 overloads)]
 
 
+Start a new stackful coroutine that executes on a given [link asio.reference.io_service `io_service`]. 
+
 
   template<
       typename Function>
@@ -83532,6 +88621,28 @@
       const boost::coroutines::attributes & attributes = boost::coroutines::attributes());
 
 
+This function is used to launch a new coroutine.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[io_service][Identifies the [link asio.reference.io_service `io_service`] that will run the coroutine. The new coroutine is implicitly given its own strand within this [link asio.reference.io_service `io_service`].]]
+
+[[function][The coroutine function. The function must have the signature: 
+``
+   void function(yield_context yield); 
+``
+]]
+
+[[attributes][Boost.Coroutine attributes used to customise the coroutine. ]]
+
+]
+
+
+
 
 [endsect]
 
@@ -83600,11 +88711,21 @@
   [[Name][Description]]
 
   [
+    [[link asio.reference.ssl__context.add_certificate_authority [*add_certificate_authority]]]
+    [Add certification authority for performing verification. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.add_verify_path [*add_verify_path]]]
     [Add a directory containing certificate authority files to be used for performing verification. ]
   ]
   
   [
+    [[link asio.reference.ssl__context.clear_options [*clear_options]]]
+    [Clear options on the context. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.context [*context]]]
     [Constructor. 
 
@@ -83654,11 +88775,26 @@
   ]
   
   [
+    [[link asio.reference.ssl__context.set_verify_depth [*set_verify_depth]]]
+    [Set the peer verification depth. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.set_verify_mode [*set_verify_mode]]]
     [Set the peer verification mode. ]
   ]
   
   [
+    [[link asio.reference.ssl__context.use_certificate [*use_certificate]]]
+    [Use a certificate from a memory buffer. ]
+  ]
+  
+  [
+    [[link asio.reference.ssl__context.use_certificate_chain [*use_certificate_chain]]]
+    [Use a certificate chain from a memory buffer. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.use_certificate_chain_file [*use_certificate_chain_file]]]
     [Use a certificate chain from a file. ]
   ]
@@ -83669,16 +88805,31 @@
   ]
   
   [
+    [[link asio.reference.ssl__context.use_private_key [*use_private_key]]]
+    [Use a private key from a memory buffer. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.use_private_key_file [*use_private_key_file]]]
     [Use a private key from a file. ]
   ]
   
   [
+    [[link asio.reference.ssl__context.use_rsa_private_key [*use_rsa_private_key]]]
+    [Use an RSA private key from a memory buffer. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.use_rsa_private_key_file [*use_rsa_private_key_file]]]
     [Use an RSA private key from a file. ]
   ]
   
   [
+    [[link asio.reference.ssl__context.use_tmp_dh [*use_tmp_dh]]]
+    [Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__context.use_tmp_dh_file [*use_tmp_dh_file]]]
     [Use the specified file to obtain the temporary Diffie-Hellman parameters. ]
   ]
@@ -83700,6 +88851,11 @@
   ]
 
   [
+    [[link asio.reference.ssl__context.no_compression [*no_compression]]]
+    [Disable compression. Compression is disabled by default. ]
+  ]
+
+  [
     [[link asio.reference.ssl__context.no_sslv2 [*no_sslv2]]]
     [Disable SSL v2. ]
   ]
@@ -83723,9 +88879,107 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context.hpp]
+['Header: ][^asio/ssl/context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
+
+[section:add_certificate_authority ssl::context::add_certificate_authority]
+
+[indexterm2 add_certificate_authority..ssl::context] 
+Add certification authority for performing verification. 
+
+
+  void ``[link asio.reference.ssl__context.add_certificate_authority.overload1 add_certificate_authority]``(
+      const const_buffer & ca);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.add_certificate_authority.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.add_certificate_authority.overload2 add_certificate_authority]``(
+      const const_buffer & ca,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.add_certificate_authority.overload2 more...]]``
+
+
+[section:overload1 ssl::context::add_certificate_authority (1 of 2 overloads)]
+
+
+Add certification authority for performing verification. 
+
+
+  void add_certificate_authority(
+      const const_buffer & ca);
+
+
+This function is used to add one trusted certification authority from a memory buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[ca][The buffer containing the certification authority certificate. The certificate must use the PEM format.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_get_cert_store` and `X509_STORE_add_cert`. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::add_certificate_authority (2 of 2 overloads)]
+
+
+Add certification authority for performing verification. 
+
+
+  asio::error_code add_certificate_authority(
+      const const_buffer & ca,
+      asio::error_code & ec);
+
+
+This function is used to add one trusted certification authority from a memory buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[ca][The buffer containing the certification authority certificate. The certificate must use the PEM format.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_get_cert_store` and `X509_STORE_add_cert`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
 
 [section:add_verify_path ssl::context::add_verify_path]
 
@@ -83825,6 +89079,104 @@
 
 [endsect]
 
+[section:clear_options ssl::context::clear_options]
+
+[indexterm2 clear_options..ssl::context] 
+Clear options on the context. 
+
+
+  void ``[link asio.reference.ssl__context.clear_options.overload1 clear_options]``(
+      options o);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.clear_options.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.clear_options.overload2 clear_options]``(
+      options o,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.clear_options.overload2 more...]]``
+
+
+[section:overload1 ssl::context::clear_options (1 of 2 overloads)]
+
+
+Clear options on the context. 
+
+
+  void clear_options(
+      options o);
+
+
+This function may be used to configure the SSL options used by the context.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[o][A bitmask of options. The available option values are defined in the [link asio.reference.ssl__context_base `ssl::context_base`] class. The specified options, if currently enabled on the context, are cleared.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_clear_options`. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::clear_options (2 of 2 overloads)]
+
+
+Clear options on the context. 
+
+
+  asio::error_code clear_options(
+      options o,
+      asio::error_code & ec);
+
+
+This function may be used to configure the SSL options used by the context.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[o][A bitmask of options. The available option values are defined in the [link asio.reference.ssl__context_base `ssl::context_base`] class. The specified options, if currently enabled on the context, are cleared.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_clear_options`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:context ssl::context::context]
 
 [indexterm2 context..ssl::context] 
@@ -83999,9 +89351,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context.hpp]
+['Header: ][^asio/ssl/context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -84126,6 +89478,12 @@
 [indexterm2 sslv23..ssl::context]
 [indexterm2 sslv23_client..ssl::context]
 [indexterm2 sslv23_server..ssl::context]
+[indexterm2 tlsv11..ssl::context]
+[indexterm2 tlsv11_client..ssl::context]
+[indexterm2 tlsv11_server..ssl::context]
+[indexterm2 tlsv12..ssl::context]
+[indexterm2 tlsv12_client..ssl::context]
+[indexterm2 tlsv12_server..ssl::context]
 
 [heading Values]
 [variablelist
@@ -84190,6 +89548,36 @@
     [SSL/TLS server. ]
   ]
 
+  [
+    [tlsv11]
+    [Generic TLS version 1.1. ]
+  ]
+
+  [
+    [tlsv11_client]
+    [TLS version 1.1 client. ]
+  ]
+
+  [
+    [tlsv11_server]
+    [TLS version 1.1 server. ]
+  ]
+
+  [
+    [tlsv12]
+    [Generic TLS version 1.2. ]
+  ]
+
+  [
+    [tlsv12_client]
+    [TLS version 1.2 client. ]
+  ]
+
+  [
+    [tlsv12_server]
+    [TLS version 1.2 server. ]
+  ]
+
 ]
 
 
@@ -84226,9 +89614,23 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context.hpp]
+['Header: ][^asio/ssl/context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
+
+
+[endsect]
+
+
+
+[section:no_compression ssl::context::no_compression]
+
+[indexterm2 no_compression..ssl::context] 
+Disable compression. Compression is disabled by default. 
+
+
+  static const long no_compression = implementation_defined;
+
 
 
 [endsect]
@@ -84328,9 +89730,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context.hpp]
+['Header: ][^asio/ssl/context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -84788,6 +90190,104 @@
 
 [endsect]
 
+[section:set_verify_depth ssl::context::set_verify_depth]
+
+[indexterm2 set_verify_depth..ssl::context] 
+Set the peer verification depth. 
+
+
+  void ``[link asio.reference.ssl__context.set_verify_depth.overload1 set_verify_depth]``(
+      int depth);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.set_verify_depth.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.set_verify_depth.overload2 set_verify_depth]``(
+      int depth,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.set_verify_depth.overload2 more...]]``
+
+
+[section:overload1 ssl::context::set_verify_depth (1 of 2 overloads)]
+
+
+Set the peer verification depth. 
+
+
+  void set_verify_depth(
+      int depth);
+
+
+This function may be used to configure the maximum verification depth allowed by the context.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_set_verify_depth`. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::set_verify_depth (2 of 2 overloads)]
+
+
+Set the peer verification depth. 
+
+
+  asio::error_code set_verify_depth(
+      int depth,
+      asio::error_code & ec);
+
+
+This function may be used to configure the maximum verification depth allowed by the context.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_set_verify_depth`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:set_verify_mode ssl::context::set_verify_mode]
 
 [indexterm2 set_verify_mode..ssl::context] 
@@ -84900,6 +90400,210 @@
 [endsect]
 
 
+[section:use_certificate ssl::context::use_certificate]
+
+[indexterm2 use_certificate..ssl::context] 
+Use a certificate from a memory buffer. 
+
+
+  void ``[link asio.reference.ssl__context.use_certificate.overload1 use_certificate]``(
+      const const_buffer & certificate,
+      file_format format);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_certificate.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.use_certificate.overload2 use_certificate]``(
+      const const_buffer & certificate,
+      file_format format,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_certificate.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_certificate (1 of 2 overloads)]
+
+
+Use a certificate from a memory buffer. 
+
+
+  void use_certificate(
+      const const_buffer & certificate,
+      file_format format);
+
+
+This function is used to load a certificate into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[certificate][The buffer containing the certificate.]]
+
+[[format][The certificate format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_certificate` or SSL\_CTX\_use\_certificate\_ASN1. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_certificate (2 of 2 overloads)]
+
+
+Use a certificate from a memory buffer. 
+
+
+  asio::error_code use_certificate(
+      const const_buffer & certificate,
+      file_format format,
+      asio::error_code & ec);
+
+
+This function is used to load a certificate into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[certificate][The buffer containing the certificate.]]
+
+[[format][The certificate format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_certificate` or SSL\_CTX\_use\_certificate\_ASN1. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+[section:use_certificate_chain ssl::context::use_certificate_chain]
+
+[indexterm2 use_certificate_chain..ssl::context] 
+Use a certificate chain from a memory buffer. 
+
+
+  void ``[link asio.reference.ssl__context.use_certificate_chain.overload1 use_certificate_chain]``(
+      const const_buffer & chain);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_certificate_chain.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.use_certificate_chain.overload2 use_certificate_chain]``(
+      const const_buffer & chain,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_certificate_chain.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_certificate_chain (1 of 2 overloads)]
+
+
+Use a certificate chain from a memory buffer. 
+
+
+  void use_certificate_chain(
+      const const_buffer & chain);
+
+
+This function is used to load a certificate chain into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[chain][The buffer containing the certificate chain. The certificate chain must use the PEM format.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_certificate` and SSL\_CTX\_add\_extra\_chain\_cert. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_certificate_chain (2 of 2 overloads)]
+
+
+Use a certificate chain from a memory buffer. 
+
+
+  asio::error_code use_certificate_chain(
+      const const_buffer & chain,
+      asio::error_code & ec);
+
+
+This function is used to load a certificate chain into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[chain][The buffer containing the certificate chain. The certificate chain must use the PEM format.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_certificate` and SSL\_CTX\_add\_extra\_chain\_cert. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_certificate_chain_file ssl::context::use_certificate_chain_file]
 
 [indexterm2 use_certificate_chain_file..ssl::context] 
@@ -85104,6 +90808,112 @@
 
 [endsect]
 
+[section:use_private_key ssl::context::use_private_key]
+
+[indexterm2 use_private_key..ssl::context] 
+Use a private key from a memory buffer. 
+
+
+  void ``[link asio.reference.ssl__context.use_private_key.overload1 use_private_key]``(
+      const const_buffer & private_key,
+      file_format format);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_private_key.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.use_private_key.overload2 use_private_key]``(
+      const const_buffer & private_key,
+      file_format format,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_private_key.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_private_key (1 of 2 overloads)]
+
+
+Use a private key from a memory buffer. 
+
+
+  void use_private_key(
+      const const_buffer & private_key,
+      file_format format);
+
+
+This function is used to load a private key into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[private_key][The buffer containing the private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_PrivateKey` or SSL\_CTX\_use\_PrivateKey\_ASN1. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_private_key (2 of 2 overloads)]
+
+
+Use a private key from a memory buffer. 
+
+
+  asio::error_code use_private_key(
+      const const_buffer & private_key,
+      file_format format,
+      asio::error_code & ec);
+
+
+This function is used to load a private key into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[private_key][The buffer containing the private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_PrivateKey` or SSL\_CTX\_use\_PrivateKey\_ASN1. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_private_key_file ssl::context::use_private_key_file]
 
 [indexterm2 use_private_key_file..ssl::context] 
@@ -85210,6 +91020,112 @@
 
 [endsect]
 
+[section:use_rsa_private_key ssl::context::use_rsa_private_key]
+
+[indexterm2 use_rsa_private_key..ssl::context] 
+Use an RSA private key from a memory buffer. 
+
+
+  void ``[link asio.reference.ssl__context.use_rsa_private_key.overload1 use_rsa_private_key]``(
+      const const_buffer & private_key,
+      file_format format);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_rsa_private_key.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.use_rsa_private_key.overload2 use_rsa_private_key]``(
+      const const_buffer & private_key,
+      file_format format,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_rsa_private_key.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_rsa_private_key (1 of 2 overloads)]
+
+
+Use an RSA private key from a memory buffer. 
+
+
+  void use_rsa_private_key(
+      const const_buffer & private_key,
+      file_format format);
+
+
+This function is used to load an RSA private key into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[private_key][The buffer containing the RSA private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_RSAPrivateKey` or SSL\_CTX\_use\_RSAPrivateKey\_ASN1. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_rsa_private_key (2 of 2 overloads)]
+
+
+Use an RSA private key from a memory buffer. 
+
+
+  asio::error_code use_rsa_private_key(
+      const const_buffer & private_key,
+      file_format format,
+      asio::error_code & ec);
+
+
+This function is used to load an RSA private key into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[private_key][The buffer containing the RSA private key.]]
+
+[[format][The private key format (ASN.1 or PEM).]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_use_RSAPrivateKey` or SSL\_CTX\_use\_RSAPrivateKey\_ASN1. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_rsa_private_key_file ssl::context::use_rsa_private_key_file]
 
 [indexterm2 use_rsa_private_key_file..ssl::context] 
@@ -85316,6 +91232,104 @@
 
 [endsect]
 
+[section:use_tmp_dh ssl::context::use_tmp_dh]
+
+[indexterm2 use_tmp_dh..ssl::context] 
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters. 
+
+
+  void ``[link asio.reference.ssl__context.use_tmp_dh.overload1 use_tmp_dh]``(
+      const const_buffer & dh);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_tmp_dh.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__context.use_tmp_dh.overload2 use_tmp_dh]``(
+      const const_buffer & dh,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__context.use_tmp_dh.overload2 more...]]``
+
+
+[section:overload1 ssl::context::use_tmp_dh (1 of 2 overloads)]
+
+
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters. 
+
+
+  void use_tmp_dh(
+      const const_buffer & dh);
+
+
+This function is used to load Diffie-Hellman parameters into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[dh][The memory buffer containing the Diffie-Hellman parameters. The buffer must use the PEM format.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_set_tmp_dh`. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::context::use_tmp_dh (2 of 2 overloads)]
+
+
+Use the specified memory buffer to obtain the temporary Diffie-Hellman parameters. 
+
+
+  asio::error_code use_tmp_dh(
+      const const_buffer & dh,
+      asio::error_code & ec);
+
+
+This function is used to load Diffie-Hellman parameters into the context from a buffer.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[dh][The memory buffer containing the Diffie-Hellman parameters. The buffer must use the PEM format.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_CTX_set_tmp_dh`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:use_tmp_dh_file ssl::context::use_tmp_dh_file]
 
 [indexterm2 use_tmp_dh_file..ssl::context] 
@@ -85495,6 +91509,11 @@
   ]
 
   [
+    [[link asio.reference.ssl__context_base.no_compression [*no_compression]]]
+    [Disable compression. Compression is disabled by default. ]
+  ]
+
+  [
     [[link asio.reference.ssl__context_base.no_sslv2 [*no_sslv2]]]
     [Disable SSL v2. ]
   ]
@@ -85518,9 +91537,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context_base.hpp]
+['Header: ][^asio/ssl/context_base.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [section:default_workarounds ssl::context_base::default_workarounds]
@@ -85589,6 +91608,12 @@
 [indexterm2 sslv23..ssl::context_base]
 [indexterm2 sslv23_client..ssl::context_base]
 [indexterm2 sslv23_server..ssl::context_base]
+[indexterm2 tlsv11..ssl::context_base]
+[indexterm2 tlsv11_client..ssl::context_base]
+[indexterm2 tlsv11_server..ssl::context_base]
+[indexterm2 tlsv12..ssl::context_base]
+[indexterm2 tlsv12_client..ssl::context_base]
+[indexterm2 tlsv12_server..ssl::context_base]
 
 [heading Values]
 [variablelist
@@ -85653,6 +91678,36 @@
     [SSL/TLS server. ]
   ]
 
+  [
+    [tlsv11]
+    [Generic TLS version 1.1. ]
+  ]
+
+  [
+    [tlsv11_client]
+    [TLS version 1.1 client. ]
+  ]
+
+  [
+    [tlsv11_server]
+    [TLS version 1.1 server. ]
+  ]
+
+  [
+    [tlsv12]
+    [Generic TLS version 1.2. ]
+  ]
+
+  [
+    [tlsv12_client]
+    [TLS version 1.2 client. ]
+  ]
+
+  [
+    [tlsv12_server]
+    [TLS version 1.2 server. ]
+  ]
+
 ]
 
 
@@ -85661,6 +91716,20 @@
 
 
 
+[section:no_compression ssl::context_base::no_compression]
+
+[indexterm2 no_compression..ssl::context_base] 
+Disable compression. Compression is disabled by default. 
+
+
+  static const long no_compression = implementation_defined;
+
+
+
+[endsect]
+
+
+
 [section:no_sslv2 ssl::context_base::no_sslv2]
 
 [indexterm2 no_sslv2..ssl::context_base] 
@@ -85715,9 +91784,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/context_base.hpp]
+['Header: ][^asio/ssl/context_base.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -85859,9 +91928,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/rfc2818_verification.hpp]
+['Header: ][^asio/ssl/rfc2818_verification.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [section:operator_lp__rp_ ssl::rfc2818_verification::operator()]
@@ -85892,9 +91961,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/rfc2818_verification.hpp]
+['Header: ][^asio/ssl/rfc2818_verification.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -86044,6 +92113,11 @@
   ]
   
   [
+    [[link asio.reference.ssl__stream.set_verify_depth [*set_verify_depth]]]
+    [Set the peer verification depth. ]
+  ]
+  
+  [
     [[link asio.reference.ssl__stream.set_verify_mode [*set_verify_mode]]]
     [Set the peer verification mode. ]
   ]
@@ -86075,9 +92149,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.
+['Shared] ['objects:] Unsafe. The application must also ensure that all asynchronous operations are performed within the same implicit or explicit strand.
 
 
 [heading Example]
@@ -86096,10 +92170,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
-
+['Convenience header: ][^asio/ssl.hpp]
 
 [section:async_handshake ssl::stream::async_handshake]
 
@@ -86109,7 +92182,30 @@
 
   template<
       typename ``[link asio.reference.HandshakeHandler HandshakeHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_handshake(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ssl__stream.async_handshake.overload1 async_handshake]``(
+      handshake_type type,
+      HandshakeHandler handler);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.async_handshake.overload1 more...]]``
+
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
+      typename ``[link asio.reference.BufferedHandshakeHandler BufferedHandshakeHandler]``>
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` ``[link asio.reference.ssl__stream.async_handshake.overload2 async_handshake]``(
+      handshake_type type,
+      const ConstBufferSequence & buffers,
+      BufferedHandshakeHandler handler);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.async_handshake.overload2 more...]]``
+
+
+[section:overload1 ssl::stream::async_handshake (1 of 2 overloads)]
+
+
+Start an asynchronous SSL handshake. 
+
+
+  template<
+      typename ``[link asio.reference.HandshakeHandler HandshakeHandler]``>
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_handshake(
       handshake_type type,
       HandshakeHandler handler);
 
@@ -86141,6 +92237,53 @@
 
 
 
+[section:overload2 ssl::stream::async_handshake (2 of 2 overloads)]
+
+
+Start an asynchronous SSL handshake. 
+
+
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
+      typename ``[link asio.reference.BufferedHandshakeHandler BufferedHandshakeHandler]``>
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_handshake(
+      handshake_type type,
+      const ConstBufferSequence & buffers,
+      BufferedHandshakeHandler handler);
+
+
+This function is used to asynchronously perform an SSL handshake on the stream. This function call always returns immediately.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[buffers][The buffered data to be reused for the handshake. Although the buffers object may be copied as necessary, ownership of the underlying buffers is retained by the caller, which must guarantee that they remain valid until the handler is called.]]
+
+[[handler][The handler to be called when the handshake operation completes. Copies will be made of the handler as required. The equivalent function signature of the handler must be: 
+``
+   void handler(
+     const asio::error_code& error, // Result of operation.
+     std::size_t bytes_transferred // Amount of buffers used in handshake.
+   ); 
+``
+]]
+
+]
+
+
+
+
+[endsect]
+
+
+[endsect]
+
+
 [section:async_read_some ssl::stream::async_read_some]
 
 [indexterm2 async_read_some..ssl::stream] 
@@ -86150,7 +92293,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -86196,7 +92339,7 @@
 
   template<
       typename ``[link asio.reference.ShutdownHandler ShutdownHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_shutdown(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_shutdown(
       ShutdownHandler handler);
 
 
@@ -86234,7 +92377,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -86309,8 +92452,23 @@
       asio::error_code & ec);
   ``  [''''&raquo;''' [link asio.reference.ssl__stream.handshake.overload2 more...]]``
 
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``>
+  void ``[link asio.reference.ssl__stream.handshake.overload3 handshake]``(
+      handshake_type type,
+      const ConstBufferSequence & buffers);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.handshake.overload3 more...]]``
 
-[section:overload1 ssl::stream::handshake (1 of 2 overloads)]
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``>
+  asio::error_code ``[link asio.reference.ssl__stream.handshake.overload4 handshake]``(
+      handshake_type type,
+      const ConstBufferSequence & buffers,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.handshake.overload4 more...]]``
+
+
+[section:overload1 ssl::stream::handshake (1 of 4 overloads)]
 
 
 Perform SSL handshaking. 
@@ -86349,7 +92507,7 @@
 
 
 
-[section:overload2 ssl::stream::handshake (2 of 2 overloads)]
+[section:overload2 ssl::stream::handshake (2 of 4 overloads)]
 
 
 Perform SSL handshaking. 
@@ -86380,6 +92538,87 @@
 [endsect]
 
 
+
+[section:overload3 ssl::stream::handshake (3 of 4 overloads)]
+
+
+Perform SSL handshaking. 
+
+
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``>
+  void handshake(
+      handshake_type type,
+      const ConstBufferSequence & buffers);
+
+
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[buffers][The buffered data to be reused for the handshake.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure. ]]
+
+]
+
+
+
+
+[endsect]
+
+
+
+[section:overload4 ssl::stream::handshake (4 of 4 overloads)]
+
+
+Perform SSL handshaking. 
+
+
+  template<
+      typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``>
+  asio::error_code handshake(
+      handshake_type type,
+      const ConstBufferSequence & buffers,
+      asio::error_code & ec);
+
+
+This function is used to perform SSL handshaking on the stream. The function call will block until handshaking is complete or an error occurs.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[type][The type of handshaking to be performed, i.e. as a client or as a server.]]
+
+[[buffers][The buffered data to be reused for the handshake.]]
+
+[[ec][Set to indicate what error occurred, if any. ]]
+
+]
+
+
+
+
+[endsect]
+
+
 [endsect]
 
 
@@ -86443,9 +92682,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -86524,9 +92763,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -86583,9 +92822,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -86664,9 +92903,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -86908,6 +93147,104 @@
 
 [endsect]
 
+[section:set_verify_depth ssl::stream::set_verify_depth]
+
+[indexterm2 set_verify_depth..ssl::stream] 
+Set the peer verification depth. 
+
+
+  void ``[link asio.reference.ssl__stream.set_verify_depth.overload1 set_verify_depth]``(
+      int depth);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.set_verify_depth.overload1 more...]]``
+
+  asio::error_code ``[link asio.reference.ssl__stream.set_verify_depth.overload2 set_verify_depth]``(
+      int depth,
+      asio::error_code & ec);
+  ``  [''''&raquo;''' [link asio.reference.ssl__stream.set_verify_depth.overload2 more...]]``
+
+
+[section:overload1 ssl::stream::set_verify_depth (1 of 2 overloads)]
+
+
+Set the peer verification depth. 
+
+
+  void set_verify_depth(
+      int depth);
+
+
+This function may be used to configure the maximum verification depth allowed by the stream.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+]
+
+
+[heading Exceptions]
+    
+
+[variablelist
+  
+[[asio::system_error][Thrown on failure.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_set_verify_depth`. 
+
+
+
+
+[endsect]
+
+
+
+[section:overload2 ssl::stream::set_verify_depth (2 of 2 overloads)]
+
+
+Set the peer verification depth. 
+
+
+  asio::error_code set_verify_depth(
+      int depth,
+      asio::error_code & ec);
+
+
+This function may be used to configure the maximum verification depth allowed by the stream.
+
+
+[heading Parameters]
+    
+
+[variablelist
+  
+[[depth][Maximum depth for the certificate chain verification that shall be allowed.]]
+
+[[ec][Set to indicate what error occurred, if any.]]
+
+]
+
+
+[heading Remarks]
+      
+Calls `SSL_set_verify_depth`. 
+
+
+
+
+[endsect]
+
+
+[endsect]
+
 [section:set_verify_mode ssl::stream::set_verify_mode]
 
 [indexterm2 set_verify_mode..ssl::stream] 
@@ -87267,9 +93604,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream.hpp]
+['Header: ][^asio/ssl/stream.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [section:ssl ssl::stream::impl_struct::ssl]
@@ -87321,9 +93658,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/stream_base.hpp]
+['Header: ][^asio/ssl/stream_base.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [section:handshake_type ssl::stream_base::handshake_type]
@@ -87386,9 +93723,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_mode.hpp]
+['Header: ][^asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87442,9 +93779,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_context.hpp]
+['Header: ][^asio/ssl/verify_context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [section:native_handle ssl::verify_context::native_handle]
@@ -87475,9 +93812,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_context.hpp]
+['Header: ][^asio/ssl/verify_context.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87513,9 +93850,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_mode.hpp]
+['Header: ][^asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87547,9 +93884,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_mode.hpp]
+['Header: ][^asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87567,9 +93904,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_mode.hpp]
+['Header: ][^asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87587,9 +93924,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/ssl/verify_mode.hpp]
+['Header: ][^asio/ssl/verify_mode.hpp]
 
-[*Convenience header: ][^asio/ssl.hpp]
+['Convenience header: ][^asio/ssl.hpp]
 
 
 [endsect]
@@ -87743,7 +94080,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the asio::waitable\_timer typedef.
+Most applications will use one of the [link asio.reference.steady_timer `steady_timer`], [link asio.reference.system_timer `system_timer`] or [link asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -87753,20 +94090,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait: 
+Performing a blocking wait (C++11): 
 
    // Construct a timer without setting an expiry time.
-   asio::waitable_timer timer(io_service);
+   asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
-   timer.expires_from_now(boost::posix_time::seconds(5));
+   timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -87775,7 +94112,7 @@
 
 
 
-Performing an asynchronous wait: 
+Performing an asynchronous wait (C++11): 
 
    void handler(const asio::error_code& error)
    {
@@ -87788,8 +94125,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
-   asio::waitable_timer timer(io_service,
-       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+   asio::steady_timer timer(io_service,
+       std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -87798,7 +94135,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -87848,9 +94185,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/steady_timer.hpp]
+['Header: ][^asio/steady_timer.hpp]
 
-[*Convenience header: ]None
+['Convenience header: ]None
 
 
 [endsect]
@@ -87956,9 +94293,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Safe.
+['Shared] ['objects:] Safe.
 
 
 
@@ -87966,9 +94303,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/strand.hpp]
+['Header: ][^asio/strand.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -88087,6 +94424,11 @@
   ]
   
   [
+    [[link asio.reference.stream_socket_service.converting_move_construct [*converting_move_construct]]]
+    [Move-construct a new stream socket implementation from another protocol type. ]
+  ]
+  
+  [
     [[link asio.reference.stream_socket_service.destroy [*destroy]]]
     [Destroy a stream socket implementation. ]
   ]
@@ -88200,9 +94542,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign stream_socket_service::assign]
@@ -88231,7 +94573,7 @@
 
   template<
       typename ``[link asio.reference.ConnectHandler ConnectHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_connect(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_connect(
       implementation_type & impl,
       const endpoint_type & peer_endpoint,
       ConnectHandler handler);
@@ -88251,7 +94593,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_receive(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_receive(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -88272,7 +94614,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_send(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_send(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       socket_base::message_flags flags,
@@ -88397,6 +94739,25 @@
 
 
 
+[section:converting_move_construct stream_socket_service::converting_move_construct]
+
+[indexterm2 converting_move_construct..stream_socket_service] 
+Move-construct a new stream socket implementation from another protocol type. 
+
+
+  template<
+      typename ``[link asio.reference.Protocol Protocol1]``>
+  void converting_move_construct(
+      implementation_type & impl,
+      typename stream_socket_service< Protocol1 >::implementation_type & other_impl,
+      typename enable_if< is_convertible< Protocol1, Protocol >::value >::type *  = 0);
+
+
+
+[endsect]
+
+
+
 [section:destroy stream_socket_service::destroy]
 
 [indexterm2 destroy..stream_socket_service] 
@@ -88424,9 +94785,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -88495,9 +94856,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -88629,9 +94990,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -88704,9 +95065,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -88796,9 +95157,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/stream_socket_service.hpp]
+['Header: ][^asio/stream_socket_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89067,9 +95428,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/streambuf.hpp]
+['Header: ][^asio/streambuf.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89087,9 +95448,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/error_code.hpp]
+['Header: ][^asio/error_code.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89142,9 +95503,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/system_error.hpp]
+['Header: ][^asio/system_error.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:code system_error::code]
@@ -89429,7 +95790,7 @@
 
 A waitable timer is always in one of two states: "expired" or "not expired". If the `wait()` or `async_wait()` function is called on an expired timer, the wait operation will complete immediately.
 
-Most applications will use the asio::waitable\_timer typedef.
+Most applications will use one of the [link asio.reference.steady_timer `steady_timer`], [link asio.reference.system_timer `system_timer`] or [link asio.reference.high_resolution_timer `high_resolution_timer`] typedefs.
 
 
 [heading Remarks]
@@ -89439,20 +95800,20 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Examples]
   
-Performing a blocking wait: 
+Performing a blocking wait (C++11): 
 
    // Construct a timer without setting an expiry time.
-   asio::waitable_timer timer(io_service);
+   asio::steady_timer timer(io_service);
 
    // Set an expiry time relative to now.
-   timer.expires_from_now(boost::posix_time::seconds(5));
+   timer.expires_from_now(std::chrono::seconds(5));
 
    // Wait for the timer to expire.
    timer.wait();
@@ -89461,7 +95822,7 @@
 
 
 
-Performing an asynchronous wait: 
+Performing an asynchronous wait (C++11): 
 
    void handler(const asio::error_code& error)
    {
@@ -89474,8 +95835,8 @@
    ...
 
    // Construct a timer with an absolute expiry time.
-   asio::waitable_timer timer(io_service,
-       boost::posix_time::time_from_string("2005-12-07 23:59:59.000"));
+   asio::steady_timer timer(io_service,
+       std::chrono::steady_clock::now() + std::chrono::seconds(60));
 
    // Start an asynchronous wait.
    timer.async_wait(handler);
@@ -89484,7 +95845,7 @@
 
 
 
-[heading Changing an active waitable_timer's expiry time]
+[heading Changing an active waitable timer's expiry time]
   
 
 
@@ -89534,9 +95895,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/system_timer.hpp]
+['Header: ][^asio/system_timer.hpp]
 
-[*Convenience header: ]None
+['Convenience header: ]None
 
 
 [endsect]
@@ -89578,9 +95939,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 [heading Example]
@@ -89603,9 +95964,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/thread.hpp]
+['Header: ][^asio/thread.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:join thread::join]
@@ -89740,9 +96101,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/time_traits.hpp]
+['Header: ][^asio/time_traits.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:add time_traits< boost::posix_time::ptime >::add]
@@ -89773,9 +96134,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/time_traits.hpp]
+['Header: ][^asio/time_traits.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89840,9 +96201,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/time_traits.hpp]
+['Header: ][^asio/time_traits.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89904,9 +96265,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/completion_condition.hpp]
+['Header: ][^asio/completion_condition.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89951,9 +96312,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/completion_condition.hpp]
+['Header: ][^asio/completion_condition.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -89998,9 +96359,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/completion_condition.hpp]
+['Header: ][^asio/completion_condition.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90010,15 +96371,19 @@
 [section:use_future use_future]
 
 [indexterm1 use_future] 
+A special value, similar to std::nothrow. 
+
 
   constexpr use_future_t use_future;
 
 
+See the documentation for [link asio.reference.use_future_t `use_future_t`] for a usage example. 
+
 [heading Requirements]
 
-[*Header: ][^asio/use_future.hpp]
+['Header: ][^asio/use_future.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90027,6 +96392,8 @@
 [section:use_future_t use_future_t]
 
 
+Class used to specify that an asynchronous operation should return a future. 
+
 
   template<
       typename Allocator = std::allocator<void>>
@@ -90052,26 +96419,40 @@
 
   [
     [[link asio.reference.use_future_t.get_allocator [*get_allocator]]]
-    []
+    [Obtain allocator. ]
   ]
   
   [
     [[link asio.reference.use_future_t.operator_lb__rb_ [*operator\[\]]]]
-    []
+    [Specify an alternate allocator. ]
   ]
   
   [
     [[link asio.reference.use_future_t.use_future_t [*use_future_t]]]
-    []
+    [Construct using default-constructed allocator. 
+
+     Construct using specified allocator. ]
   ]
   
 ]
 
+The [link asio.reference.use_future_t `use_future_t`] class is used to indicate that an asynchronous operation should return a std::future object. A [link asio.reference.use_future_t `use_future_t`] object may be passed as a handler to an asynchronous operation, typically using the special value `asio::use_future`. For example:
+
+
+
+   std::future<std::size_t> my_future
+     = my_socket.async_read_some(my_buffer, asio::use_future); 
+
+
+
+
+The initiating function (async\_read\_some in the above example) returns a future that will receive the result of the operation. If the operation completes with an [link asio.reference.error_code `error_code`] indicating failure, it is converted into a [link asio.reference.system_error `system_error`] and passed back to the caller via the future. 
+
 [heading Requirements]
 
-[*Header: ][^asio/use_future.hpp]
+['Header: ][^asio/use_future.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:allocator_type use_future_t::allocator_type]
@@ -90084,9 +96465,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/use_future.hpp]
+['Header: ][^asio/use_future.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90096,6 +96477,8 @@
 [section:get_allocator use_future_t::get_allocator]
 
 [indexterm2 get_allocator..use_future_t] 
+Obtain allocator. 
+
 
   allocator_type get_allocator() const;
 
@@ -90108,9 +96491,11 @@
 [section:operator_lb__rb_ use_future_t::operator\[\]]
 
 [indexterm2 operator\[\]..use_future_t] 
+Specify an alternate allocator. 
+
 
   template<
-      typename ``[link asio.reference.OtherAllocator OtherAllocator]``>
+      typename OtherAllocator>
   use_future_t< OtherAllocator > operator[](
       const OtherAllocator & allocator) const;
 
@@ -90122,10 +96507,16 @@
 [section:use_future_t use_future_t::use_future_t]
 
 [indexterm2 use_future_t..use_future_t] 
+Construct using default-constructed allocator. 
+
 
   constexpr ``[link asio.reference.use_future_t.use_future_t.overload1 use_future_t]``();
   ``  [''''&raquo;''' [link asio.reference.use_future_t.use_future_t.overload1 more...]]``
 
+
+Construct using specified allocator. 
+
+
   explicit ``[link asio.reference.use_future_t.use_future_t.overload2 use_future_t]``(
       const Allocator & allocator);
   ``  [''''&raquo;''' [link asio.reference.use_future_t.use_future_t.overload2 more...]]``
@@ -90134,6 +96525,8 @@
 [section:overload1 use_future_t::use_future_t (1 of 2 overloads)]
 
 
+Construct using default-constructed allocator. 
+
 
   constexpr use_future_t();
 
@@ -90146,6 +96539,8 @@
 [section:overload2 use_future_t::use_future_t (2 of 2 overloads)]
 
 
+Construct using specified allocator. 
+
 
   use_future_t(
       const Allocator & allocator);
@@ -90192,9 +96587,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/io_service.hpp]
+['Header: ][^asio/io_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90224,9 +96619,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/wait_traits.hpp]
+['Header: ][^asio/wait_traits.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:to_wait_duration wait_traits::to_wait_duration]
@@ -90380,9 +96775,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:async_wait waitable_timer_service::async_wait]
@@ -90391,7 +96786,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -90445,9 +96840,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90496,9 +96891,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90656,9 +97051,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90677,9 +97072,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90698,9 +97093,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/waitable_timer_service.hpp]
+['Header: ][^asio/waitable_timer_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -90895,17 +97290,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign windows::basic_handle::assign]
 
@@ -91388,9 +97783,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -91629,18 +98024,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -91691,9 +98086,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -91712,9 +98107,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -91794,9 +98189,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_handle.hpp]
+['Header: ][^asio/windows/basic_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -91981,17 +98376,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign windows::basic_object_handle::assign]
 
@@ -92056,7 +98451,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       WaitHandler handler);
 
 
@@ -92529,9 +98924,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -92782,18 +99177,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -92850,9 +99245,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -92874,9 +99269,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -92956,9 +99351,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_object_handle.hpp]
+['Header: ][^asio/windows/basic_object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -93211,17 +99606,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign windows::basic_random_access_handle::assign]
 
@@ -93287,7 +99682,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some_at(
       uint64_t offset,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -93347,7 +99742,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some_at(
       uint64_t offset,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -93842,9 +100237,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -94095,18 +100490,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -94163,9 +100558,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -94184,9 +100579,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -94400,9 +100795,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_random_access_handle.hpp]
+['Header: ][^asio/windows/basic_random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -94717,18 +101112,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 [section:assign windows::basic_stream_handle::assign]
 
@@ -94794,7 +101189,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       const MutableBufferSequence & buffers,
       ReadHandler handler);
 
@@ -94851,7 +101246,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       const ConstBufferSequence & buffers,
       WriteHandler handler);
 
@@ -95343,9 +101738,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -95596,18 +101991,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -95664,9 +102059,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -95685,9 +102080,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -95893,9 +102288,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/basic_stream_handle.hpp]
+['Header: ][^asio/windows/basic_stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -96190,18 +102585,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/object_handle.hpp]
+['Header: ][^asio/windows/object_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -96321,9 +102716,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/object_handle_service.hpp]
+['Header: ][^asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign windows::object_handle_service::assign]
@@ -96351,7 +102746,7 @@
 
   template<
       typename ``[link asio.reference.WaitHandler WaitHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_wait(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_wait(
       implementation_type & impl,
       WaitHandler handler);
 
@@ -96466,9 +102861,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/object_handle_service.hpp]
+['Header: ][^asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -96550,9 +102945,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/object_handle_service.hpp]
+['Header: ][^asio/windows/object_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -96645,17 +103040,17 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/overlapped_ptr.hpp]
+['Header: ][^asio/windows/overlapped_ptr.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:complete windows::overlapped_ptr::complete]
@@ -97024,18 +103419,18 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe. 
+['Shared] ['objects:] Unsafe. 
 
 
 
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/random_access_handle.hpp]
+['Header: ][^asio/windows/random_access_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -97177,9 +103572,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/random_access_handle_service.hpp]
+['Header: ][^asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign windows::random_access_handle_service::assign]
@@ -97208,7 +103603,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some_at(
       implementation_type & impl,
       uint64_t offset,
       const MutableBufferSequence & buffers,
@@ -97229,7 +103624,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some_at(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some_at(
       implementation_type & impl,
       uint64_t offset,
       const ConstBufferSequence & buffers,
@@ -97346,9 +103741,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/random_access_handle_service.hpp]
+['Header: ][^asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -97445,9 +103840,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/random_access_handle_service.hpp]
+['Header: ][^asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -97466,9 +103861,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/random_access_handle_service.hpp]
+['Header: ][^asio/windows/random_access_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -97702,9 +104097,9 @@
 
 [heading Thread Safety]
   
-[*Distinct] [*objects:] Safe.
+['Distinct] ['objects:] Safe.
 
-[*Shared] [*objects:] Unsafe.
+['Shared] ['objects:] Unsafe.
 
 
 
@@ -97712,9 +104107,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/stream_handle.hpp]
+['Header: ][^asio/windows/stream_handle.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -97856,9 +104251,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/stream_handle_service.hpp]
+['Header: ][^asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:assign windows::stream_handle_service::assign]
@@ -97887,7 +104282,7 @@
   template<
       typename ``[link asio.reference.MutableBufferSequence MutableBufferSequence]``,
       typename ``[link asio.reference.ReadHandler ReadHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_read_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_read_some(
       implementation_type & impl,
       const MutableBufferSequence & buffers,
       ReadHandler handler);
@@ -97907,7 +104302,7 @@
   template<
       typename ``[link asio.reference.ConstBufferSequence ConstBufferSequence]``,
       typename ``[link asio.reference.WriteHandler WriteHandler]``>
-  ``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]`` async_write_some(
+  ``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]`` async_write_some(
       implementation_type & impl,
       const ConstBufferSequence & buffers,
       WriteHandler handler);
@@ -98023,9 +104418,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/stream_handle_service.hpp]
+['Header: ][^asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -98122,9 +104517,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/stream_handle_service.hpp]
+['Header: ][^asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -98143,9 +104538,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/windows/stream_handle_service.hpp]
+['Header: ][^asio/windows/stream_handle_service.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
@@ -98291,9 +104686,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/write.hpp]
+['Header: ][^asio/write.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 write (1 of 8 overloads)]
@@ -98960,9 +105355,9 @@
 
 [heading Requirements]
 
-[*Header: ][^asio/write_at.hpp]
+['Header: ][^asio/write_at.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [section:overload1 write_at (1 of 8 overloads)]
@@ -99566,6 +105961,8 @@
 [section:yield_context yield_context]
 
 [indexterm1 yield_context] 
+Context object the represents the currently executing coroutine. 
+
 
   typedef basic_yield_context< unspecified > yield_context;
 
@@ -99576,22 +105973,39 @@
 
   [
     [[link asio.reference.basic_yield_context.basic_yield_context [*basic_yield_context]]]
-    []
+    [Construct a yield context to represent the specified coroutine. ]
   ]
   
   [
     [[link asio.reference.basic_yield_context.operator_lb__rb_ [*operator\[\]]]]
-    []
+    [Return a yield context that sets the specified error_code. ]
   ]
   
 ]
 
+The [link asio.reference.basic_yield_context `basic_yield_context`] class is used to represent the currently executing stackful coroutine. A [link asio.reference.basic_yield_context `basic_yield_context`] may be passed as a handler to an asynchronous operation. For example:
+
+
+
+   template <typename Handler>
+   void my_coroutine(basic_yield_context<Handler> yield)
+   {
+     ...
+     std::size_t n = my_socket.async_read_some(buffer, yield);
+     ...
+   } 
+
+
+
+
+The initiating function (async\_read\_some in the above example) suspends the current coroutine. The coroutine is resumed when the asynchronous operation completes, and the result of the operation is returned. 
+
 
 [heading Requirements]
 
-[*Header: ][^asio/spawn.hpp]
+['Header: ][^asio/spawn.hpp]
 
-[*Convenience header: ][^asio.hpp]
+['Convenience header: ][^asio.hpp]
 
 
 [endsect]
diff --git a/asio/src/doc/reference.xsl b/asio/src/doc/reference.xsl
index 24c6f03..f13477f 100644
--- a/asio/src/doc/reference.xsl
+++ b/asio/src/doc/reference.xsl
@@ -194,7 +194,7 @@
   </xsl:variable>
   <xsl:choose>
     <xsl:when test="$type='void_or_deduced'">
-      <xsl:text>``[link asio.reference.asynchronous_operations.return_type ['void-or-deduced]]``</xsl:text>
+      <xsl:text>``[link asio.reference.asynchronous_operations.return_type_of_an_initiating_function ['void-or-deduced]]``</xsl:text>
     </xsl:when>   
     <xsl:otherwise>
       <xsl:value-of select="$type"/>
@@ -738,13 +738,13 @@
   <xsl:text>[heading Requirements]</xsl:text>
   <xsl:value-of select="$newline"/>
   <xsl:value-of select="$newline"/>
-  <xsl:text>[*Header: ]</xsl:text>
+  <xsl:text>['Header: ]</xsl:text>
   <xsl:text>[^asio/</xsl:text>
   <xsl:value-of select="substring-after($file, 'include/asio/')"/>
   <xsl:text>]</xsl:text>
   <xsl:value-of select="$newline"/>
   <xsl:value-of select="$newline"/>
-  <xsl:text>[*Convenience header: ]</xsl:text>
+  <xsl:text>['Convenience header: ]</xsl:text>
   <xsl:choose>
     <xsl:when test="contains($file, 'include/asio/ssl')">
       <xsl:text>[^asio/ssl.hpp]</xsl:text>
@@ -1464,6 +1464,9 @@
         <xsl:when test="declname = 'N'">
           <xsl:value-of select="declname"/>
         </xsl:when>
+        <xsl:when test="declname = 'OtherAllocator'">
+          <xsl:value-of select="declname"/>
+        </xsl:when>
         <xsl:when test="declname = 'PasswordCallback'">
           <xsl:value-of select="declname"/>
         </xsl:when>
@@ -1482,6 +1485,12 @@
         <xsl:when test="declname = 'SeqPacketSocketService1'">
           <xsl:value-of select="concat('``[link asio.reference.SeqPacketSocketService ', declname, ']``')"/>
         </xsl:when>
+        <xsl:when test="declname = 'Signature'">
+          <xsl:value-of select="declname"/>
+        </xsl:when>
+        <xsl:when test="declname = 'SocketAcceptorService1' or declname = 'SocketAcceptorService2'">
+          <xsl:value-of select="concat('``[link asio.reference.SocketAcceptorService ', declname, ']``')"/>
+        </xsl:when>
         <xsl:when test="declname = 'SocketService1' or declname = 'SocketService2'">
           <xsl:value-of select="concat('``[link asio.reference.SocketService ', declname, ']``')"/>
         </xsl:when>
diff --git a/asio/src/doc/requirements/asynchronous_operations.qbk b/asio/src/doc/requirements/asynchronous_operations.qbk
index 54359e6..af96ad3 100644
--- a/asio/src/doc/requirements/asynchronous_operations.qbk
+++ b/asio/src/doc/requirements/asynchronous_operations.qbk
@@ -173,8 +173,45 @@
 `asio_handler_invoke`. Multiple storage blocks may be allocated for a single
 asynchronous operation.
 
-[section:return_type Return type of an initiating function]
+[heading Return type of an initiating function]
 
-[endsect]
+By default, initiating functions return `void`. This is always the case when
+the handler is a function pointer, C++11 lambda, or a function object produced
+by `boost::bind` or `std::bind`.
+
+For other types, the return type may be customised via a two-step process:
+
+# A specialisation of the [link asio.reference.handler_type `handler_type`]
+template, which is used to determine the true handler type based on the
+asynchronous operation's handler's signature.
+
+# A specialisation of the [link asio.reference.async_result `async_result`]
+template, which is used both to determine the return type and to extract the
+return value from the handler.
+
+These two templates have been specialised to provide support for [link
+asio.overview.core.spawn stackful coroutines] and the C++11 `std::future`
+class.
+
+As an example, consider what happens when enabling `std::future` support by
+using the `asio::use_future` special value, as in:
+
+  std::future<std::size_t> length =
+    my_socket.async_read_some(my_buffer, asio::use_future);
+
+When a handler signature has the form:
+
+  void handler(error_code ec, result_type result);
+
+the initiating function returns a `std::future` templated on `result_type`. In
+the above `async_read_some` example, this is `std::size_t`. If the asynchronous
+operation fails, the `error_code` is converted into a `system_error` exception
+and passed back to the caller through the future.
+
+Where a handler signature has the form:
+
+  void handler(error_code ec);
+
+the initiating function instead returns `std::future<void>`.
 
 [endsect]