diff options
author | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
---|---|---|
committer | DongHun Kwak <dh0128.kwak@samsung.com> | 2019-12-05 15:11:01 +0900 |
commit | 3fdc3e5ee96dca5b11d1694975a65200787eab86 (patch) | |
tree | 5c1733853892b8397d67706fa453a9bd978d2102 /boost/asio/handler_type.hpp | |
parent | 88e602c57797660ebe0f9e15dbd64c1ff16dead3 (diff) | |
download | boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.gz boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.tar.bz2 boost-3fdc3e5ee96dca5b11d1694975a65200787eab86.zip |
Imported Upstream version 1.66.0upstream/1.66.0
Diffstat (limited to 'boost/asio/handler_type.hpp')
-rw-r--r-- | boost/asio/handler_type.hpp | 82 |
1 files changed, 10 insertions, 72 deletions
diff --git a/boost/asio/handler_type.hpp b/boost/asio/handler_type.hpp index 11e97e3ea0..97187574b6 100644 --- a/boost/asio/handler_type.hpp +++ b/boost/asio/handler_type.hpp @@ -16,99 +16,37 @@ #endif // defined(_MSC_VER) && (_MSC_VER >= 1200) #include <boost/asio/detail/config.hpp> +#include <boost/asio/detail/type_traits.hpp> #include <boost/asio/detail/push_options.hpp> namespace boost { namespace asio { -/// Default handler type traits provided for all handlers. +/// (Deprecated: Use two-parameter version of async_result.) Default handler +/// type traits provided for all completion token types. /** * The handler_type traits class is used for determining the concrete handler * type to be used for an asynchronous operation. It allows the handler type to * be determined at the point where the specific completion handler signature * is known. * - * This template may be specialised for user-defined handler types. + * This template may be specialised for user-defined completion token types. */ -template <typename Handler, typename Signature> +template <typename CompletionToken, typename Signature, typename = void> struct handler_type { /// The handler type for the specific signature. - typedef Handler type; + typedef typename conditional< + is_same<CompletionToken, typename decay<CompletionToken>::type>::value, + decay<CompletionToken>, + handler_type<typename decay<CompletionToken>::type, Signature> + >::type::type type; }; -#if !defined(GENERATING_DOCUMENTATION) - -template <typename Handler, typename Signature> -struct handler_type<const Handler, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<volatile Handler, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<const volatile Handler, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<const Handler&, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<volatile Handler&, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<const volatile Handler&, Signature> - : handler_type<Handler, Signature> {}; - -template <typename Handler, typename Signature> -struct handler_type<Handler&, Signature> - : handler_type<Handler, Signature> {}; - -#if defined(BOOST_ASIO_HAS_MOVE) -template <typename Handler, typename Signature> -struct handler_type<Handler&&, Signature> - : handler_type<Handler, Signature> {}; -#endif // defined(BOOST_ASIO_HAS_MOVE) - -template <typename ReturnType, typename Signature> -struct handler_type<ReturnType(), Signature> - : handler_type<ReturnType(*)(), Signature> {}; - -template <typename ReturnType, typename Arg1, typename Signature> -struct handler_type<ReturnType(Arg1), Signature> - : handler_type<ReturnType(*)(Arg1), Signature> {}; - -template <typename ReturnType, typename Arg1, typename Arg2, typename Signature> -struct handler_type<ReturnType(Arg1, Arg2), Signature> - : handler_type<ReturnType(*)(Arg1, Arg2), Signature> {}; - -template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3, - typename Signature> -struct handler_type<ReturnType(Arg1, Arg2, Arg3), Signature> - : handler_type<ReturnType(*)(Arg1, Arg2, Arg3), Signature> {}; - -template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3, - typename Arg4, typename Signature> -struct handler_type<ReturnType(Arg1, Arg2, Arg3, Arg4), Signature> - : handler_type<ReturnType(*)(Arg1, Arg2, Arg3, Arg4), Signature> {}; - -template <typename ReturnType, typename Arg1, typename Arg2, typename Arg3, - typename Arg4, typename Arg5, typename Signature> -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 } // namespace boost #include <boost/asio/detail/pop_options.hpp> -#define BOOST_ASIO_HANDLER_TYPE(h, sig) \ - typename handler_type<h, sig>::type - #endif // BOOST_ASIO_HANDLER_TYPE_HPP |