diff options
Diffstat (limited to 'boost/beast/http/type_traits.hpp')
-rw-r--r-- | boost/beast/http/type_traits.hpp | 59 |
1 files changed, 43 insertions, 16 deletions
diff --git a/boost/beast/http/type_traits.hpp b/boost/beast/http/type_traits.hpp index 0c8210443e..d3b897f894 100644 --- a/boost/beast/http/type_traits.hpp +++ b/boost/beast/http/type_traits.hpp @@ -86,8 +86,8 @@ struct is_body_writer<T, beast::detail::void_t< std::declval<typename T::writer&>().init(std::declval<error_code&>()), std::declval<boost::optional<std::pair< typename T::writer::const_buffers_type, bool>>&>() = - std::declval<typename T::writer>().get(std::declval<error_code&>()), - (void)0)>> : std::integral_constant<bool, + std::declval<typename T::writer>().get(std::declval<error_code&>()) + )>> : std::integral_constant<bool, boost::asio::is_const_buffer_sequence< typename T::writer::const_buffers_type>::value && ( (std::is_constructible<typename T::writer, @@ -95,16 +95,48 @@ struct is_body_writer<T, beast::detail::void_t< typename T::value_type&>::value && std::is_constructible<typename T::writer, header<false, detail::fields_model>&, - typename T::value_type&>::value) || - // Deprecated BodyWriter Concept (v1.66) - (std::is_constructible<typename T::writer, - message<true, T, detail::fields_model>&>::value && - std::is_constructible<typename T::writer, - message<false, T, detail::fields_model>&>::value) + typename T::value_type&>::value) ) > {}; #endif +/** Returns true if the writer for a @b Body mutates the body container. +*/ +#if BOOST_BEAST_DOXYGEN +template<class T> +struct is_mutable_body_writer : std::integral_constant<bool, ...> {}; +#else +template<class T, class = void> +struct is_mutable_body_writer : std::false_type {}; + +template<class T> +struct is_mutable_body_writer<T, beast::detail::void_t< + typename T::writer, + typename T::writer::const_buffers_type, + decltype( + std::declval<typename T::writer&>().init(std::declval<error_code&>()), + std::declval<boost::optional<std::pair< + typename T::writer::const_buffers_type, bool>>&>() = + std::declval<typename T::writer>().get(std::declval<error_code&>()) + )>> : std::integral_constant<bool, + boost::asio::is_const_buffer_sequence< + typename T::writer::const_buffers_type>::value && (( + std::is_constructible<typename T::writer, + header<true, detail::fields_model>&, + typename T::value_type&>::value && + std::is_constructible<typename T::writer, + header<false, detail::fields_model>&, + typename T::value_type&>::value && + ! std::is_constructible<typename T::writer, + header<true, detail::fields_model> const&, + typename T::value_type const&>::value && + ! std::is_constructible<typename T::writer, + header<false, detail::fields_model> const&, + typename T::value_type const&>::value + )) + >{}; +#endif + /** Determine if a @b Body type has a reader. This metafunction is equivalent to `std::true_type` if: @@ -142,19 +174,14 @@ struct is_body_reader<T, beast::detail::void_t<decltype( std::declval<boost::asio::const_buffer>(), std::declval<error_code&>()), std::declval<typename T::reader&>().finish( - std::declval<error_code&>()), - (void)0)>> : std::integral_constant<bool, + std::declval<error_code&>()) + )>> : std::integral_constant<bool, (std::is_constructible<typename T::reader, header<true, detail::fields_model>&, typename T::value_type&>::value && std::is_constructible<typename T::reader, header<false,detail::fields_model>&, - typename T::value_type&>::value) || - // Deprecated BodyReader Concept (v1.66) - (std::is_constructible<typename T::reader, - message<true, T, detail::fields_model>&>::value && - std::is_constructible<typename T::reader, - message<false, T, detail::fields_model>&>::value) + typename T::value_type&>::value) > { }; |