Contains all the overloaded operators that make it possible to build Proto expression trees.
is_expr< T >
Boolean metafunction that can be used to enable the operator overloads in the
exops namespace for the specified non-Proto terminal type.
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
unspecified
Arg const &
unspecified
Arg &
int
unspecified
Arg const &
int
unspecified
Arg &
int
unspecified
Arg const &
int
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
unspecified
Left &
Right &
unspecified
Left &
Right const &
unspecified
Left const &
Right &
unspecified
Left const &
Right const &
typename proto::result_of::make_expr<
proto::tag::if_else_,
proto::deduce_domain,
A0 const &,
A1 const &,
A2 const &
>::type const
A0 const &
A1 const &
A2 const &
Defines a complete set of expression template-building operator overloads for use
with non-Proto terminal types.
With BOOST_PROTO_DEFINE_OPERATORS(), it is possible to
non-intrusively adapt an existing (non-Proto) type to be a Proto terminal.
Trait is the name of a unary Boolean metafunction that returns
true for any types you would like to treat as Proto terminals.
Domain is the name of the Proto domain associated with
these new Proto terminals. You may use
proto::default_domain
for the Domain if you do not wish to associate these terminals
with any domain.
Example:
namespace My {
// A non-Proto terminal type
struct S {};
// A unary Boolean metafunction that returns true for type S
template<typename T> struct IsS : mpl::false_ {};
template<> struct IsS<S> : mpl::true_ {};
// Make S a Proto terminal non-intrusively by defining the
// appropriate operator overloads. This should be in the same
// namespace as S so that these overloads can be found by
// argument-dependent lookup
BOOST_PROTO_DEFINE_OPERATORS(IsS, proto::default_domain)
}
int main() {
My::S s1, s2;
// OK, this builds a Proto expression template:
s1 + s2;
}