Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <typename Outer>
- std::size_t hash_value(const Outer& t) {
- return accumulate<std::size_t>(t, [&](const auto& value, std::size_t hash) {
- using T = std::decay_t<decltype(value)>;
- if constexpr(std::is_arithmetic_v<T> || std::is_enum_v<T>) {
- return details::hash_combine(hash, std::hash<T>{}(value));
- } else if constexpr(details::is_optional_v<T> || details::is_pointer_v<T>) {
- return details::hash_combine(hash, value ? 1 : 0);
- } else if constexpr(details::is_variant_v<T>) {
- return details::hash_combine(hash, value.index());
- } else if constexpr(details::is_range_v<T>) {
- return details::hash_combine(hash, value.size());
- } else {
- return hash;
- }
- });
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement