// 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 | |
{ | |
}; | |
}} | |