Enable cppcoreguidelines-special-member-functions checks

Part of enforcing cpp core guidelines involves explicitly including all
constructors required on a non-trivial class.  We were missing quite a
few.  In all cases, the copy/move/and operator= methods are simply
deleted.

Signed-off-by: Ed Tanous <edtanous@google.com>
Change-Id: Ie8d6e8bf2bc311fa21a9ae48b0d61ee5c1940999
diff --git a/http/app.hpp b/http/app.hpp
index b4ccd95..8dcec48 100644
--- a/http/app.hpp
+++ b/http/app.hpp
@@ -44,6 +44,11 @@
         this->stop();
     }
 
+    App(const App&) = delete;
+    App(App&&) = delete;
+    App& operator=(const App&) = delete;
+    App& operator=(const App&&) = delete;
+
     template <typename Adaptor>
     void handleUpgrade(const Request& req, Response& res, Adaptor&& adaptor)
     {
diff --git a/http/http_connection.hpp b/http/http_connection.hpp
index 6de2bf7..77886c5 100644
--- a/http/http_connection.hpp
+++ b/http/http_connection.hpp
@@ -81,6 +81,11 @@
                          << connectionCount;
     }
 
+    Connection(const Connection&) = delete;
+    Connection(Connection&&) = delete;
+    Connection& operator=(const Connection&) = delete;
+    Connection& operator=(Connection&&) = delete;
+
     void prepareMutualTls()
     {
         std::error_code error;
diff --git a/http/http_request.hpp b/http/http_request.hpp
index 4567314..be1c2a2 100644
--- a/http/http_request.hpp
+++ b/http/http_request.hpp
@@ -46,7 +46,10 @@
     }
 
     Request(const Request&) = delete;
+    Request(const Request&&) = delete;
     Request& operator=(const Request&) = delete;
+    Request& operator=(const Request&&) = delete;
+    ~Request() = default;
 
     boost::beast::http::verb method() const
     {
diff --git a/http/http_response.hpp b/http/http_response.hpp
index a983d4a..08b76f2 100644
--- a/http/http_response.hpp
+++ b/http/http_response.hpp
@@ -39,6 +39,10 @@
     Response() : stringResponse(response_type{})
     {}
 
+    ~Response() = default;
+
+    Response(const Response&) = delete;
+    Response(Response&&) = delete;
     Response& operator=(const Response& r) = delete;
 
     Response& operator=(Response&& r) noexcept
diff --git a/http/logging.hpp b/http/logging.hpp
index 0121729..e2bfdb1 100644
--- a/http/logging.hpp
+++ b/http/logging.hpp
@@ -62,6 +62,11 @@
         }
     }
 
+    Logger(const Logger&) = delete;
+    Logger(Logger&&) = delete;
+    Logger& operator=(const Logger&) = delete;
+    Logger& operator=(const Logger&&) = delete;
+
     //
     template <typename T>
     Logger& operator<<([[maybe_unused]] T const& value)
diff --git a/http/routing.hpp b/http/routing.hpp
index 06f2a09..a7c0ced 100644
--- a/http/routing.hpp
+++ b/http/routing.hpp
@@ -34,6 +34,11 @@
 
     virtual ~BaseRule() = default;
 
+    BaseRule(const BaseRule&) = delete;
+    BaseRule(BaseRule&&) = delete;
+    BaseRule& operator=(const BaseRule&) = delete;
+    BaseRule& operator=(const BaseRule&&) = delete;
+
     virtual void validate() = 0;
     std::unique_ptr<BaseRule> upgrade()
     {
diff --git a/http/websocket.hpp b/http/websocket.hpp
index 30a9b9f..74bce58 100644
--- a/http/websocket.hpp
+++ b/http/websocket.hpp
@@ -29,6 +29,11 @@
         req(reqIn.req), userName{std::move(user)}, userdataPtr(nullptr)
     {}
 
+    Connection(const Connection&) = delete;
+    Connection(Connection&&) = delete;
+    Connection& operator=(const Connection&) = delete;
+    Connection& operator=(const Connection&&) = delete;
+
     virtual void sendBinary(const std::string_view msg) = 0;
     virtual void sendBinary(std::string&& msg) = 0;
     virtual void sendText(const std::string_view msg) = 0;