...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
Front Page / Metafunctions / Composition and Argument Binding / protect |
protect is an identity wrapper for a Metafunction Class that prevents its argument from being recognized as a bind expression.
#include <boost/mpl/protect.hpp>
Parameter | Requirement | Description |
---|---|---|
F | Metafunction Class | A metafunction class to wrap. |
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;. |
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> ));