Mark buffer functions with noexcept.
diff --git a/asio/include/asio/buffer.hpp b/asio/include/asio/buffer.hpp
index 215b3dc..9222daa 100644
--- a/asio/include/asio/buffer.hpp
+++ b/asio/include/asio/buffer.hpp
@@ -90,14 +90,14 @@
 {
 public:
   /// Construct an empty buffer.
-  mutable_buffer()
+  mutable_buffer() ASIO_NOEXCEPT
     : data_(0),
       size_(0)
   {
   }
 
   /// Construct a buffer to represent a given memory range.
-  mutable_buffer(void* data, std::size_t size)
+  mutable_buffer(void* data, std::size_t size) ASIO_NOEXCEPT
     : data_(data),
       size_(size)
   {
@@ -119,7 +119,7 @@
 #endif // ASIO_ENABLE_BUFFER_DEBUGGING
 
   /// Get a pointer to the beginning of the memory range.
-  void* data() const
+  void* data() const ASIO_NOEXCEPT
   {
 #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
     if (size_ && debug_check_)
@@ -129,7 +129,7 @@
   }
 
   /// Get the size of the memory range.
-  std::size_t size() const
+  std::size_t size() const ASIO_NOEXCEPT
   {
     return size_;
   }
@@ -156,25 +156,25 @@
   typedef const mutable_buffer* const_iterator;
 
   /// Construct to represent a given memory range.
-  mutable_buffers_1(void* data, std::size_t size)
+  mutable_buffers_1(void* data, std::size_t size) ASIO_NOEXCEPT
     : mutable_buffer(data, size)
   {
   }
 
   /// Construct to represent a single modifiable buffer.
-  explicit mutable_buffers_1(const mutable_buffer& b)
+  explicit mutable_buffers_1(const mutable_buffer& b) ASIO_NOEXCEPT
     : mutable_buffer(b)
   {
   }
 
   /// Get a random-access iterator to the first element.
-  const_iterator begin() const
+  const_iterator begin() const ASIO_NOEXCEPT
   {
     return this;
   }
 
   /// Get a random-access iterator for one past the last element.
-  const_iterator end() const
+  const_iterator end() const ASIO_NOEXCEPT
   {
     return begin() + 1;
   }
@@ -203,21 +203,21 @@
 {
 public:
   /// Construct an empty buffer.
-  const_buffer()
+  const_buffer() ASIO_NOEXCEPT
     : data_(0),
       size_(0)
   {
   }
 
   /// Construct a buffer to represent a given memory range.
-  const_buffer(const void* data, std::size_t size)
+  const_buffer(const void* data, std::size_t size) ASIO_NOEXCEPT
     : data_(data),
       size_(size)
   {
   }
 
   /// Construct a non-modifiable buffer from a modifiable one.
-  const_buffer(const mutable_buffer& b)
+  const_buffer(const mutable_buffer& b) ASIO_NOEXCEPT
     : data_(b.data()),
       size_(b.size())
 #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
@@ -242,7 +242,7 @@
 #endif // ASIO_ENABLE_BUFFER_DEBUGGING
 
   /// Get a pointer to the beginning of the memory range.
-  const void* data() const
+  const void* data() const ASIO_NOEXCEPT
   {
 #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
     if (size_ && debug_check_)
@@ -252,7 +252,7 @@
   }
 
   /// Get the size of the memory range.
-  std::size_t size() const
+  std::size_t size() const ASIO_NOEXCEPT
   {
     return size_;
   }
@@ -279,25 +279,25 @@
   typedef const const_buffer* const_iterator;
 
   /// Construct to represent a given memory range.
-  const_buffers_1(const void* data, std::size_t size)
+  const_buffers_1(const void* data, std::size_t size) ASIO_NOEXCEPT
     : const_buffer(data, size)
   {
   }
 
   /// Construct to represent a single non-modifiable buffer.
-  explicit const_buffers_1(const const_buffer& b)
+  explicit const_buffers_1(const const_buffer& b) ASIO_NOEXCEPT
     : const_buffer(b)
   {
   }
 
   /// Get a random-access iterator to the first element.
-  const_iterator begin() const
+  const_iterator begin() const ASIO_NOEXCEPT
   {
     return this;
   }
 
   /// Get a random-access iterator for one past the last element.
-  const_iterator end() const
+  const_iterator end() const ASIO_NOEXCEPT
   {
     return begin() + 1;
   }
@@ -352,13 +352,13 @@
   typedef const mutable_buffer* const_iterator;
 
   /// Get a random-access iterator to the first element.
-  const_iterator begin() const
+  const_iterator begin() const ASIO_NOEXCEPT
   {
     return &buf_;
   }
 
   /// Get a random-access iterator for one past the last element.
-  const_iterator end() const
+  const_iterator end() const ASIO_NOEXCEPT
   {
     return &buf_;
   }
@@ -375,25 +375,25 @@
 /*@{*/
 
 /// Get the number of bytes in a modifiable buffer.
-inline std::size_t buffer_size(const mutable_buffer& b)
+inline std::size_t buffer_size(const mutable_buffer& b) ASIO_NOEXCEPT
 {
   return b.size();
 }
 
 /// Get the number of bytes in a modifiable buffer.
-inline std::size_t buffer_size(const mutable_buffers_1& b)
+inline std::size_t buffer_size(const mutable_buffers_1& b) ASIO_NOEXCEPT
 {
   return b.size();
 }
 
 /// Get the number of bytes in a non-modifiable buffer.
-inline std::size_t buffer_size(const const_buffer& b)
+inline std::size_t buffer_size(const const_buffer& b) ASIO_NOEXCEPT
 {
   return b.size();
 }
 
 /// Get the number of bytes in a non-modifiable buffer.
-inline std::size_t buffer_size(const const_buffers_1& b)
+inline std::size_t buffer_size(const const_buffers_1& b) ASIO_NOEXCEPT
 {
   return b.size();
 }
@@ -407,7 +407,7 @@
 inline std::size_t buffer_size(const BufferSequence& b,
     typename enable_if<
       is_const_buffer_sequence<BufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   std::size_t total_buffer_size = 0;
 
@@ -426,8 +426,8 @@
 /** @defgroup buffer_cast asio::buffer_cast
  *
  * @brief (Deprecated: Use the @c data() member function.) The
- * asio::buffer_cast function is used to obtain a pointer to the underlying
- * memory region associated with a buffer.
+ * asio::buffer_cast function is used to obtain a pointer to the
+ * underlying memory region associated with a buffer.
  *
  * @par Examples:
  *
@@ -448,14 +448,14 @@
 
 /// Cast a non-modifiable buffer to a specified pointer to POD type.
 template <typename PointerToPodType>
-inline PointerToPodType buffer_cast(const mutable_buffer& b)
+inline PointerToPodType buffer_cast(const mutable_buffer& b) ASIO_NOEXCEPT
 {
   return static_cast<PointerToPodType>(b.data());
 }
 
 /// Cast a non-modifiable buffer to a specified pointer to POD type.
 template <typename PointerToPodType>
-inline PointerToPodType buffer_cast(const const_buffer& b)
+inline PointerToPodType buffer_cast(const const_buffer& b) ASIO_NOEXCEPT
 {
   return static_cast<PointerToPodType>(b.data());
 }
@@ -468,7 +468,8 @@
 /**
  * @relates mutable_buffer
  */
-inline mutable_buffer operator+(const mutable_buffer& b, std::size_t start)
+inline mutable_buffer operator+(const mutable_buffer& b,
+    std::size_t start) ASIO_NOEXCEPT
 {
   if (start > b.size())
     return mutable_buffer();
@@ -485,7 +486,8 @@
 /**
  * @relates mutable_buffer
  */
-inline mutable_buffer operator+(std::size_t start, const mutable_buffer& b)
+inline mutable_buffer operator+(std::size_t start,
+    const mutable_buffer& b) ASIO_NOEXCEPT
 {
   return b + start;
 }
@@ -494,7 +496,8 @@
 /**
  * @relates const_buffer
  */
-inline const_buffer operator+(const const_buffer& b, std::size_t start)
+inline const_buffer operator+(const const_buffer& b,
+    std::size_t start) ASIO_NOEXCEPT
 {
   if (start > b.size())
     return const_buffer();
@@ -511,7 +514,8 @@
 /**
  * @relates const_buffer
  */
-inline const_buffer operator+(std::size_t start, const const_buffer& b)
+inline const_buffer operator+(std::size_t start,
+    const const_buffer& b) ASIO_NOEXCEPT
 {
   return b + start;
 }
@@ -716,7 +720,7 @@
 /**
  * @returns <tt>mutable_buffers_1(b)</tt>.
  */
-inline mutable_buffers_1 buffer(const mutable_buffer& b)
+inline mutable_buffers_1 buffer(const mutable_buffer& b) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(b);
 }
@@ -729,7 +733,7 @@
  *     min(b.size(), max_size_in_bytes)); @endcode
  */
 inline mutable_buffers_1 buffer(const mutable_buffer& b,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(b.data(),
@@ -745,7 +749,7 @@
 /**
  * @returns <tt>const_buffers_1(b)</tt>.
  */
-inline const_buffers_1 buffer(const const_buffer& b)
+inline const_buffers_1 buffer(const const_buffer& b) ASIO_NOEXCEPT
 {
   return const_buffers_1(b);
 }
@@ -758,7 +762,7 @@
  *     min(b.size(), max_size_in_bytes)); @endcode
  */
 inline const_buffers_1 buffer(const const_buffer& b,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(b.data(),
@@ -775,7 +779,7 @@
  * @returns <tt>mutable_buffers_1(data, size_in_bytes)</tt>.
  */
 inline mutable_buffers_1 buffer(void* data,
-    std::size_t size_in_bytes)
+    std::size_t size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(mutable_buffer(data, size_in_bytes));
 }
@@ -785,7 +789,7 @@
  * @returns <tt>const_buffers_1(data, size_in_bytes)</tt>.
  */
 inline const_buffers_1 buffer(const void* data,
-    std::size_t size_in_bytes)
+    std::size_t size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(const_buffer(data, size_in_bytes));
 }
@@ -798,7 +802,7 @@
  *     N * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline mutable_buffers_1 buffer(PodType (&data)[N])
+inline mutable_buffers_1 buffer(PodType (&data)[N]) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(mutable_buffer(data, N * sizeof(PodType)));
 }
@@ -812,7 +816,7 @@
  */
 template <typename PodType, std::size_t N>
 inline mutable_buffers_1 buffer(PodType (&data)[N],
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data,
@@ -828,7 +832,7 @@
  *     N * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline const_buffers_1 buffer(const PodType (&data)[N])
+inline const_buffers_1 buffer(const PodType (&data)[N]) ASIO_NOEXCEPT
 {
   return const_buffers_1(const_buffer(data, N * sizeof(PodType)));
 }
@@ -842,7 +846,7 @@
  */
 template <typename PodType, std::size_t N>
 inline const_buffers_1 buffer(const PodType (&data)[N],
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data,
@@ -893,7 +897,7 @@
 
 template <typename PodType, std::size_t N>
 inline typename detail::buffer_types<PodType>::container_type
-buffer(boost::array<PodType, N>& data)
+buffer(boost::array<PodType, N>& data) ASIO_NOEXCEPT
 {
   typedef typename asio::detail::buffer_types<PodType>::buffer_type
     buffer_type;
@@ -905,7 +909,8 @@
 
 template <typename PodType, std::size_t N>
 inline typename detail::buffer_types<PodType>::container_type
-buffer(boost::array<PodType, N>& data, std::size_t max_size_in_bytes)
+buffer(boost::array<PodType, N>& data,
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   typedef typename asio::detail::buffer_types<PodType>::buffer_type
     buffer_type;
@@ -927,7 +932,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline mutable_buffers_1 buffer(boost::array<PodType, N>& data)
+inline mutable_buffers_1 buffer(
+    boost::array<PodType, N>& data) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.c_array(), data.size() * sizeof(PodType)));
@@ -942,7 +948,7 @@
  */
 template <typename PodType, std::size_t N>
 inline mutable_buffers_1 buffer(boost::array<PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.c_array(),
@@ -958,7 +964,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline const_buffers_1 buffer(boost::array<const PodType, N>& data)
+inline const_buffers_1 buffer(
+    boost::array<const PodType, N>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(), data.size() * sizeof(PodType)));
@@ -973,7 +980,7 @@
  */
 template <typename PodType, std::size_t N>
 inline const_buffers_1 buffer(boost::array<const PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(),
@@ -991,7 +998,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline const_buffers_1 buffer(const boost::array<PodType, N>& data)
+inline const_buffers_1 buffer(
+    const boost::array<PodType, N>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(), data.size() * sizeof(PodType)));
@@ -1006,7 +1014,7 @@
  */
 template <typename PodType, std::size_t N>
 inline const_buffers_1 buffer(const boost::array<PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(),
@@ -1024,7 +1032,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline mutable_buffers_1 buffer(std::array<PodType, N>& data)
+inline mutable_buffers_1 buffer(
+    std::array<PodType, N>& data) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.data(), data.size() * sizeof(PodType)));
@@ -1039,7 +1048,7 @@
  */
 template <typename PodType, std::size_t N>
 inline mutable_buffers_1 buffer(std::array<PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.data(),
@@ -1055,7 +1064,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline const_buffers_1 buffer(std::array<const PodType, N>& data)
+inline const_buffers_1 buffer(
+    std::array<const PodType, N>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(), data.size() * sizeof(PodType)));
@@ -1070,7 +1080,7 @@
  */
 template <typename PodType, std::size_t N>
 inline const_buffers_1 buffer(std::array<const PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(),
@@ -1086,7 +1096,8 @@
  *     data.size() * sizeof(PodType)); @endcode
  */
 template <typename PodType, std::size_t N>
-inline const_buffers_1 buffer(const std::array<PodType, N>& data)
+inline const_buffers_1 buffer(
+    const std::array<PodType, N>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(), data.size() * sizeof(PodType)));
@@ -1101,7 +1112,7 @@
  */
 template <typename PodType, std::size_t N>
 inline const_buffers_1 buffer(const std::array<PodType, N>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(),
@@ -1122,7 +1133,8 @@
  * invalidate iterators.
  */
 template <typename PodType, typename Allocator>
-inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data)
+inline mutable_buffers_1 buffer(
+    std::vector<PodType, Allocator>& data) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
@@ -1146,7 +1158,7 @@
  */
 template <typename PodType, typename Allocator>
 inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.size() ? &data[0] : 0,
@@ -1172,7 +1184,7 @@
  */
 template <typename PodType, typename Allocator>
 inline const_buffers_1 buffer(
-    const std::vector<PodType, Allocator>& data)
+    const std::vector<PodType, Allocator>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)
@@ -1196,7 +1208,8 @@
  */
 template <typename PodType, typename Allocator>
 inline const_buffers_1 buffer(
-    const std::vector<PodType, Allocator>& data, std::size_t max_size_in_bytes)
+    const std::vector<PodType, Allocator>& data,
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.size() ? &data[0] : 0,
@@ -1220,7 +1233,7 @@
  */
 template <typename Elem, typename Traits, typename Allocator>
 inline mutable_buffers_1 buffer(
-    std::basic_string<Elem, Traits, Allocator>& data)
+    std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(mutable_buffer(data.size() ? &data[0] : 0,
         data.size() * sizeof(Elem)
@@ -1245,7 +1258,7 @@
 template <typename Elem, typename Traits, typename Allocator>
 inline mutable_buffers_1 buffer(
     std::basic_string<Elem, Traits, Allocator>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return mutable_buffers_1(
       mutable_buffer(data.size() ? &data[0] : 0,
@@ -1268,7 +1281,7 @@
  */
 template <typename Elem, typename Traits, typename Allocator>
 inline const_buffers_1 buffer(
-    const std::basic_string<Elem, Traits, Allocator>& data)
+    const std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
 {
   return const_buffers_1(const_buffer(data.data(), data.size() * sizeof(Elem)
 #if defined(ASIO_ENABLE_BUFFER_DEBUGGING)
@@ -1292,7 +1305,7 @@
 template <typename Elem, typename Traits, typename Allocator>
 inline const_buffers_1 buffer(
     const std::basic_string<Elem, Traits, Allocator>& data,
-    std::size_t max_size_in_bytes)
+    std::size_t max_size_in_bytes) ASIO_NOEXCEPT
 {
   return const_buffers_1(
       const_buffer(data.data(),
@@ -1333,7 +1346,8 @@
    * @param maximum_size Specifies a maximum size for the buffer, in bytes.
    */
   explicit dynamic_string_buffer(std::basic_string<Elem, Traits, Allocator>& s,
-      std::size_t maximum_size = (std::numeric_limits<std::size_t>::max)())
+      std::size_t maximum_size =
+        (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
     : string_(s),
       size_(string_.size()),
       max_size_(maximum_size)
@@ -1342,7 +1356,7 @@
 
 #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
   /// Move construct a dynamic buffer.
-  dynamic_string_buffer(dynamic_string_buffer&& other)
+  dynamic_string_buffer(dynamic_string_buffer&& other) ASIO_NOEXCEPT
     : string_(other.string_),
       size_(other.size_),
       max_size_(other.max_size_)
@@ -1483,7 +1497,8 @@
    * @param maximum_size Specifies a maximum size for the buffer, in bytes.
    */
   explicit dynamic_vector_buffer(std::vector<Elem, Allocator>& v,
-      std::size_t maximum_size = (std::numeric_limits<std::size_t>::max)())
+      std::size_t maximum_size =
+        (std::numeric_limits<std::size_t>::max)()) ASIO_NOEXCEPT
     : vector_(v),
       size_(vector_.size()),
       max_size_(maximum_size)
@@ -1492,7 +1507,7 @@
 
 #if defined(ASIO_HAS_MOVE) || defined(GENERATING_DOCUMENTATION)
   /// Move construct a dynamic buffer.
-  dynamic_vector_buffer(dynamic_vector_buffer&& other)
+  dynamic_vector_buffer(dynamic_vector_buffer&& other) ASIO_NOEXCEPT
     : vector_(other.vector_),
       size_(other.size_),
       max_size_(other.max_size_)
@@ -1621,7 +1636,7 @@
  */
 template <typename Elem, typename Traits, typename Allocator>
 inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
-    std::basic_string<Elem, Traits, Allocator>& data)
+    std::basic_string<Elem, Traits, Allocator>& data) ASIO_NOEXCEPT
 {
   return dynamic_string_buffer<Elem, Traits, Allocator>(data);
 }
@@ -1633,7 +1648,8 @@
  */
 template <typename Elem, typename Traits, typename Allocator>
 inline dynamic_string_buffer<Elem, Traits, Allocator> dynamic_buffer(
-    std::basic_string<Elem, Traits, Allocator>& data, std::size_t max_size)
+    std::basic_string<Elem, Traits, Allocator>& data,
+    std::size_t max_size) ASIO_NOEXCEPT
 {
   return dynamic_string_buffer<Elem, Traits, Allocator>(data, max_size);
 }
@@ -1644,7 +1660,7 @@
  */
 template <typename Elem, typename Allocator>
 inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
-    std::vector<Elem, Allocator>& data)
+    std::vector<Elem, Allocator>& data) ASIO_NOEXCEPT
 {
   return dynamic_vector_buffer<Elem, Allocator>(data);
 }
@@ -1655,7 +1671,8 @@
  */
 template <typename Elem, typename Allocator>
 inline dynamic_vector_buffer<Elem, Allocator> dynamic_buffer(
-    std::vector<Elem, Allocator>& data, std::size_t max_size)
+    std::vector<Elem, Allocator>& data,
+    std::size_t max_size) ASIO_NOEXCEPT
 {
   return dynamic_vector_buffer<Elem, Allocator>(data, max_size);
 }
@@ -1710,7 +1727,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const const_buffer& source)
+    const const_buffer& source) ASIO_NOEXCEPT
 {
   using namespace std; // For memcpy.
   std::size_t target_size = target.size();
@@ -1740,7 +1757,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const const_buffers_1& source)
+    const const_buffers_1& source) ASIO_NOEXCEPT
 {
   return buffer_copy(target, static_cast<const const_buffer&>(source));
 }
@@ -1766,7 +1783,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const mutable_buffer& source)
+    const mutable_buffer& source) ASIO_NOEXCEPT
 {
   return buffer_copy(target, const_buffer(source));
 }
@@ -1792,7 +1809,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const mutable_buffers_1& source)
+    const mutable_buffers_1& source) ASIO_NOEXCEPT
 {
   return buffer_copy(target, const_buffer(source));
 }
@@ -1821,7 +1838,7 @@
     const ConstBufferSequence& source,
     typename enable_if<
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   std::size_t total_bytes_copied = 0;
 
@@ -1860,7 +1877,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const const_buffer& source)
+    const const_buffer& source) ASIO_NOEXCEPT
 {
   return buffer_copy(static_cast<const mutable_buffer&>(target), source);
 }
@@ -1885,7 +1902,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const const_buffers_1& source)
+    const const_buffers_1& source) ASIO_NOEXCEPT
 {
   return buffer_copy(static_cast<const mutable_buffer&>(target),
       static_cast<const const_buffer&>(source));
@@ -1912,7 +1929,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const mutable_buffer& source)
+    const mutable_buffer& source) ASIO_NOEXCEPT
 {
   return buffer_copy(static_cast<const mutable_buffer&>(target),
       const_buffer(source));
@@ -1939,7 +1956,7 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const mutable_buffers_1& source)
+    const mutable_buffers_1& source) ASIO_NOEXCEPT
 {
   return buffer_copy(static_cast<const mutable_buffer&>(target),
       const_buffer(source));
@@ -1969,7 +1986,7 @@
     const ConstBufferSequence& source,
     typename enable_if<
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(static_cast<const mutable_buffer&>(target), source);
 }
@@ -1998,7 +2015,7 @@
     const const_buffer& source,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   std::size_t total_bytes_copied = 0;
 
@@ -2041,7 +2058,7 @@
     const const_buffers_1& source,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, static_cast<const const_buffer&>(source));
 }
@@ -2071,7 +2088,7 @@
     const mutable_buffer& source,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, const_buffer(source));
 }
@@ -2101,7 +2118,7 @@
     const mutable_buffers_1& source,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, const_buffer(source));
 }
@@ -2131,7 +2148,7 @@
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value &&
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   std::size_t total_bytes_copied = 0;
 
@@ -2198,7 +2215,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const const_buffer& source, std::size_t max_bytes_to_copy)
+    const const_buffer& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2227,7 +2245,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const const_buffers_1& source, std::size_t max_bytes_to_copy)
+    const const_buffers_1& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2257,7 +2276,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const mutable_buffer& source, std::size_t max_bytes_to_copy)
+    const mutable_buffer& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2287,7 +2307,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffer& target,
-    const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
+    const mutable_buffers_1& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2321,7 +2342,7 @@
     const ConstBufferSequence& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2350,7 +2371,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const const_buffer& source, std::size_t max_bytes_to_copy)
+    const const_buffer& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2379,7 +2401,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const const_buffers_1& source, std::size_t max_bytes_to_copy)
+    const const_buffers_1& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2409,7 +2432,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const mutable_buffer& source, std::size_t max_bytes_to_copy)
+    const mutable_buffer& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2439,7 +2463,8 @@
  * cannot be used to copy between overlapping memory regions.
  */
 inline std::size_t buffer_copy(const mutable_buffers_1& target,
-    const mutable_buffers_1& source, std::size_t max_bytes_to_copy)
+    const mutable_buffers_1& source,
+    std::size_t max_bytes_to_copy) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2473,7 +2498,7 @@
     const ConstBufferSequence& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(buffer(target, max_bytes_to_copy), source);
 }
@@ -2507,7 +2532,7 @@
     const const_buffer& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, buffer(source, max_bytes_to_copy));
 }
@@ -2541,7 +2566,7 @@
     const const_buffers_1& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, buffer(source, max_bytes_to_copy));
 }
@@ -2576,7 +2601,7 @@
     const mutable_buffer& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, buffer(source, max_bytes_to_copy));
 }
@@ -2611,7 +2636,7 @@
     const mutable_buffers_1& source, std::size_t max_bytes_to_copy,
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   return buffer_copy(target, buffer(source, max_bytes_to_copy));
 }
@@ -2646,7 +2671,7 @@
     typename enable_if<
       is_mutable_buffer_sequence<MutableBufferSequence>::value &&
       is_const_buffer_sequence<ConstBufferSequence>::value
-    >::type* = 0)
+    >::type* = 0) ASIO_NOEXCEPT
 {
   std::size_t total_bytes_copied = 0;