]> git.proxmox.com Git - ceph.git/blobdiff - ceph/src/boost/boost/beast/core/detail/bind_handler.hpp
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / boost / boost / beast / core / detail / bind_handler.hpp
index 5a9059b8e310f7f219f819334c6508d9c585b07a..48046df923e23d45b252f357e6cc79d7b99bc5fb 100644 (file)
@@ -14,7 +14,9 @@
 #include <boost/asio/associated_allocator.hpp>
 #include <boost/asio/associated_executor.hpp>
 #include <boost/asio/handler_continuation_hook.hpp>
+#include <boost/asio/handler_invoke_hook.hpp>
 #include <boost/core/ignore_unused.hpp>
+#include <boost/is_placeholder.hpp>
 #include <functional>
 #include <utility>
 
@@ -45,8 +47,10 @@ class bound_handler
     static
     typename std::enable_if<
         std::is_placeholder<typename
+            std::decay<Arg>::type>::value == 0 &&
+        boost::is_placeholder<typename
             std::decay<Arg>::type>::value == 0,
-    Arg&&>::type
+        Arg&&>::type
     extract(Arg&& arg, Vals& vals)
     {
         boost::ignore_unused(vals);
@@ -58,10 +62,10 @@ class bound_handler
     typename std::enable_if<
         std::is_placeholder<typename
             std::decay<Arg>::type>::value != 0,
-    typename std::tuple_element<
-        std::is_placeholder<
-            typename std::decay<Arg>::type>::value - 1,
-    Vals>::type&&>::type
+        typename std::tuple_element<
+            std::is_placeholder<
+                typename std::decay<Arg>::type>::value - 1,
+        Vals>>::type::type&&
     extract(Arg&&, Vals&& vals)
     {
         return std::get<std::is_placeholder<
@@ -69,6 +73,22 @@ class bound_handler
                 std::forward<Vals>(vals));
     }
 
+    template<class Arg, class Vals>
+    static
+    typename std::enable_if<
+        boost::is_placeholder<typename
+            std::decay<Arg>::type>::value != 0,
+        typename std::tuple_element<
+            boost::is_placeholder<
+                typename std::decay<Arg>::type>::value - 1,
+        Vals>>::type::type&&
+    extract(Arg&&, Vals&& vals)
+    {
+        return std::get<boost::is_placeholder<
+            typename std::decay<Arg>::type>::value - 1>(
+                std::forward<Vals>(vals));
+    }
+
     template<
         class ArgsTuple,
         std::size_t... S>
@@ -109,7 +129,7 @@ public:
         boost::asio::associated_allocator_t<Handler>;
 
     bound_handler(bound_handler&&) = default;
-    bound_handler(bound_handler const&) = default;
+    bound_handler(bound_handler const&) = delete;
 
     template<class DeducedHandler>
     explicit
@@ -123,7 +143,7 @@ public:
     allocator_type
     get_allocator() const noexcept
     {
-        return boost::asio::get_associated_allocator(h_);
+        return (boost::asio::get_associated_allocator)(h_);
     }
 
     friend
@@ -134,6 +154,14 @@ public:
         return asio_handler_is_continuation(std::addressof(h->h_));
     }
 
+    template<class Function>
+    friend
+    void asio_handler_invoke(Function&& f, bound_handler* h)
+    {
+        using boost::asio::asio_handler_invoke;
+        asio_handler_invoke(f, std::addressof(h->h_));
+    }
+
     template<class... Values>
     void
     operator()(Values&&... values)