forked from boostorg/container_hash
Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5ba74cd3a9 | |||
| c14d3a1e2b | |||
| a3cac265b1 |
+1
-1
@@ -6,4 +6,4 @@
|
|||||||
run books.cpp ;
|
run books.cpp ;
|
||||||
run point.cpp ;
|
run point.cpp ;
|
||||||
run portable.cpp ;
|
run portable.cpp ;
|
||||||
run template.cpp ;
|
run template.cpp : : : <toolset>msvc-8.0:<build>no ;
|
||||||
|
|||||||
@@ -163,6 +163,20 @@ namespace boost
|
|||||||
typename boost::enable_if_<boost::is_enum<T>::value, std::size_t>::type
|
typename boost::enable_if_<boost::is_enum<T>::value, std::size_t>::type
|
||||||
hash_value( T v )
|
hash_value( T v )
|
||||||
{
|
{
|
||||||
|
// This should in principle return the equivalent of
|
||||||
|
//
|
||||||
|
// boost::hash_value( to_underlying(v) );
|
||||||
|
//
|
||||||
|
// However, the C++03 implementation of underlying_type,
|
||||||
|
//
|
||||||
|
// conditional<is_signed<T>, make_signed<T>, make_unsigned<T>>::type::type
|
||||||
|
//
|
||||||
|
// generates a legitimate -Wconversion warning in is_signed,
|
||||||
|
// because -1 is not a valid enum value when all the enumerators
|
||||||
|
// are nonnegative.
|
||||||
|
//
|
||||||
|
// So the legacy implementation will have to do for now.
|
||||||
|
|
||||||
return static_cast<std::size_t>( v );
|
return static_cast<std::size_t>( v );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -330,12 +344,11 @@ namespace boost
|
|||||||
|
|
||||||
// pointer types
|
// pointer types
|
||||||
|
|
||||||
// Implementation by Alberto Barbati and Dave Harris.
|
// `x + (x >> 3)` adjustment by Alberto Barbati and Dave Harris.
|
||||||
template <class T> std::size_t hash_value( T* const& v )
|
template <class T> std::size_t hash_value( T* const& v )
|
||||||
{
|
{
|
||||||
std::size_t x = static_cast<std::size_t>(
|
boost::uintptr_t x = reinterpret_cast<boost::uintptr_t>( v );
|
||||||
reinterpret_cast<boost::uintptr_t>(v));
|
return boost::hash_value( x + (x >> 3) );
|
||||||
return x + (x >> 3);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// array types
|
// array types
|
||||||
|
|||||||
Reference in New Issue
Block a user