diff --git a/websocketpp/endpoint.hpp b/websocketpp/endpoint.hpp
index c124b1d..177bda6 100644
--- a/websocketpp/endpoint.hpp
+++ b/websocketpp/endpoint.hpp
@@ -109,26 +109,26 @@ public:
 
 
     /// Destructor
-    ~endpoint<connection,config>() {}
+    ~endpoint() {}
 
     #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
         // no copy constructor because endpoints are not copyable
         endpoint(endpoint &) = delete;
-    
+
         // no copy assignment operator because endpoints are not copyable
         endpoint & operator=(endpoint const &) = delete;
     #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
 
     #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_
         /// Move constructor
-        endpoint(endpoint && o) 
+        endpoint(endpoint && o)
          : config::transport_type(std::move(o))
          , config::endpoint_base(std::move(o))
          , m_alog(std::move(o.m_alog))
          , m_elog(std::move(o.m_elog))
          , m_user_agent(std::move(o.m_user_agent))
          , m_open_handler(std::move(o.m_open_handler))
-         
+
          , m_close_handler(std::move(o.m_close_handler))
          , m_fail_handler(std::move(o.m_fail_handler))
          , m_ping_handler(std::move(o.m_ping_handler))
@@ -146,7 +146,7 @@ public:
          , m_max_http_body_size(o.m_max_http_body_size)
 
          , m_rng(std::move(o.m_rng))
-         , m_is_server(o.m_is_server)         
+         , m_is_server(o.m_is_server)
         {}
 
     #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
@@ -403,9 +403,9 @@ public:
 
     /// Get default maximum message size
     /**
-     * Get the default maximum message size that will be used for new 
+     * Get the default maximum message size that will be used for new
      * connections created by this endpoint. The maximum message size determines
-     * the point at which the connection will fail a connection with the 
+     * the point at which the connection will fail a connection with the
      * message_too_big protocol error.
      *
      * The default is set by the max_message_size value from the template config
@@ -415,10 +415,10 @@ public:
     size_t get_max_message_size() const {
         return m_max_message_size;
     }
-    
+
     /// Set default maximum message size
     /**
-     * Set the default maximum message size that will be used for new 
+     * Set the default maximum message size that will be used for new
      * connections created by this endpoint. Maximum message size determines the
      * point at which the connection will fail a connection with the
      * message_too_big protocol error.
@@ -449,7 +449,7 @@ public:
     size_t get_max_http_body_size() const {
         return m_max_http_body_size;
     }
-    
+
     /// Set maximum HTTP message body size
     /**
      * Set maximum HTTP message body size. Maximum message body size determines
@@ -484,32 +484,32 @@ public:
 
     /// Pause reading of new data (exception free)
     /**
-     * Signals to the connection to halt reading of new data. While reading is 
+     * Signals to the connection to halt reading of new data. While reading is
      * paused, the connection will stop reading from its associated socket. In
      * turn this will result in TCP based flow control kicking in and slowing
      * data flow from the remote endpoint.
      *
-     * This is useful for applications that push new requests to a queue to be 
+     * This is useful for applications that push new requests to a queue to be
      * processed by another thread and need a way to signal when their request
      * queue is full without blocking the network processing thread.
      *
      * Use `resume_reading()` to resume.
      *
      * If supported by the transport this is done asynchronously. As such
-     * reading may not stop until the current read operation completes. 
+     * reading may not stop until the current read operation completes.
      * Typically you can expect to receive no more bytes after initiating a read
      * pause than the size of the read buffer.
      *
      * If reading is paused for this connection already nothing is changed.
      */
     void pause_reading(connection_hdl hdl, lib::error_code & ec);
-    
+
     /// Pause reading of new data
     void pause_reading(connection_hdl hdl);
 
     /// Resume reading of new data (exception free)
     /**
-     * Signals to the connection to resume reading of new data after it was 
+     * Signals to the connection to resume reading of new data after it was
      * paused by `pause_reading()`.
      *
      * If reading is not paused for this connection already nothing is changed.
@@ -533,7 +533,7 @@ public:
      * @param ec A status code, zero on success, non-zero otherwise
      */
     void send_http_response(connection_hdl hdl, lib::error_code & ec);
-        
+
     /// Send deferred HTTP Response (exception free)
     /**
      * Sends an http response to an HTTP connection that was deferred. This will
diff --git a/websocketpp/logger/basic.hpp b/websocketpp/logger/basic.hpp
index 8451413..7dd8684 100644
--- a/websocketpp/logger/basic.hpp
+++ b/websocketpp/logger/basic.hpp
@@ -58,46 +58,46 @@ namespace log {
 template <typename concurrency, typename names>
 class basic {
 public:
-    basic<concurrency,names>(channel_type_hint::value h =
+    basic(channel_type_hint::value h =
         channel_type_hint::access)
       : m_static_channels(0xffffffff)
       , m_dynamic_channels(0)
       , m_out(h == channel_type_hint::error ? &std::cerr : &std::cout) {}
 
-    basic<concurrency,names>(std::ostream * out)
+    basic(std::ostream * out)
       : m_static_channels(0xffffffff)
       , m_dynamic_channels(0)
       , m_out(out) {}
 
-    basic<concurrency,names>(level c, channel_type_hint::value h =
+    basic(level c, channel_type_hint::value h =
         channel_type_hint::access)
       : m_static_channels(c)
       , m_dynamic_channels(0)
       , m_out(h == channel_type_hint::error ? &std::cerr : &std::cout) {}
 
-    basic<concurrency,names>(level c, std::ostream * out)
+    basic(level c, std::ostream * out)
       : m_static_channels(c)
       , m_dynamic_channels(0)
       , m_out(out) {}
 
     /// Destructor
-    ~basic<concurrency,names>() {}
+    ~basic() {}
 
     /// Copy constructor
-    basic<concurrency,names>(basic<concurrency,names> const & other)
+    basic(basic<concurrency,names> const & other)
      : m_static_channels(other.m_static_channels)
      , m_dynamic_channels(other.m_dynamic_channels)
      , m_out(other.m_out)
     {}
-    
+
 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
     // no copy assignment operator because of const member variables
-    basic<concurrency,names> & operator=(basic<concurrency,names> const &) = delete;
+    basic & operator=(basic<concurrency,names> const &) = delete;
 #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
 
 #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_
     /// Move constructor
-    basic<concurrency,names>(basic<concurrency,names> && other)
+    basic(basic<concurrency,names> && other)
      : m_static_channels(other.m_static_channels)
      , m_dynamic_channels(other.m_dynamic_channels)
      , m_out(other.m_out)
@@ -105,7 +105,7 @@ public:
 
 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
     // no move assignment operator because of const member variables
-    basic<concurrency,names> & operator=(basic<concurrency,names> &&) = delete;
+    basic & operator=(basic<concurrency,names> &&) = delete;
 #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
 
 #endif // _WEBSOCKETPP_MOVE_SEMANTICS_
diff --git a/websocketpp/roles/server_endpoint.hpp b/websocketpp/roles/server_endpoint.hpp
index 9cc652f..a96471b 100644
--- a/websocketpp/roles/server_endpoint.hpp
+++ b/websocketpp/roles/server_endpoint.hpp
@@ -72,23 +72,23 @@ public:
     }
 
     /// Destructor
-    ~server<config>() {}
+    ~server() {}
 
 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
     // no copy constructor because endpoints are not copyable
-    server<config>(server<config> &) = delete;
+    server(server<config> &) = delete;
 
     // no copy assignment operator because endpoints are not copyable
-    server<config> & operator=(server<config> const &) = delete;
+    server & operator=(server<config> const &) = delete;
 #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
 
 #ifdef _WEBSOCKETPP_MOVE_SEMANTICS_
     /// Move constructor
-    server<config>(server<config> && o) : endpoint<connection<config>,config>(std::move(o)) {}
+    server(server<config> && o) : endpoint<connection<config>,config>(std::move(o)) {}
 
 #ifdef _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
     // no move assignment operator because of const member variables
-    server<config> & operator=(server<config> &&) = delete;
+    server & operator=(server<config> &&) = delete;
 #endif // _WEBSOCKETPP_DEFAULT_DELETE_FUNCTIONS_
 
 #endif // _WEBSOCKETPP_MOVE_SEMANTICS_
@@ -123,7 +123,7 @@ public:
             ec = error::make_error_code(error::async_accept_not_listening);
             return;
         }
-        
+
         ec = lib::error_code();
         connection_ptr con = get_connection();
 
