...one of the most highly
regarded and expertly designed C++ library projects in the
world. — Herb Sutter and Andrei
boost::proto::flatten — A function that returns a "flattened" view of a Proto expression tree.
// In header: <boost/proto/fusion.hpp> template<typename Expr> typename proto::result_of::flatten< Expr >::type const flatten(Expr & expr); template<typename Expr> typename proto::result_of::flatten< Expr const >::type const flatten(Expr const & expr);
For a tree with a top-most node tag of type
T, the elements
of the flattened sequence are determined by recursing into each child node with the same tag
type and returning those nodes of different type. So for instance, the Proto expression tree
corresponding to the expression
a | b | c has a flattened
view with elements [a, b, c], even though the tree is grouped as
((a | b) | c).