diff --git a/beast/net/IPAddress.h b/beast/net/IPAddress.h index fb91f82e98..c4b6c3941c 100644 --- a/beast/net/IPAddress.h +++ b/beast/net/IPAddress.h @@ -27,6 +27,18 @@ #include "../CStdInt.h" #include "../mpl/IfCond.h" +namespace std { + +template +struct hash; + +//template <> +//struct hash ; + +} + +//------------------------------------------------------------------------------ + namespace beast { /** Represents an IP address (v4 or v6) and port combination. */ @@ -309,19 +321,7 @@ public: operator std::string () const; /** @} */ - struct hasher - { - std::size_t operator() (IPAddress const& value) const - { - std::size_t hash (0); - if (value.isV4()) - hash = V4::hasher() (value.v4()); - else if (value.isV6()) - hash = V6::hasher() (value.v6()); - hash += value.port(); - return hash; - } - }; + typedef std::hash hasher; struct key_equal; @@ -374,4 +374,28 @@ struct IPAddress::key_equal } +//------------------------------------------------------------------------------ + +namespace std { + +template +struct hash; + +template <> +struct hash +{ + std::size_t operator() (beast::IPAddress const& value) const + { + std::size_t hash (0); + if (value.isV4()) + hash = beast::IPAddress::V4::hasher() (value.v4()); + else if (value.isV6()) + hash = beast::IPAddress::V6::hasher() (value.v6()); + hash += value.port(); + return hash; + } +}; + +} + #endif