File indexing completed on 2025-07-09 08:06:33
0001
0002
0003
0004
0005 #ifndef BOOST_HASH_IS_RANGE_HPP_INCLUDED
0006 #define BOOST_HASH_IS_RANGE_HPP_INCLUDED
0007
0008 #include <iterator>
0009 #include <type_traits>
0010
0011 namespace boost
0012 {
0013
0014 namespace hash_detail
0015 {
0016
0017 template<class T> struct iterator_traits: std::iterator_traits<T> {};
0018 template<> struct iterator_traits< void* > {};
0019 template<> struct iterator_traits< void const* > {};
0020
0021 template<class T, class It>
0022 std::integral_constant< bool, !std::is_same<typename std::remove_cv<T>::type, typename iterator_traits<It>::value_type>::value >
0023 is_range_check( It first, It last );
0024
0025 template<class T> decltype( is_range_check<T>( std::declval<T const&>().begin(), std::declval<T const&>().end() ) ) is_range_( int );
0026 template<class T> std::false_type is_range_( ... );
0027
0028 }
0029
0030 namespace container_hash
0031 {
0032
0033 template<class T> struct is_range: decltype( hash_detail::is_range_<T>( 0 ) )
0034 {
0035 };
0036
0037 }
0038
0039 }
0040
0041 #endif