46 lines
1.7 KiB
Diff
46 lines
1.7 KiB
Diff
Allow hashing of enums.
|
|
Fixes errors like
|
|
|
|
/opt/poky/1.3.0-1/sysroots/i586-poky-linux/usr/include/boost/functional/hash/extensions.hpp:257:34: error: no matching function for call to 'hash_value(const myspace::idx&)'
|
|
|
|
Upstream-Status: Pending
|
|
Singed-off-by: Khem Raj <raj.khem@gmail.com>
|
|
|
|
Index: boost_1_51_0/boost/functional/hash/hash.hpp
|
|
===================================================================
|
|
--- boost_1_51_0.orig/boost/functional/hash/hash.hpp 2012-07-15 16:28:30.000000000 -0700
|
|
+++ boost_1_51_0/boost/functional/hash/hash.hpp 2012-09-26 14:00:57.738364002 -0700
|
|
@@ -15,6 +15,8 @@
|
|
#include <boost/functional/hash/detail/hash_float.hpp>
|
|
#include <string>
|
|
#include <boost/limits.hpp>
|
|
+#include <boost/type_traits/is_enum.hpp>
|
|
+#include <boost/utility/enable_if.hpp>
|
|
|
|
#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
|
|
#include <boost/type_traits/is_pointer.hpp>
|
|
@@ -89,6 +91,9 @@
|
|
typename boost::hash_detail::long_numbers<T>::type hash_value(T);
|
|
template <typename T>
|
|
typename boost::hash_detail::ulong_numbers<T>::type hash_value(T);
|
|
+ template <typename T>
|
|
+ typename boost::enable_if<boost::is_enum<T>, std::size_t>::type
|
|
+ hash_value(T);
|
|
|
|
#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
|
|
template <class T> std::size_t hash_value(T* const&);
|
|
@@ -178,7 +183,12 @@
|
|
{
|
|
return hash_detail::hash_value_unsigned(v);
|
|
}
|
|
-
|
|
+ template <typename T>
|
|
+ typename boost::enable_if<boost::is_enum<T>, std::size_t>::type
|
|
+ hash_value(T v)
|
|
+ {
|
|
+ return static_cast<std::size_t>(v);
|
|
+ }
|
|
// Implementation by Alberto Barbati and Dave Harris.
|
|
#if !BOOST_WORKAROUND(__DMC__, <= 0x848)
|
|
template <class T> std::size_t hash_value(T* const& v)
|