Blame view

3rdparty/boost_1_81_0/boost/concept/detail/msvc.hpp 2.7 KB
63e88f80   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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
  // Copyright David Abrahams 2006. Distributed under 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)
  #ifndef BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
  # define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
  
  # include <boost/preprocessor/cat.hpp>
  # include <boost/concept/detail/backward_compatibility.hpp>
  # include <boost/config.hpp>
  
  # ifdef BOOST_OLD_CONCEPT_SUPPORT
  #  include <boost/concept/detail/has_constraints.hpp>
  #  include <boost/type_traits/conditional.hpp>
  # endif
  
  # ifdef BOOST_MSVC
  #  pragma warning(push)
  #  pragma warning(disable:4100)
  # endif
  
  namespace boost { namespace concepts {
  
  
  template <class Model>
  struct check
  {
      virtual void failed(Model* x)
      {
          x->~Model();
      }
  };
  
  # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
  struct failed {};
  template <class Model>
  struct check<failed ************ Model::************>
  {
      virtual void failed(Model* x)
      {
          x->~Model();
      }
  };
  # endif
  
  # ifdef BOOST_OLD_CONCEPT_SUPPORT
    
  namespace detail
  {
    // No need for a virtual function here, since evaluating
    // not_satisfied below will have already instantiated the
    // constraints() member.
    struct constraint {};
  }
  
  template <class Model>
  struct require
    : boost::conditional<
          not_satisfied<Model>::value
        , detail::constraint
  # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
        , check<Model>
  # else
        , check<failed ************ Model::************>
  # endif 
          >::type
  {};
        
  # else
    
  template <class Model>
  struct require
  # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
      : check<Model>
  # else
      : check<failed ************ Model::************>
  # endif 
  {};
    
  # endif
      
  # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
  
  //
  // The iterator library sees some really strange errors unless we
  // do things this way.
  //
  template <class Model>
  struct require<void(*)(Model)>
  {
      virtual void failed(Model*)
      {
          require<Model>();
      }
  };
  
  # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )      \
  enum                                                \
  {                                                   \
      BOOST_PP_CAT(boost_concept_check,__LINE__) =    \
      sizeof(::boost::concepts::require<ModelFnPtr>)    \
  }
    
  # else // Not vc-7.1
    
  template <class Model>
  require<Model>
  require_(void(*)(Model));
    
  # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )          \
  enum                                                    \
  {                                                       \
      BOOST_PP_CAT(boost_concept_check,__LINE__) =        \
        sizeof(::boost::concepts::require_((ModelFnPtr)0)) \
  }
    
  # endif
  }}
  
  # ifdef BOOST_MSVC
  #  pragma warning(pop)
  # endif
  
  #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP