51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| // 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
 | 
