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 # ifdef BOOST_OLD_CONCEPT_SUPPORT
|
Chris@16
|
8 # include <boost/concept_check/has_constraints.hpp>
|
Chris@16
|
9 # include <boost/mpl/if.hpp>
|
Chris@16
|
10 # endif
|
Chris@16
|
11
|
Chris@16
|
12
|
Chris@16
|
13 namespace boost
|
Chris@16
|
14 {
|
Chris@16
|
15 namespace concept_checking
|
Chris@16
|
16 {
|
Chris@16
|
17 template <class Model>
|
Chris@16
|
18 struct concept_check_
|
Chris@16
|
19 {
|
Chris@16
|
20 virtual void failed(Model* x)
|
Chris@16
|
21 {
|
Chris@16
|
22 x->~Model();
|
Chris@16
|
23 }
|
Chris@16
|
24 };
|
Chris@16
|
25 }
|
Chris@16
|
26
|
Chris@16
|
27 # ifdef BOOST_OLD_CONCEPT_SUPPORT
|
Chris@16
|
28
|
Chris@16
|
29 namespace concept_checking
|
Chris@16
|
30 {
|
Chris@16
|
31 template <class Model>
|
Chris@16
|
32 struct constraint_check
|
Chris@16
|
33 {
|
Chris@16
|
34 virtual void failed(Model* x)
|
Chris@16
|
35 {
|
Chris@16
|
36 x->constraints();
|
Chris@16
|
37 }
|
Chris@16
|
38 };
|
Chris@16
|
39 }
|
Chris@16
|
40
|
Chris@16
|
41 template <class Model>
|
Chris@16
|
42 struct concept_check
|
Chris@16
|
43 : mpl::if_c<
|
Chris@16
|
44 concept_checking::has_constraints<Model>::value
|
Chris@16
|
45 , concept_checking::constraint_check<Model>
|
Chris@16
|
46 , concept_checking::concept_check_<Model>
|
Chris@16
|
47 >::type
|
Chris@16
|
48 {};
|
Chris@16
|
49
|
Chris@16
|
50 # else
|
Chris@16
|
51
|
Chris@16
|
52 template <class Model>
|
Chris@16
|
53 struct concept_check
|
Chris@16
|
54 : concept_checking::concept_check_<Model>
|
Chris@16
|
55 {};
|
Chris@16
|
56
|
Chris@16
|
57 # endif
|
Chris@16
|
58
|
Chris@16
|
59 # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
|
Chris@16
|
60
|
Chris@16
|
61 //
|
Chris@16
|
62 // The iterator library sees some really strange errors unless we
|
Chris@16
|
63 // use partial specialization to extract the model type with
|
Chris@16
|
64 // msvc-7.1
|
Chris@16
|
65 //
|
Chris@16
|
66 template <class Model>
|
Chris@16
|
67 struct concept_check<void(*)(Model)>
|
Chris@16
|
68 : concept_check<Model>
|
Chris@16
|
69 { };
|
Chris@16
|
70
|
Chris@16
|
71 # define BOOST_CONCEPT_ASSERT( ModelInParens ) \
|
Chris@16
|
72 enum { BOOST_PP_CAT(boost_concept_check,__LINE__) = \
|
Chris@16
|
73 sizeof(::boost::concept_check<void(*) ModelInParens>) \
|
Chris@16
|
74 }
|
Chris@16
|
75
|
Chris@16
|
76 # else
|
Chris@16
|
77
|
Chris@16
|
78 template <class Model>
|
Chris@16
|
79 concept_check<Model>
|
Chris@16
|
80 concept_check_(void(*)(Model));
|
Chris@16
|
81
|
Chris@16
|
82 # define BOOST_CONCEPT_ASSERT( ModelInParens ) \
|
Chris@16
|
83 enum { BOOST_PP_CAT(boost_concept_check,__LINE__) = \
|
Chris@16
|
84 sizeof(::boost::concept_check_((void(*) ModelInParens)0)) \
|
Chris@16
|
85 }
|
Chris@16
|
86
|
Chris@16
|
87 # endif
|
Chris@16
|
88 }
|
Chris@16
|
89
|
Chris@16
|
90 #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
|