source: NonGTP/Boost/boost/range/detail/sfinae.hpp @ 857

Revision 857, 2.7 KB checked in by igarcia, 19 years ago (diff)
Line 
1// Boost.Range library
2//
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)
7//
8// For more information, see http://www.boost.org/libs/range/
9//
10
11#ifndef BOOST_RANGE_DETAIL_SFINAE_HPP
12#define BOOST_RANGE_DETAIL_SFINAE_HPP
13
14#include <boost/range/config.hpp>
15#include <boost/type_traits/is_array.hpp>
16#include <boost/type_traits/detail/yes_no_type.hpp>
17#include <utility>
18
19
20namespace boost
21{
22    namespace range_detail
23    {         
24        using type_traits::yes_type;
25        using type_traits::no_type;
26
27        //////////////////////////////////////////////////////////////////////
28        // string
29        //////////////////////////////////////////////////////////////////////
30       
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( ... );
34       
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( ... );
40       
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( ... );
46                                     
47        yes_type is_char_ptr_impl( char* const );
48        no_type  is_char_ptr_impl( ... );
49       
50        yes_type is_const_char_ptr_impl( const char* const );
51        no_type  is_const_char_ptr_impl( ... );
52
53        yes_type is_wchar_t_ptr_impl( wchar_t* const );
54        no_type  is_wchar_t_ptr_impl( ... );
55       
56        yes_type is_const_wchar_t_ptr_impl( const wchar_t* const );
57        no_type  is_const_wchar_t_ptr_impl( ... );
58       
59        //////////////////////////////////////////////////////////////////////
60        // pair
61        //////////////////////////////////////////////////////////////////////
62
63        template< typename Iterator >
64        yes_type is_pair_impl( const std::pair<Iterator,Iterator>* );
65        no_type  is_pair_impl( ... );
66
67        //////////////////////////////////////////////////////////////////////
68        // tags
69        //////////////////////////////////////////////////////////////////////
70
71        struct char_or_wchar_t_array_tag {};
72       
73    } // namespace 'range_detail'
74   
75} // namespace 'boost'
76
77#endif
Note: See TracBrowser for help on using the repository browser.