diff --git a/CHANGELOG.md b/CHANGELOG.md index f2a8e174..716d767b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ Version 132: * Tidy up project folders in CMakeLists.txt * Rename Cmake variables for clarity +* Add ref-qualified overloads for message::body -------------------------------------------------------------------------------- diff --git a/doc/images/message.png b/doc/images/message.png index 99f8a50e..f27b6813 100644 Binary files a/doc/images/message.png and b/doc/images/message.png differ diff --git a/doc/qbk/04_http/02_message.qbk b/doc/qbk/04_http/02_message.qbk index ecefd366..b4e5574a 100644 --- a/doc/qbk/04_http/02_message.qbk +++ b/doc/qbk/04_http/02_message.qbk @@ -106,7 +106,7 @@ member functions of `Fields`. This diagram shows the inheritance relationship between header and message, along with some of the notable differences in members in each partial specialization: -[$beast/images/message.png [width 730px] [height 410px]] +[$beast/images/message.png [width 730px] [height 459px]] [heading:body Body Types] diff --git a/include/boost/beast/http/message.hpp b/include/boost/beast/http/message.hpp index 51020956..b6912f35 100644 --- a/include/boost/beast/http/message.hpp +++ b/include/boost/beast/http/message.hpp @@ -849,7 +849,7 @@ struct message #else detail::value_type_t
& #endif - body() noexcept + body()& noexcept { return this->member(); } @@ -860,11 +860,33 @@ struct message #else detail::value_type_t const& #endif - body() const noexcept + body() const& noexcept { return this->member(); } + /// Returns the body +#if BOOST_BEAST_DOXYGEN || ! defined(BOOST_MSVC) + typename body_type::value_type&& +#else + detail::value_type_t&& +#endif + body()&& noexcept + { + return std::move(this->member()); + } + + /// Returns the body +#if BOOST_BEAST_DOXYGEN || ! defined(BOOST_MSVC) + typename body_type::value_type const&& +#else + detail::value_type_t const&& +#endif + body() const&& noexcept + { + return std::move(this->member()); + } + private: static_assert(is_body::value, "Body requirements not met"); diff --git a/test/beast/http/message.cpp b/test/beast/http/message.cpp index 2094829e..39b702ac 100644 --- a/test/beast/http/message.cpp +++ b/test/beast/http/message.cpp @@ -273,6 +273,34 @@ public: } } + void + testBody() + { + { + auto f = [](empty_body::value_type&){}; + request