Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

This is the documentation for an old version of Boost. Click here to view this page for the latest version.
Front Page / Metafunctions / Composition and Argument Binding / lambda

lambda

Synopsis

template< 
      typename X
    , typename Tag = unspecified
    >
struct lambda
{
    typedef unspecified type;
};

Description

If X is a Placeholder Expression, transforms X into a corresponding Metafunction Class, otherwise X is returned unchanged.

Header

#include <boost/mpl/lambda.hpp>

Parameters

Parameter Requirement Description
X Any type An expression to transform.
Tag Any type A tag determining transform semantics.

Expression semantics

For arbitrary types x and tag:

typedef lambda<x>::type f;
Return type:Metafunction Class.
Semantics:

If x is a Placeholder Expression in a general form X<a1,...an>, where X is a class template and a1,... an are arbitrary types, equivalent to

typedef protect< bind<
      quoten<X>
    , lambda<a1>::type,... lambda<an>::type
    > > f;

otherwise, f is identical to x.

typedef lambda<x,tag>::type f;
Return type:Metafunction Class.
Semantics:

If x is a Placeholder Expression in a general form X<a1,...an>, where X is a class template and a1,... an are arbitrary types, equivalent to

typedef protect< bind<
      quoten<X,tag>
    , lambda<a1,tag>::type,... lambda<an,tag>::type
    > > f;

otherwise, f is identical to x.

Example

template< typename N1, typename N2 > struct int_plus
    : int_<( N1::value + N2::value )>
{
};

typedef lambda< int_plus<_1, int_<42> > >::type f1;
typedef bind< quote2<int_plus>, _1, int_<42> > f2;

typedef f1::apply<42>::type r1;
typedef f2::apply<42>::type r2;

BOOST_MPL_ASSERT_RELATION( r1::value, ==, 84 );
BOOST_MPL_ASSERT_RELATION( r2::value, ==, 84 );

See also

Composition and Argument Binding, invocation, Placeholders, bind, quote, protect, apply