variant.h 519 B

1234567891011121314151617181920212223
  1. #pragma once
  2. #include "hash.h"
  3. #include <variant>
  4. template <class... Ts>
  5. struct THash<std::variant<Ts...>> {
  6. public:
  7. size_t operator()(const std::variant<Ts...>& v) const noexcept {
  8. return CombineHashes(
  9. IntHash(v.index()),
  10. v.valueless_by_exception() ? 0 : std::visit([](const auto& value) { return ComputeHash(value); }, v));
  11. }
  12. };
  13. template <>
  14. struct THash<std::monostate> {
  15. public:
  16. constexpr size_t operator()(std::monostate) const noexcept {
  17. return 1;
  18. }
  19. };