template<
      typename F
    >
struct apply0
{
    typedef unspecified type;
};
template<
      typename F, typename A1
    >
struct apply1
{
    typedef unspecified type;
};
...
template<
      typename F, typename A1,... typename An
    >
struct applyn
{
    typedef unspecified type;
};
template<
      typename F
    , typename A1 = unspecified
    ...
    , typename An = unspecified
    >
struct apply
{
    typedef unspecified type;
};
 
| Parameter | Requirement | Description | 
|---|
| F | Lambda Expression | An expression to invoke. | 
| A1,... An | Any type | Invocation arguments. | 
 
For any Lambda Expression f and arbitrary types a1,... an:
typedef applyn<f,a1,...an>::type t;
typedef apply<f,a1,...an>::type t;
| Return type: | Any type. | 
|---|
| Semantics: | Equivalent to typedef apply_wrapn< lambda<f>::type,a1,... an>::type t;. | 
|---|
 
template< typename N1, typename N2 > struct int_plus
    : int_<( N1::value + N2::value )>
{
};
typedef apply< int_plus<_1,_2>, int_<2>, int_<3> >::type r1;
typedef apply< quote2<int_plus>, int_<2>, int_<3> >::type r2;
BOOST_MPL_ASSERT_RELATION( r1::value, ==, 5 );
BOOST_MPL_ASSERT_RELATION( r2::value, ==, 5 );