...one of the most highly
regarded and expertly designed C++ library projects in the
world.
— Herb Sutter and Andrei
Alexandrescu, C++
Coding Standards
boost::proto::when<Grammar, >::impl
// In header: <boost/proto/transform/when.hpp> template<typename Expr, typename State, typename Data> struct impl : boost::remove_reference< typename mpl::eval_if_c< proto::result_of::has_env_var<Data, proto::transforms_type>::value, proto::result_of::env_var<Data, proto::transforms_type>, proto::result_of::env_var<Data, proto::data_type> >::type >::type ::template when< Grammar > ::template impl< Expr, State, Data > { };
The implementation of the impl
struct depends on whether the Data
parameter is a transform environment that contains a value corresponding to the
proto::transforms_type key. If so, that value is treated as a
map from rules to transforms. Otherwise, the Data
type itself is treated
as such a map.