You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
50 lines
1.6 KiB
50 lines
1.6 KiB
// Copyright David Abrahams 2006. Distributed under the Boost |
|
// Software License, Version 1.0. (See accompanying |
|
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) |
|
#ifndef BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP |
|
# define BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP |
|
|
|
# include <boost/mpl/bool.hpp> |
|
# include <boost/detail/workaround.hpp> |
|
# include <boost/concept/detail/backward_compatibility.hpp> |
|
|
|
namespace boost { namespace concepts { |
|
|
|
namespace detail |
|
{ |
|
|
|
// Here we implement the metafunction that detects whether a |
|
// constraints metafunction exists |
|
typedef char yes; |
|
typedef char (&no)[2]; |
|
|
|
template <class Model, void (Model::*)()> |
|
struct wrap_constraints {}; |
|
|
|
#if BOOST_WORKAROUND(__SUNPRO_CC, <= 0x580) || defined(__CUDACC__) |
|
// Work around the following bogus error in Sun Studio 11, by |
|
// turning off the has_constraints function entirely: |
|
// Error: complex expression not allowed in dependent template |
|
// argument expression |
|
inline no has_constraints_(...); |
|
#else |
|
template <class Model> |
|
inline yes has_constraints_(Model*, wrap_constraints<Model,&Model::constraints>* = 0); |
|
inline no has_constraints_(...); |
|
#endif |
|
} |
|
|
|
// This would be called "detail::has_constraints," but it has a strong |
|
// tendency to show up in error messages. |
|
template <class Model> |
|
struct not_satisfied |
|
{ |
|
BOOST_STATIC_CONSTANT( |
|
bool |
|
, value = sizeof( detail::has_constraints_((Model*)0) ) == sizeof(detail::yes) ); |
|
typedef mpl::bool_<value> type; |
|
}; |
|
|
|
}} // namespace boost::concepts::detail |
|
|
|
#endif // BOOST_CONCEPT_DETAIL_HAS_CONSTRAINTS_DWA2006429_HPP
|
|
|