230 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			230 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | 
 | ||
|  | // Copyright Aleksey Gurtovoy 2000-2004 | ||
|  | // | ||
|  | // 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) | ||
|  | // | ||
|  | 
 | ||
|  | // Preprocessed version of "boost/mpl/aux_/lambda_no_ctps.hpp" header | ||
|  | // -- DO NOT modify by hand! | ||
|  | 
 | ||
|  | namespace boost { namespace mpl { | ||
|  | 
 | ||
|  | namespace aux { | ||
|  | 
 | ||
|  | template< | ||
|  |       bool C1 = false, bool C2 = false, bool C3 = false, bool C4 = false | ||
|  |     , bool C5 = false | ||
|  |     > | ||
|  | struct lambda_or | ||
|  |     : true_ | ||
|  | { | ||
|  | }; | ||
|  | 
 | ||
|  | template<> | ||
|  | struct lambda_or< false,false,false,false,false > | ||
|  |     : false_ | ||
|  | { | ||
|  | }; | ||
|  | 
 | ||
|  | template< typename Arity > struct lambda_impl | ||
|  | { | ||
|  |     template< typename T, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef T type; | ||
|  |         typedef is_placeholder<T> is_le; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> struct lambda_impl< int_<1> > | ||
|  | { | ||
|  |     template< typename F, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef lambda< typename F::arg1, Tag, false_ > l1; | ||
|  |         typedef typename l1::is_le is_le1; | ||
|  |         typedef aux::lambda_or< | ||
|  |               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value | ||
|  |             > is_le; | ||
|  | 
 | ||
|  |         typedef bind1< | ||
|  |               typename F::rebind | ||
|  |             , typename l1::type | ||
|  |             > bind_; | ||
|  | 
 | ||
|  |         typedef typename if_< | ||
|  |               is_le | ||
|  |             , if_< Protect, mpl::protect<bind_>, bind_ > | ||
|  |             , identity<F> | ||
|  |             >::type type_; | ||
|  | 
 | ||
|  |         typedef typename type_::type type; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> struct lambda_impl< int_<2> > | ||
|  | { | ||
|  |     template< typename F, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef lambda< typename F::arg1, Tag, false_ > l1; | ||
|  |         typedef lambda< typename F::arg2, Tag, false_ > l2; | ||
|  |          | ||
|  |         typedef typename l1::is_le is_le1; | ||
|  |         typedef typename l2::is_le is_le2; | ||
|  |          | ||
|  | 
 | ||
|  |         typedef aux::lambda_or< | ||
|  |               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value | ||
|  |             > is_le; | ||
|  | 
 | ||
|  |         typedef bind2< | ||
|  |               typename F::rebind | ||
|  |             , typename l1::type, typename l2::type | ||
|  |             > bind_; | ||
|  | 
 | ||
|  |         typedef typename if_< | ||
|  |               is_le | ||
|  |             , if_< Protect, mpl::protect<bind_>, bind_ > | ||
|  |             , identity<F> | ||
|  |             >::type type_; | ||
|  | 
 | ||
|  |         typedef typename type_::type type; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> struct lambda_impl< int_<3> > | ||
|  | { | ||
|  |     template< typename F, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef lambda< typename F::arg1, Tag, false_ > l1; | ||
|  |         typedef lambda< typename F::arg2, Tag, false_ > l2; | ||
|  |         typedef lambda< typename F::arg3, Tag, false_ > l3; | ||
|  |          | ||
|  |         typedef typename l1::is_le is_le1; | ||
|  |         typedef typename l2::is_le is_le2; | ||
|  |         typedef typename l3::is_le is_le3; | ||
|  |          | ||
|  | 
 | ||
|  |         typedef aux::lambda_or< | ||
|  |               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value | ||
|  |             > is_le; | ||
|  | 
 | ||
|  |         typedef bind3< | ||
|  |               typename F::rebind | ||
|  |             , typename l1::type, typename l2::type, typename l3::type | ||
|  |             > bind_; | ||
|  | 
 | ||
|  |         typedef typename if_< | ||
|  |               is_le | ||
|  |             , if_< Protect, mpl::protect<bind_>, bind_ > | ||
|  |             , identity<F> | ||
|  |             >::type type_; | ||
|  | 
 | ||
|  |         typedef typename type_::type type; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> struct lambda_impl< int_<4> > | ||
|  | { | ||
|  |     template< typename F, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef lambda< typename F::arg1, Tag, false_ > l1; | ||
|  |         typedef lambda< typename F::arg2, Tag, false_ > l2; | ||
|  |         typedef lambda< typename F::arg3, Tag, false_ > l3; | ||
|  |         typedef lambda< typename F::arg4, Tag, false_ > l4; | ||
|  |          | ||
|  |         typedef typename l1::is_le is_le1; | ||
|  |         typedef typename l2::is_le is_le2; | ||
|  |         typedef typename l3::is_le is_le3; | ||
|  |         typedef typename l4::is_le is_le4; | ||
|  |          | ||
|  | 
 | ||
|  |         typedef aux::lambda_or< | ||
|  |               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value | ||
|  |             > is_le; | ||
|  | 
 | ||
|  |         typedef bind4< | ||
|  |               typename F::rebind | ||
|  |             , typename l1::type, typename l2::type, typename l3::type | ||
|  |             , typename l4::type | ||
|  |             > bind_; | ||
|  | 
 | ||
|  |         typedef typename if_< | ||
|  |               is_le | ||
|  |             , if_< Protect, mpl::protect<bind_>, bind_ > | ||
|  |             , identity<F> | ||
|  |             >::type type_; | ||
|  | 
 | ||
|  |         typedef typename type_::type type; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | template<> struct lambda_impl< int_<5> > | ||
|  | { | ||
|  |     template< typename F, typename Tag, typename Protect > struct result_ | ||
|  |     { | ||
|  |         typedef lambda< typename F::arg1, Tag, false_ > l1; | ||
|  |         typedef lambda< typename F::arg2, Tag, false_ > l2; | ||
|  |         typedef lambda< typename F::arg3, Tag, false_ > l3; | ||
|  |         typedef lambda< typename F::arg4, Tag, false_ > l4; | ||
|  |         typedef lambda< typename F::arg5, Tag, false_ > l5; | ||
|  |          | ||
|  |         typedef typename l1::is_le is_le1; | ||
|  |         typedef typename l2::is_le is_le2; | ||
|  |         typedef typename l3::is_le is_le3; | ||
|  |         typedef typename l4::is_le is_le4; | ||
|  |         typedef typename l5::is_le is_le5; | ||
|  |          | ||
|  | 
 | ||
|  |         typedef aux::lambda_or< | ||
|  |               BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le1)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le2)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le3)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le4)::value, BOOST_MPL_AUX_MSVC_VALUE_WKND(is_le5)::value | ||
|  |             > is_le; | ||
|  | 
 | ||
|  |         typedef bind5< | ||
|  |               typename F::rebind | ||
|  |             , typename l1::type, typename l2::type, typename l3::type | ||
|  |             , typename l4::type, typename l5::type | ||
|  |             > bind_; | ||
|  | 
 | ||
|  |         typedef typename if_< | ||
|  |               is_le | ||
|  |             , if_< Protect, mpl::protect<bind_>, bind_ > | ||
|  |             , identity<F> | ||
|  |             >::type type_; | ||
|  | 
 | ||
|  |         typedef typename type_::type type; | ||
|  |     }; | ||
|  | }; | ||
|  | 
 | ||
|  | } // namespace aux | ||
|  | 
 | ||
|  | template< | ||
|  |       typename T | ||
|  |     , typename Tag | ||
|  |     , typename Protect | ||
|  |     > | ||
|  | struct lambda | ||
|  | { | ||
|  |     /// Metafunction forwarding confuses MSVC 6.x | ||
|  |     typedef typename aux::template_arity<T>::type arity_; | ||
|  |     typedef typename aux::lambda_impl<arity_> | ||
|  |         ::template result_< T,Tag,Protect > l_; | ||
|  | 
 | ||
|  |     typedef typename l_::type type; | ||
|  |     typedef typename l_::is_le is_le; | ||
|  |     BOOST_MPL_AUX_LAMBDA_SUPPORT(3, lambda, (T, Tag, Protect)) | ||
|  | }; | ||
|  | 
 | ||
|  | BOOST_MPL_AUX_NA_SPEC2(1, 3, lambda) | ||
|  | 
 | ||
|  | template< | ||
|  |       typename T | ||
|  |     > | ||
|  | struct is_lambda_expression | ||
|  |     : lambda<T>::is_le | ||
|  | { | ||
|  | }; | ||
|  | 
 | ||
|  | }} | ||
|  | 
 |