124 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			124 lines
		
	
	
		
			2.8 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_CHECK_MSVC_DWA2006429_HPP
 | |
| # define BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
 | |
| 
 | |
| # include <boost/preprocessor/cat.hpp>
 | |
| # include <boost/concept/detail/backward_compatibility.hpp>
 | |
| # include <boost/config.hpp>
 | |
| 
 | |
| # ifdef BOOST_OLD_CONCEPT_SUPPORT
 | |
| #  include <boost/concept/detail/has_constraints.hpp>
 | |
| #  include <boost/mpl/if.hpp>
 | |
| # endif
 | |
| 
 | |
| # ifdef BOOST_MSVC
 | |
| #  pragma warning(push)
 | |
| #  pragma warning(disable:4100)
 | |
| # endif
 | |
| 
 | |
| namespace boost { namespace concepts {
 | |
| 
 | |
| 
 | |
| template <class Model>
 | |
| struct check
 | |
| {
 | |
|     virtual void failed(Model* x)
 | |
|     {
 | |
|         x->~Model();
 | |
|     }
 | |
| };
 | |
| 
 | |
| # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
 | |
| struct failed {};
 | |
| template <class Model>
 | |
| struct check<failed ************ Model::************>
 | |
| {
 | |
|     virtual void failed(Model* x)
 | |
|     {
 | |
|         x->~Model();
 | |
|     }
 | |
| };
 | |
| # endif
 | |
| 
 | |
| # ifdef BOOST_OLD_CONCEPT_SUPPORT
 | |
|   
 | |
| namespace detail
 | |
| {
 | |
|   // No need for a virtual function here, since evaluating
 | |
|   // not_satisfied below will have already instantiated the
 | |
|   // constraints() member.
 | |
|   struct constraint {};
 | |
| }
 | |
| 
 | |
| template <class Model>
 | |
| struct require
 | |
|   : mpl::if_c<
 | |
|         not_satisfied<Model>::value
 | |
|       , detail::constraint
 | |
| # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
 | |
|       , check<Model>
 | |
| # else
 | |
|       , check<failed ************ Model::************>
 | |
| # endif 
 | |
|         >::type
 | |
| {};
 | |
|       
 | |
| # else
 | |
|   
 | |
| template <class Model>
 | |
| struct require
 | |
| # ifndef BOOST_NO_PARTIAL_SPECIALIZATION
 | |
|     : check<Model>
 | |
| # else
 | |
|     : check<failed ************ Model::************>
 | |
| # endif 
 | |
| {};
 | |
|   
 | |
| # endif
 | |
|     
 | |
| # if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
 | |
| 
 | |
| //
 | |
| // The iterator library sees some really strange errors unless we
 | |
| // do things this way.
 | |
| //
 | |
| template <class Model>
 | |
| struct require<void(*)(Model)>
 | |
| {
 | |
|     virtual void failed(Model*)
 | |
|     {
 | |
|         require<Model>();
 | |
|     }
 | |
| };
 | |
| 
 | |
| # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )      \
 | |
| enum                                                \
 | |
| {                                                   \
 | |
|     BOOST_PP_CAT(boost_concept_check,__LINE__) =    \
 | |
|     sizeof(::boost::concepts::require<ModelFnPtr>)    \
 | |
| }
 | |
|   
 | |
| # else // Not vc-7.1
 | |
|   
 | |
| template <class Model>
 | |
| require<Model>
 | |
| require_(void(*)(Model));
 | |
|   
 | |
| # define BOOST_CONCEPT_ASSERT_FN( ModelFnPtr )          \
 | |
| enum                                                    \
 | |
| {                                                       \
 | |
|     BOOST_PP_CAT(boost_concept_check,__LINE__) =        \
 | |
|       sizeof(::boost::concepts::require_((ModelFnPtr)0)) \
 | |
| }
 | |
|   
 | |
| # endif
 | |
| }}
 | |
| 
 | |
| # ifdef BOOST_MSVC
 | |
| #  pragma warning(pop)
 | |
| # endif
 | |
| 
 | |
| #endif // BOOST_CONCEPT_CHECK_MSVC_DWA2006429_HPP
 | 
