]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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_HAS_CONSTRAINTS_DWA2006429_HPP | |
5 | # define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP | |
6 | ||
7 | # include <boost/mpl/bool.hpp> | |
8 | # include <boost/detail/workaround.hpp> | |
9 | # include <boost/concept/detail/backward_compatibility.hpp> | |
10 | ||
11 | namespace boost { namespace concepts { | |
12 | ||
13 | namespace detail | |
14 | { | |
15 | ||
16 | // Here we implement the metafunction that detects whether a | |
17 | // constraints metafunction exists | |
18 | typedef char yes; | |
19 | typedef char (&no)[2]; | |
20 | ||
21 | template <class Model, void (Model::*)()> | |
22 | struct wrap_constraints {}; | |
23 | ||
24 | #if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__) | |
25 | // Work around the following bogus error in Sun Studio 11, by | |
26 | // turning off the has_constraints function entirely: | |
27 | // Error: complex expression not allowed in dependent template | |
28 | // argument expression | |
29 | inline no has_constraints_(...); | |
30 | #else | |
31 | template <class Model> | |
32 | inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0); | |
33 | inline no has_constraints_(...); | |
34 | #endif | |
35 | } | |
36 | ||
37 | // This would be called "detail::has_constraints," but it has a strong | |
38 | // tendency to show up in error messages. | |
39 | template <class Model> | |
40 | struct not_satisfied | |
41 | { | |
42 | BOOST_STATIC_CONSTANT( | |
43 | bool | |
44 | , value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) ); | |
45 | typedef mpl::bool_<value> type; | |
46 | }; | |
47 | ||
48 | }} // namespace boost::concepts::detail | |
49 | ||
50 | #endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP |