File indexing completed on 2025-01-18 09:51:17
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #ifndef BOOST_RANGE_DETAIL_SFINAE_HPP
0012 #define BOOST_RANGE_DETAIL_SFINAE_HPP
0013
0014 #include <boost/range/config.hpp>
0015 #include <boost/type_traits/is_array.hpp>
0016 #include <boost/type_traits/detail/yes_no_type.hpp>
0017 #include <utility>
0018
0019
0020 namespace boost
0021 {
0022 namespace range_detail
0023 {
0024 using type_traits::yes_type;
0025 using type_traits::no_type;
0026
0027
0028
0029
0030
0031 yes_type is_string_impl( const char* const );
0032 yes_type is_string_impl( const wchar_t* const );
0033 no_type is_string_impl( ... );
0034
0035 template< std::size_t sz >
0036 yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );
0037 template< std::size_t sz >
0038 yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );
0039 no_type is_char_array_impl( ... );
0040
0041 template< std::size_t sz >
0042 yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
0043 template< std::size_t sz >
0044 yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
0045 no_type is_wchar_t_array_impl( ... );
0046
0047 yes_type is_char_ptr_impl( char* const );
0048 no_type is_char_ptr_impl( ... );
0049
0050 yes_type is_const_char_ptr_impl( const char* const );
0051 no_type is_const_char_ptr_impl( ... );
0052
0053 yes_type is_wchar_t_ptr_impl( wchar_t* const );
0054 no_type is_wchar_t_ptr_impl( ... );
0055
0056 yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );
0057 no_type is_const_wchar_t_ptr_impl( ... );
0058
0059
0060
0061
0062
0063 template< typename Iterator >
0064 yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );
0065 no_type is_pair_impl( ... );
0066
0067
0068
0069
0070
0071 struct char_or_wchar_t_array_tag {};
0072
0073 }
0074
0075 }
0076
0077 #endif