...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::vararg — For matching a Grammar to a variable number of sub-expressions.
// In header: <boost/proto/matches.hpp> template<typename Grammar> struct vararg { };
An expression type proto::basic_expr<AT,
proto::listN<A0,...An,U0,...Um> >
matches a grammar proto::basic_expr<BT,
proto::listM<B0,...Bn,proto::vararg<V> > >
if BT
is proto::_
or AT
, and if
Ax
matches
Bx
for each x
in [0,n]
and if Ux
matches
V
for each x
in [0,m]
.
For example:
// Match any function call expression, regardless // of the number of function arguments: struct Function : proto::function< proto::vararg<proto::_> > {};
When used as a transform, proto::vararg<G>
applies G
's transform.