Skip to content

Commit

Permalink
[Hashable] hana::integral_constant with an enum value implements Hash…
Browse files Browse the repository at this point in the history
…able
  • Loading branch information
Dwarfobserver committed Feb 22, 2019
1 parent 4536973 commit 64a9a40
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 0 deletions.
10 changes: 10 additions & 0 deletions include/boost/hana/hash.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,16 @@ BOOST_HANA_NAMESPACE_BEGIN
}
};

template <typename T>
struct hash_integral_helper<T,
typename std::enable_if<std::is_enum<T>::value>::type
> {
template <typename X>
static constexpr auto apply(X const&) {
return hana::type_c<X>;
}
};

template <>
struct hash_integral_helper<bool> {
template <typename X>
Expand Down
22 changes: 22 additions & 0 deletions test/integral_constant/hash.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -107,4 +107,26 @@ int main() {
hana::type_c<hana::false_>
));
}

// Enumeration constants should hash to themselves
{
enum enum_1 { zero };
enum class enum_2 { zero };
enum class enum_3 : unsigned { zero };

BOOST_HANA_CONSTANT_ASSERT(hana::equal(
hana::hash(hana::integral_c<enum_1, zero>),
hana::type_c<hana::integral_constant<enum_1, zero>>
));

BOOST_HANA_CONSTANT_ASSERT(hana::equal(
hana::hash(hana::integral_c<enum_2, enum_2::zero>),
hana::type_c<hana::integral_constant<enum_2, enum_2::zero>>
));

BOOST_HANA_CONSTANT_ASSERT(hana::equal(
hana::hash(hana::integral_c<enum_3, enum_3::zero>),
hana::type_c<hana::integral_constant<enum_3, enum_3::zero>>
));
}
}

0 comments on commit 64a9a40

Please sign in to comment.