3
// Copyright Thorsten Ottosen 2003-2004. Use, modification and
4
// distribution is subject to the Boost Software License, Version
5
// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6
// http://www.boost.org/LICENSE_1_0.txt)
8
// For more information, see http://www.boost.org/libs/range/
11
#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP
12
#define BOOST_RANGE_DETAIL_SFINAE_HPP
14
#include <boost/range/config.hpp>
15
#include <boost/type_traits/is_array.hpp>
16
#include <boost/type_traits/detail/yes_no_type.hpp>
22
namespace range_detail
24
using type_traits::yes_type;
25
using type_traits::no_type;
27
//////////////////////////////////////////////////////////////////////
29
//////////////////////////////////////////////////////////////////////
31
yes_type is_string_impl( const char* const );
32
yes_type is_string_impl( const wchar_t* const );
33
no_type is_string_impl( ... );
35
template< std::size_t sz >
36
yes_type is_char_array_impl( char BOOST_RANGE_ARRAY_REF()[sz] );
37
template< std::size_t sz >
38
yes_type is_char_array_impl( const char BOOST_RANGE_ARRAY_REF()[sz] );
39
no_type is_char_array_impl( ... );
41
template< std::size_t sz >
42
yes_type is_wchar_t_array_impl( wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
43
template< std::size_t sz >
44
yes_type is_wchar_t_array_impl( const wchar_t BOOST_RANGE_ARRAY_REF()[sz] );
45
no_type is_wchar_t_array_impl( ... );
47
yes_type is_char_ptr_impl( char* const );
48
no_type is_char_ptr_impl( ... );
50
yes_type is_const_char_ptr_impl( const char* const );
51
no_type is_const_char_ptr_impl( ... );
53
yes_type is_wchar_t_ptr_impl( wchar_t* const );
54
no_type is_wchar_t_ptr_impl( ... );
56
yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );
57
no_type is_const_wchar_t_ptr_impl( ... );
59
//////////////////////////////////////////////////////////////////////
61
//////////////////////////////////////////////////////////////////////
63
template< typename Iterator >
64
yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );
65
no_type is_pair_impl( ... );
67
//////////////////////////////////////////////////////////////////////
69
//////////////////////////////////////////////////////////////////////
71
struct char_or_wchar_t_array_tag {};
73
} // namespace 'range_detail'
75
} // namespace 'boost'