...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::result_of::as_expr — A metafunction that computes the return type of the
proto::as_expr()
function.
// In header: <boost/proto/traits.hpp>
template<typename T, typename Domain = proto::default_domain>
struct as_expr {
// types
typedef see-below
type;
};
The proto::result_of::as_expr<>
metafunction turns types into Proto types if they are
not already, by making them Proto terminals held by value if possible. Types which are already Proto types are
left alone.
If T
is not yet a Proto type, the resulting terminal type is calculated
as follows:
If T
is a function type, let
A
be T &
. Otherwise, let
A
be the type T
stripped of
cv-qualifiers. Then, the result type proto::result_of::as_expr<T, Domain>::type
is boost::result_of<Domain(proto::expr< proto::tag::terminal, proto::term<A> >)>::type
.