Make any Proto expression a valid Fusion sequence

A PolymorphicFunctionObject type that returns a "flattened" view of a Proto expression tree.

A PolymorphicFunctionObject type that returns a "flattened" view of a Proto expression tree. 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)`.

The resulting view is a Fusion Forward Sequence.

`proto::callable`
This(Expr)
result< This(Expr const &) >
This(Expr &)
`proto::result_of::flatten`< Expr >
typename `proto::result_of::flatten`< Expr >::type const `Expr &`

Returns a Fusion Forward Sequence representing a flattened view of `expr`.

typename `proto::result_of::flatten`< Expr const >::type const `Expr const &`

Returns a Fusion Forward Sequence representing a flattened view of `expr`.

Metafunction that computes the return type of `proto::flatten()`
unspecified A Fusion Forward Sequence
typename `proto::result_of::flatten`< Expr >::type const `Expr &`
typename `proto::result_of::flatten`< Expr const >::type const `Expr const &`
A function that returns a "flattened" view of a Proto expression tree.

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)`.

The returned view is a Fusion Forward Sequence.