| // (C) Copyright John Maddock 2005. |
| // Use, modification and distribution are subject to the |
| // Boost Software License, Version 1.0. (See accompanying file |
| // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
| |
| #ifdef TEST_STD_HEADERS |
| #include <functional> |
| #else |
| #include <boost/tr1/functional.hpp> |
| #endif |
| |
| #include <string> |
| #include <boost/static_assert.hpp> |
| #include <boost/type_traits/is_same.hpp> |
| #include <boost/type_traits/is_base_of.hpp> |
| #include "verify_return.hpp" |
| |
| template <class T> |
| void check_hash(T t) |
| { |
| typedef std::tr1::hash<T> hash_type; |
| typedef typename hash_type::argument_type arg_type; |
| typedef typename hash_type::result_type result_type; |
| BOOST_STATIC_ASSERT((::boost::is_same<result_type, std::size_t>::value)); |
| BOOST_STATIC_ASSERT((::boost::is_same<arg_type, T>::value)); |
| BOOST_STATIC_ASSERT((::boost::is_base_of<std::unary_function<arg_type, result_type>, hash_type>::value)); |
| |
| hash_type h; |
| const hash_type& ch = h; |
| |
| verify_return_type(ch(t), std::size_t(0)); |
| } |
| |
| class UDT; |
| |
| int main() |
| { |
| check_hash(0); |
| check_hash(0u); |
| check_hash(0L); |
| check_hash(0uL); |
| check_hash(static_cast<short>(0)); |
| check_hash(static_cast<unsigned short>(0)); |
| check_hash(static_cast<signed char>(0)); |
| check_hash(static_cast<unsigned char>(0)); |
| check_hash(static_cast<char>(0)); |
| check_hash(static_cast<wchar_t>(0)); |
| check_hash(static_cast<bool>(0)); |
| check_hash(static_cast<float>(0)); |
| check_hash(static_cast<double>(0)); |
| check_hash(static_cast<long double>(0)); |
| check_hash(std::string("")); |
| check_hash(std::wstring(L"")); |
| check_hash(static_cast<UDT*>(0)); |
| check_hash(static_cast<const UDT*>(0)); |
| check_hash(static_cast<volatile UDT*>(0)); |
| check_hash(static_cast<const volatile UDT*>(0)); |
| return 0; |
| } |
| |