https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97773
--- Comment #2 from Janez Zemva <janezz55 at gmail dot com> --- #include <chrono> #include <functional> #include <string_view> #include <tuple> #include <type_traits> #include <unordered_map> template <typename T> struct hash : std::hash<T> { }; template <> struct hash<std::chrono::seconds> { auto operator()(std::chrono::seconds const cp) const noexcept { return std::hash<std::chrono::seconds::rep>()(cp.count()); } }; template <> struct hash<std::chrono::time_point<std::chrono::system_clock>> { auto operator()(std::chrono::time_point<std::chrono::system_clock> const tp) const noexcept { return std::hash<std::chrono::time_point<std::chrono::system_clock>::rep>()(tp.time_since_epoch().count()); } }; template <typename ...T> std::size_t hash_combine(T&& ...v) noexcept(noexcept( ((hash<std::remove_cvref_t<T>>()(std::declval<T>())), ...))) { auto seed{672807365}; ( ( seed ^= hash<std::remove_cvref_t<T>>()(std::forward<T>(v)) + 0x9e3779b9 + (seed << 6) + (seed >> 2) ), ... ); return seed; } template <typename ...T> struct hash<std::tuple<T...>> { auto operator()(std::tuple<T...> const& t) const { return std::apply(hash_combine<T const&...>, t); } }; int main() { std::unordered_map< std::tuple<std::chrono::seconds, std::chrono::time_point<std::chrono::system_clock>, std::string_view>, int, hash<std::tuple<std::chrono::seconds, std::chrono::time_point<std::chrono::system_clock>, std::string_view>> > lol; return lol.size(); }