Mercurial > hg > vamp-build-and-test
comparison DEPENDENCIES/generic/include/boost/concept/detail/general.hpp @ 16:2665513ce2d3
Add boost headers
author | Chris Cannam |
---|---|
date | Tue, 05 Aug 2014 11:11:38 +0100 |
parents | |
children | c530137014c0 |
comparison
equal
deleted
inserted
replaced
15:663ca0da4350 | 16:2665513ce2d3 |
---|---|
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_DETAIL_GENERAL_DWA2006429_HPP | |
5 # define BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP | |
6 | |
7 # include <boost/preprocessor/cat.hpp> | |
8 # include <boost/concept/detail/backward_compatibility.hpp> | |
9 | |
10 # ifdef BOOST_OLD_CONCEPT_SUPPORT | |
11 # include <boost/concept/detail/has_constraints.hpp> | |
12 # include <boost/mpl/if.hpp> | |
13 # endif | |
14 | |
15 // This implementation works on Comeau and GCC, all the way back to | |
16 // 2.95 | |
17 namespace boost { namespace concepts { | |
18 | |
19 template <class ModelFn> | |
20 struct requirement_; | |
21 | |
22 namespace detail | |
23 { | |
24 template <void(*)()> struct instantiate {}; | |
25 } | |
26 | |
27 template <class Model> | |
28 struct requirement | |
29 { | |
30 static void failed() { ((Model*)0)->~Model(); } | |
31 }; | |
32 | |
33 struct failed {}; | |
34 | |
35 template <class Model> | |
36 struct requirement<failed ************ Model::************> | |
37 { | |
38 static void failed() { ((Model*)0)->~Model(); } | |
39 }; | |
40 | |
41 # ifdef BOOST_OLD_CONCEPT_SUPPORT | |
42 | |
43 template <class Model> | |
44 struct constraint | |
45 { | |
46 static void failed() { ((Model*)0)->constraints(); } | |
47 }; | |
48 | |
49 template <class Model> | |
50 struct requirement_<void(*)(Model)> | |
51 : mpl::if_< | |
52 concepts::not_satisfied<Model> | |
53 , constraint<Model> | |
54 , requirement<failed ************ Model::************> | |
55 >::type | |
56 {}; | |
57 | |
58 # else | |
59 | |
60 // For GCC-2.x, these can't have exactly the same name | |
61 template <class Model> | |
62 struct requirement_<void(*)(Model)> | |
63 : requirement<failed ************ Model::************> | |
64 {}; | |
65 | |
66 # endif | |
67 | |
68 # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr ) \ | |
69 typedef ::boost::concepts::detail::instantiate< \ | |
70 &::boost::concepts::requirement_<ModelFnPtr>::failed> \ | |
71 BOOST_PP_CAT(boost_concept_check,__LINE__) | |
72 | |
73 }} | |
74 | |
75 #endif // BOOST_CONCEPT_DETAIL_GENERAL_DWA2006429_HPP |