Blame view

3rdparty/boost_1_81_0/boost/ptr_container/nullable.hpp 2.18 KB
0b6a182c   Hu Chunming   添加无鉴权注册和注销
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  //
  // Boost.Pointer Container
  //
  //  Copyright Thorsten Ottosen 2003-2005. Use, modification and
  //  distribution is 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)
  //
  // For more information, see http://www.boost.org/libs/ptr_container/
  //
  
  
  #ifndef BOOST_INDIRECT_CONTAINER_NULLABLE_HPP
  #define BOOST_INDIRECT_CONTAINER_NULLABLE_HPP
  
  #if defined(_MSC_VER) && (_MSC_VER >= 1200)
  # pragma once
  #endif
  
  #include <boost/type_traits/detail/yes_no_type.hpp>
  #include <boost/type_traits/is_const.hpp>
  #include <boost/mpl/eval_if.hpp>
  #include <boost/mpl/identity.hpp>
  #include <boost/config.hpp>
  
  namespace boost
  {
      
      template< class T >
      struct nullable
      {
          typedef T type;
      };   
  
      namespace ptr_container_detail
      {
          template< class T >
          type_traits::yes_type is_nullable( const nullable<T>* );
  
          type_traits::no_type is_nullable( ... );        
      }
  
      template< class T >
      struct is_nullable
      {
      private:
              BOOST_STATIC_CONSTANT( T*, var );
      public:
  
  #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  
  #pragma warning(push)  
  #pragma warning(disable:6334)  
  #endif  
  
              BOOST_STATIC_CONSTANT(bool, value = sizeof( ptr_container_detail::is_nullable( var ) ) 
                                                  == sizeof( type_traits::yes_type ) );
  #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400)  
  #pragma warning(pop)  
  #endif  
              
      };
      
      template< class T >
      struct remove_nullable
      {
          typedef BOOST_DEDUCED_TYPENAME mpl::eval_if< is_nullable<T>,
                                                        T,
                                              mpl::identity<T> >::type
              type;
      };
  
      namespace ptr_container_detail
      {
          template< class T >
          struct void_ptr
          {
              typedef BOOST_DEDUCED_TYPENAME 
                  mpl::if_c< boost::is_const< 
                                BOOST_DEDUCED_TYPENAME boost::remove_nullable<T>::type >::value,
                             const void*, void* >::type type;                                                       
          };
      }
  }
  
  #endif