]> git.lyx.org Git - lyx.git/blob - 3rdparty/boost/boost/concept/detail/msvc.hpp
Update to boost 1.72
[lyx.git] / 3rdparty / boost / boost / concept / detail / msvc.hpp
1 // Copyright David Abrahams 2006. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 #ifndef BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
5 # define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
6
7 # include <boost/preprocessor/cat.hpp>
8 # include <boost/concept/detail/backward_compatibility.hpp>
9 # include <boost/config.hpp>
10
11 # ifdef BOOST_OLD_CONCEPT_SUPPORT
12 #  include <boost/concept/detail/has_constraints.hpp>
13 #  include <boost/type_traits/conditional.hpp>
14 # endif
15
16 # ifdef BOOST_MSVC
17 #  pragma warning(push)
18 #  pragma warning(disable:4100)
19 # endif
20
21 namespace boost { namespace concepts {
22
23
24 template <class Model>
25 struct check
26 {
27     virtual void failed(Model* x)
28     {
29         x->~Model();
30     }
31 };
32
33 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
34 struct failed {};
35 template <class Model>
36 struct check<failed ************ Model::************>
37 {
38     virtual void failed(Model* x)
39     {
40         x->~Model();
41     }
42 };
43 # endif
44
45 # ifdef BOOST_OLD_CONCEPT_SUPPORT
46   
47 namespace detail
48 {
49   // No need for a virtual function here, since evaluating
50   // not_satisfied below will have already instantiated the
51   // constraints() member.
52   struct constraint {};
53 }
54
55 template <class Model>
56 struct require
57   : boost::conditional<
58         not_satisfied<Model>::value
59       , detail::constraint
60 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
61       , check<Model>
62 # else
63       , check<failed ************ Model::************>
64 # endif 
65         >::type
66 {};
67       
68 # else
69   
70 template <class Model>
71 struct require
72 # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
73     : check<Model>
74 # else
75     : check<failed ************ Model::************>
76 # endif 
77 {};
78   
79 # endif
80     
81 # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
82
83 //
84 // The iterator library sees some really strange errors unless we
85 // do things this way.
86 //
87 template <class Model>
88 struct require<void(*)(Model)>
89 {
90     virtual void failed(Model*)
91     {
92         require<Model>();
93     }
94 };
95
96 # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )      \
97 enum                                                \
98 {                                                   \
99     BOOST_PP_CAT(boost_concept_check,__LINE__) =    \
100     sizeof(::boost::concepts::require<ModelFnPtr>)    \
101 }
102   
103 # else // Not vc-7.1
104   
105 template <class Model>
106 require<Model>
107 require_(void(*)(Model));
108   
109 # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )          \
110 enum                                                    \
111 {                                                       \
112     BOOST_PP_CAT(boost_concept_check,__LINE__) =        \
113       sizeof(::boost::concepts::require_((ModelFnPtr)0)) \
114 }
115   
116 # endif
117 }}
118
119 # ifdef BOOST_MSVC
120 #  pragma warning(pop)
121 # endif
122
123 #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP