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