#ifndef SPROUT_VARIANT_HASH_HPP #define SPROUT_VARIANT_HASH_HPP #include #include #include #include #include #include #include namespace sprout { namespace detail { class variant_hash_visitor : public sprout::static_visitor { public: template SPROUT_CONSTEXPR std::size_t operator()(T const& t) const { return sprout::to_hash(t); } }; } // namespace detail // // hash_value // template inline SPROUT_CONSTEXPR std::size_t hash_value(sprout::variant const& v) { return sprout::hash_combine( sprout::apply_visitor(sprout::detail::variant_hash_visitor(), v), v.which() ); } } // namespace sprout namespace std { #if defined(__clang__) # pragma clang diagnostic push # pragma clang diagnostic ignored "-Wmismatched-tags" #endif // // hash // template struct hash > : public sprout::hash > {}; #if defined(__clang__) # pragma clang diagnostic pop #endif } // namespace std #endif // #ifndef SPROUT_VARIANT_HASH_HPP