...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::make_expr — Construct an expression of the requested tag type with a domain and with the specified arguments as children.
// In header: <boost/proto/make_expr.hpp> template<typename Tag, typename... A> typename proto::result_of::make_expr<Tag, A const...>::type const make_expr(A const &... a); template<typename Tag, typename Domain, typename... A> typename proto::result_of::make_expr<Tag, Domain, A const...>::type const make_expr(A const &... a);
This function template may be invoked either with or without specifying a
Domain
template parameter. If no domain is specified, the domain
is deduced by examining in order the domains of the given arguments and taking the first that is
not
, if any such
domain exists, or proto::default_domain
otherwise.
proto::default_domain
Let
be defined such that:
WRAP
(x)
If x
is a boost::reference_wrapper<>
,
is equivalent to
WRAP
(x)
.
proto::as_child
<Domain>(x.get())
Otherwise,
is equivalent to
WRAP
(x)
.
proto::as_expr
<Domain>(x)
Let
be defined as
MAKE
<Tag>(a...)
where
proto::expr
<Tag,
proto::listN
<A...> >::make(a...)Ax
is the type of
ax
.
Returns: |
|