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 / protect

protect

Synopsis

template< 
      typename F
    >
struct protect
{
    // unspecified
    // ...
};

Description

protect is an identity wrapper for a Metafunction Class that prevents its argument from being recognized as a bind expression.

Header

#include <boost/mpl/protect.hpp>

Parameters

Parameter Requirement Description
F Metafunction Class A metafunction class to wrap.

Expression semantics

For any Metafunction Class f:

typedef protect<f> g;
Return type:Metafunction Class.
Semantics:

If f is a bind expression, equivalent to

struct g
{
    template< 
          typename U1 = unspecified,... typename Un = unspecified
        >
    struct apply
        : apply_wrapn<f,U1,...Un>
    {
    };
};

otherwise equivalent to typedef f g;.

Example

FIXME

struct f
{
    template< typename T1, typename T2 > struct apply
    {
        // ...
    };
};

typedef bind<_1, protect< bind<f,_1,_2> > >

typedef apply_wrap0< f0 >::type r1;
typedef apply_wrap0< g0 >::type r2;
typedef apply_wrap2< f2,int,char >::type r3;

BOOST_MPL_ASSERT(( is_same<r1,char> ));
BOOST_MPL_ASSERT(( is_same<r2,char> ));
BOOST_MPL_ASSERT(( is_same<r3,char> ));

See also

Composition and Argument Binding, invocation, bind, quote, apply_wrap