summaryrefslogtreecommitdiff
path: root/boost/beast/http/type_traits.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/http/type_traits.hpp')
-rw-r--r--boost/beast/http/type_traits.hpp59
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)
>
{
};