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
							 |