From 133d926e2fdb1ecf2719dd6dc98742d849ce0dd2 Mon Sep 17 00:00:00 2001 From: Vinnie Falco Date: Sun, 20 Nov 2016 07:35:27 -0500 Subject: [PATCH] Fix message constructor and special members fix #196 --- CHANGELOG.md | 11 +++++++++++ include/beast/http/message.hpp | 19 ++++++++++++++++--- test/http/message.cpp | 14 ++++++++++++++ 3 files changed, 41 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0ac23dea..515988fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +1.0.0-b23 + +* Tune websocket echo server for performance +* Add file and line number to thrown exceptions +* Better logging in async echo server +* Add copy special members +* Fix message constructor and special members +* Travis CI improvements + +-------------------------------------------------------------------------------- + 1.0.0-b22 * Fix broken Intellisense diff --git a/include/beast/http/message.hpp b/include/beast/http/message.hpp index ebe17238..007b4874 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 d5db86e0..47216b23 100644 --- a/test/http/message.cpp +++ b/test/http/message.cpp @@ -278,6 +278,19 @@ public: 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 @@ public: testFreeFunctions(); testPrepare(); testSwap(); + testSpecialMembers(); } };