5 #ifndef VCCC_VARIANT_HASH_HPP
6 #define VCCC_VARIANT_HASH_HPP
23 struct variant_hash_visitor {
24 template<
typename T, std::
size_t I>
25 constexpr std::size_t operator()(
const T& x, in_place_index_t<I>)
const {
30 constexpr std::size_t operator()(
const T& x, in_place_index_t<variant_npos>)
const {
35 template<
typename Variant,
bool Hashable >
36 struct variant_hash {};
38 template<
typename Variant>
39 struct variant_hash<Variant, true> {
40 std::size_t operator()(
const Variant& var)
const {
41 return variant_raw_visit(var.index(), var._base().union_, variant_hash_visitor{});
48 template<
typename... Ts>
49 struct std::hash<
vccc::variant<Ts...>>
50 : vccc::detail::variant_hash<
52 vccc::conjunction<vccc::is_invocable<std::hash<Ts>, const vccc::remove_cvref_t<Ts>&>...>::value
std::size_t FNV_1a(std::size_t value, const T &byte)
Definition: hash_array.hpp:72
Definition: directory.h:12