]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/boost/concept/detail/msvc.hpp
update sources to v12.2.3
[ceph.git] / ceph / src / 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/mpl/if.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 : mpl::if_c<
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