diff --git a/include/opendht/network_engine.h b/include/opendht/network_engine.h
index b2a250c6b66c34b2739856112a6f63e318915c3e..daa48e3f0d495be89ab68ec9a54ffad20d406078 100644
--- a/include/opendht/network_engine.h
+++ b/include/opendht/network_engine.h
@@ -480,7 +480,7 @@ private:
      * first 64 bits in IPv6.
      */
     struct cmpSockAddr {
-        bool operator()(const SockAddr& a, const SockAddr& b) {
+        bool operator()(const SockAddr& a, const SockAddr& b) const {
             if (a.second != b.second)
                 return a.second < b.second;
             socklen_t start, len;
diff --git a/include/opendht/sockaddr.h b/include/opendht/sockaddr.h
index f1ea58549ada8dc84fad1b27e4fd213f23d9ffa8..d7de428f4f300939d4f76adbc53bc620364af264 100644
--- a/include/opendht/sockaddr.h
+++ b/include/opendht/sockaddr.h
@@ -32,8 +32,6 @@ std::string print_addr(const sockaddr_storage& ss, socklen_t sslen);
 
 struct SockAddr : public std::pair<sockaddr_storage, socklen_t> {
 public:
-    using std::pair<sockaddr_storage, socklen_t>::pair;
-
     SockAddr() : pair<sockaddr_storage, socklen_t>::pair({},0) {}
     SockAddr(const SockAddr& o) : pair<sockaddr_storage, socklen_t>::pair({},o.second) {
         std::copy_n((uint8_t*)&o.first, o.second, (uint8_t*)&first);
@@ -43,6 +41,7 @@ public:
             throw std::runtime_error("Socket address length is too large");
         std::copy_n((uint8_t*)sa, len, (uint8_t*)&first);
     }
+    SockAddr(const sockaddr_storage& ss, socklen_t len) : SockAddr((const sockaddr*)&ss, len) {}
 
     bool operator<(const SockAddr& o) const {
         if (second != o.second)
diff --git a/include/opendht/value.h b/include/opendht/value.h
index f9b5f331e350dd5846bb91828934b842ea850862..485af6adc8379ba363b9239d45540349acc8b0df 100644
--- a/include/opendht/value.h
+++ b/include/opendht/value.h
@@ -131,8 +131,10 @@ struct Value
     static const constexpr Id INVALID_ID {0};
 
     class Filter : public std::function<bool(const Value&)> {
-        using std::function<bool(const Value&)>::function;
     public:
+        Filter() {}
+        template<typename Functor> Filter(Functor&& f) : std::function<bool(const Value&)>::function(std::forward<Functor>(f)) {}
+
         Filter chain(Filter&& f2) {
             auto f1 = *this;
             return chain(std::move(f1), std::move(f2));