A PrimitiveTransform which prevents another PrimitiveTransform from being applied in an ObjectTransform.  
 More...
#include <make.hpp>


Classes | |
| struct | impl | 
Public Types | |
| typedef protect < PrimitiveTransform >  | transform_type | 
Public Member Functions | |
| BOOST_PROTO_CALLABLE () typedef X proto_is_transform_ | |
| BOOST_FORCEINLINE  boost::proto::detail::apply_transform < transform_type(Expr const &)> ::result_type  | operator() (Expr &&e) const | 
| BOOST_FORCEINLINE  boost::proto::detail::apply_transform < transform_type(Expr const &, State const &)> ::result_type  | operator() (Expr &&e, State &&s) const | 
| BOOST_FORCEINLINE  boost::proto::detail::apply_transform < transform_type(Expr const &, State const &, Data const &)> ::result_type  | operator() (Expr &&e, State &&s, Data &&d) const | 
A PrimitiveTransform which prevents another PrimitiveTransform from being applied in an ObjectTransform. 
When building higher order transforms with make<> or lazy<>, you sometimes would like to build types that are parameterized with Proto transforms. In such lambda-style transforms, Proto will unhelpfully find all nested transforms and apply them, even if you don't want them to be applied. Consider the following transform, which will replace the _ in Bar<_>() with proto::terminal<int>::type:
If you actually wanted to default-construct an object of type Bar<_>, you would have to protect the _ to prevent it from being applied. You can use proto::protect<> as follows:
      
  | 
  inherited | 
      
  | 
  inherited | 
      
  | 
  inlineinherited | 
      
  | 
  inlineinherited | 
      
  | 
  inlineinherited |