diff --git a/CHANGELOG.md b/CHANGELOG.md index fd04c35b58..e335e712ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ 1.0.0-b21 * Add WebSocket permessage-deflate extension support +* Fix message constructor and special members -------------------------------------------------------------------------------- diff --git a/include/beast/http/message.hpp b/include/beast/http/message.hpp index ebe1723841..007b48746d 100644 --- a/include/beast/http/message.hpp +++ b/include/beast/http/message.hpp @@ -246,6 +246,18 @@ struct message : header /// Default constructor message() = default; + /// Move constructor + message(message&&) = default; + + /// Copy constructor + message(message const&) = default; + + /// Move assignment + message& operator=(message&&) = default; + + /// Copy assignment + message& operator=(message const&) = default; + /** Construct a message from a header. Additional arguments, if any, are forwarded to @@ -281,8 +293,9 @@ struct message : header */ template::type, base_type>::value> + , class = typename std::enable_if< + ! std::is_convertible::type, base_type>::value>::type #endif > explicit @@ -303,7 +316,7 @@ struct message : header template::type, base_type>::value> + typename std::decay::type, base_type>::value>::type #endif > message(U&& u, V&& v) diff --git a/test/http/message.cpp b/test/http/message.cpp index d5db86e08e..47216b236d 100644 --- a/test/http/message.cpp +++ b/test/http/message.cpp @@ -278,6 +278,19 @@ class message_test : public beast::unit_test::suite BEAST_EXPECT(m2.fields.exists("h")); } + void + testSpecialMembers() + { + response r1; + response r2{r1}; + response r3{std::move(r2)}; + r2 = r3; + r1 = std::move(r2); + [r1]() + { + }(); + } + void run() override { testMessage(); @@ -285,6 +298,7 @@ class message_test : public beast::unit_test::suite testFreeFunctions(); testPrepare(); testSwap(); + testSpecialMembers(); } };