Document a stronger guarantee for the state of post-move objects.
diff --git a/asio/include/asio/basic_datagram_socket.hpp b/asio/include/asio/basic_datagram_socket.hpp
index 7d337f6..7f6f0e5 100644
--- a/asio/include/asio/basic_datagram_socket.hpp
+++ b/asio/include/asio/basic_datagram_socket.hpp
@@ -139,9 +139,8 @@
    * @param other The other basic_datagram_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
    */
   basic_datagram_socket(basic_datagram_socket&& other)
     : basic_socket<Protocol, DatagramSocketService>(
@@ -157,9 +156,8 @@
    * @param other The other basic_datagram_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_datagram_socket(io_service&) constructor.
    */
   basic_datagram_socket& operator=(basic_datagram_socket&& other)
   {
diff --git a/asio/include/asio/basic_raw_socket.hpp b/asio/include/asio/basic_raw_socket.hpp
index b073807..5687388 100644
--- a/asio/include/asio/basic_raw_socket.hpp
+++ b/asio/include/asio/basic_raw_socket.hpp
@@ -139,9 +139,8 @@
    * @param other The other basic_raw_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
    */
   basic_raw_socket(basic_raw_socket&& other)
     : basic_socket<Protocol, RawSocketService>(
@@ -156,9 +155,8 @@
    * @param other The other basic_raw_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_raw_socket(io_service&) constructor.
    */
   basic_raw_socket& operator=(basic_raw_socket&& other)
   {
diff --git a/asio/include/asio/basic_seq_packet_socket.hpp b/asio/include/asio/basic_seq_packet_socket.hpp
index a637b57..3d6e0af 100644
--- a/asio/include/asio/basic_seq_packet_socket.hpp
+++ b/asio/include/asio/basic_seq_packet_socket.hpp
@@ -144,9 +144,8 @@
    * @param other The other basic_seq_packet_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
    */
   basic_seq_packet_socket(basic_seq_packet_socket&& other)
     : basic_socket<Protocol, SeqPacketSocketService>(
@@ -162,9 +161,8 @@
    * @param other The other basic_seq_packet_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_seq_packet_socket(io_service&) constructor.
    */
   basic_seq_packet_socket& operator=(basic_seq_packet_socket&& other)
   {
diff --git a/asio/include/asio/basic_serial_port.hpp b/asio/include/asio/basic_serial_port.hpp
index 8dce8ea..dc8b328 100644
--- a/asio/include/asio/basic_serial_port.hpp
+++ b/asio/include/asio/basic_serial_port.hpp
@@ -140,9 +140,8 @@
    * @param other The other basic_serial_port object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_serial_port(io_service&) constructor.
    */
   basic_serial_port(basic_serial_port&& other)
     : basic_io_object<SerialPortService>(
@@ -157,9 +156,8 @@
    * @param other The other basic_serial_port object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_serial_port(io_service&) constructor.
    */
   basic_serial_port& operator=(basic_serial_port&& other)
   {
diff --git a/asio/include/asio/basic_socket.hpp b/asio/include/asio/basic_socket.hpp
index 6d0008a..7b0e525 100644
--- a/asio/include/asio/basic_socket.hpp
+++ b/asio/include/asio/basic_socket.hpp
@@ -147,9 +147,8 @@
    * @param other The other basic_socket object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
    */
   basic_socket(basic_socket&& other)
     : basic_io_object<SocketService>(
@@ -164,9 +163,8 @@
    * @param other The other basic_socket object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket(io_service&) constructor.
    */
   basic_socket& operator=(basic_socket&& other)
   {
diff --git a/asio/include/asio/basic_socket_acceptor.hpp b/asio/include/asio/basic_socket_acceptor.hpp
index bee74e3..ae0385c 100644
--- a/asio/include/asio/basic_socket_acceptor.hpp
+++ b/asio/include/asio/basic_socket_acceptor.hpp
@@ -185,9 +185,8 @@
    * @param other The other basic_socket_acceptor object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket_acceptor(io_service&) constructor.
    */
   basic_socket_acceptor(basic_socket_acceptor&& other)
     : basic_io_object<SocketAcceptorService>(
@@ -202,9 +201,8 @@
    * @param other The other basic_socket_acceptor object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_socket_acceptor(io_service&) constructor.
    */
   basic_socket_acceptor& operator=(basic_socket_acceptor&& other)
   {
diff --git a/asio/include/asio/basic_stream_socket.hpp b/asio/include/asio/basic_stream_socket.hpp
index dd071f7..f93c978 100644
--- a/asio/include/asio/basic_stream_socket.hpp
+++ b/asio/include/asio/basic_stream_socket.hpp
@@ -140,9 +140,8 @@
    * @param other The other basic_stream_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
    */
   basic_stream_socket(basic_stream_socket&& other)
     : basic_socket<Protocol, StreamSocketService>(
@@ -157,9 +156,8 @@
    * @param other The other basic_stream_socket object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_socket(io_service&) constructor.
    */
   basic_stream_socket& operator=(basic_stream_socket&& other)
   {
diff --git a/asio/include/asio/posix/basic_descriptor.hpp b/asio/include/asio/posix/basic_descriptor.hpp
index e51ecea..7d89855 100644
--- a/asio/include/asio/posix/basic_descriptor.hpp
+++ b/asio/include/asio/posix/basic_descriptor.hpp
@@ -99,9 +99,8 @@
    * @param other The other basic_descriptor object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_descriptor(io_service&) constructor.
    */
   basic_descriptor(basic_descriptor&& other)
     : basic_io_object<DescriptorService>(
@@ -116,9 +115,8 @@
    * @param other The other basic_descriptor object from which the move will
    * occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_descriptor(io_service&) constructor.
    */
   basic_descriptor& operator=(basic_descriptor&& other)
   {
diff --git a/asio/include/asio/posix/basic_stream_descriptor.hpp b/asio/include/asio/posix/basic_stream_descriptor.hpp
index 532dd06..b4c089d 100644
--- a/asio/include/asio/posix/basic_stream_descriptor.hpp
+++ b/asio/include/asio/posix/basic_stream_descriptor.hpp
@@ -99,9 +99,8 @@
    * @param other The other basic_stream_descriptor object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_descriptor(io_service&) constructor.
    */
   basic_stream_descriptor(basic_stream_descriptor&& other)
     : basic_descriptor<StreamDescriptorService>(
@@ -117,9 +116,8 @@
    * @param other The other basic_stream_descriptor object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_descriptor(io_service&) constructor.
    */
   basic_stream_descriptor& operator=(basic_stream_descriptor&& other)
   {
diff --git a/asio/include/asio/windows/basic_handle.hpp b/asio/include/asio/windows/basic_handle.hpp
index 5f63b36..d61bc15 100644
--- a/asio/include/asio/windows/basic_handle.hpp
+++ b/asio/include/asio/windows/basic_handle.hpp
@@ -93,9 +93,8 @@
    *
    * @param other The other basic_handle object from which the move will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_handle(io_service&) constructor.
    */
   basic_handle(basic_handle&& other)
     : basic_io_object<HandleService>(
@@ -109,9 +108,8 @@
    *
    * @param other The other basic_handle object from which the move will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_handle(io_service&) constructor.
    */
   basic_handle& operator=(basic_handle&& other)
   {
diff --git a/asio/include/asio/windows/basic_random_access_handle.hpp b/asio/include/asio/windows/basic_random_access_handle.hpp
index c12ab6f..0177254 100644
--- a/asio/include/asio/windows/basic_random_access_handle.hpp
+++ b/asio/include/asio/windows/basic_random_access_handle.hpp
@@ -95,9 +95,9 @@
    * @param other The other basic_random_access_handle object from which the
    * move will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_random_access_handle(io_service&)
+   * constructor.
    */
   basic_random_access_handle(basic_random_access_handle&& other)
     : basic_handle<RandomAccessHandleService>(
@@ -113,9 +113,9 @@
    * @param other The other basic_random_access_handle object from which the
    * move will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_random_access_handle(io_service&)
+   * constructor.
    */
   basic_random_access_handle& operator=(basic_random_access_handle&& other)
   {
diff --git a/asio/include/asio/windows/basic_stream_handle.hpp b/asio/include/asio/windows/basic_stream_handle.hpp
index c560c2a..5de87f9 100644
--- a/asio/include/asio/windows/basic_stream_handle.hpp
+++ b/asio/include/asio/windows/basic_stream_handle.hpp
@@ -96,9 +96,8 @@
    * @param other The other basic_stream_handle object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_handle(io_service&) constructor.
    */
   basic_stream_handle(basic_stream_handle&& other)
     : basic_handle<StreamHandleService>(
@@ -114,9 +113,8 @@
    * @param other The other basic_stream_handle object from which the move
    * will occur.
    *
-   * @note Following the move, the valid operations for the other object are:
-   * @li Using it as the target of a move assignment.
-   * @li Destruction.
+   * @note Following the move, the moved-from object is in the same state as if
+   * constructed using the @c basic_stream_handle(io_service&) constructor.
    */
   basic_stream_handle& operator=(basic_stream_handle&& other)
   {
diff --git a/asio/src/doc/reference.qbk b/asio/src/doc/reference.qbk
index a5d2058..3c47cdd 100644
--- a/asio/src/doc/reference.qbk
+++ b/asio/src/doc/reference.qbk
@@ -4224,12 +4224,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 
 
 
 
@@ -7004,12 +6999,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_datagram_socket(io_service&) constructor`. 
 
 
 
@@ -11700,12 +11690,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 
 
 
 
@@ -14480,12 +14465,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_raw_socket(io_service&) constructor`. 
 
 
 
@@ -17153,12 +17133,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 
 
 
 
@@ -19933,12 +19908,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_seq_packet_socket(io_service&) constructor`. 
 
 
 
@@ -21612,12 +21582,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_serial_port(io_service&) constructor`. 
 
 
 
@@ -22507,12 +22472,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_serial_port(io_service&) constructor`. 
 
 
 
@@ -24920,12 +24880,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
 
 
 
@@ -27624,12 +27579,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket(io_service&) constructor`. 
 
 
 
@@ -29467,12 +29417,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket_acceptor(io_service&) constructor`. 
 
 
 
@@ -31422,12 +31367,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_socket_acceptor(io_service&) constructor`. 
 
 
 
@@ -38356,12 +38296,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 
 
 
 
@@ -41136,12 +41071,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_socket(io_service&) constructor`. 
 
 
 
@@ -68861,12 +68791,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_descriptor(io_service&) constructor`. 
 
 
 
@@ -70037,12 +69962,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_descriptor(io_service&) constructor`. 
 
 
 
@@ -70648,12 +70568,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_descriptor(io_service&) constructor`. 
 
 
 
@@ -71874,12 +71789,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_descriptor(io_service&) constructor`. 
 
 
 
@@ -87716,12 +87626,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_handle(io_service&) constructor`. 
 
 
 
@@ -88388,12 +88293,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_handle(io_service&) constructor`. 
 
 
 
@@ -88948,12 +88848,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_random_access_handle(io_service&)` constructor. 
 
 
 
@@ -89650,12 +89545,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_random_access_handle(io_service&)` constructor. 
 
 
 
@@ -90459,12 +90349,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_handle(io_service&) constructor`. 
 
 
 
@@ -91161,12 +91046,7 @@
 
 [heading Remarks]
       
-Following the move, the valid operations for the other object are: 
-* Using it as the target of a move assignment. 
-
-* Destruction. 
-
-
+Following the move, the moved-from object is in the same state as if constructed using the `basic_stream_handle(io_service&) constructor`.