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));