Metafunction that computes the return type of the make_expr()
function, within the specified domain.
More...
#include <make_expr.hpp>
Public Types | |
typedef detail::make_expr_ < Tag, Domain >::result_type | type |
If Tag is tag::terminal , then type is a typedef for boost::result_of<Domain(expr<tag::terminal, term<A0> >)>::type . More... | |
Metafunction that computes the return type of the make_expr()
function, within the specified domain.
Use the result_of::make_expr<>
metafunction to compute the return type of the make_expr()
function.
typedef detail::make_expr_< Tag , Domain >::result_type boost::proto::result_of::make_expr< Tag, Domain, typename Domain::proto_is_domain_ >::type |
If Tag
is tag::terminal
, then type
is a typedef for boost::result_of<Domain(expr<tag::terminal, term<A0> >)>::type
.
Otherwise, type
is a typedef for boost::result_of<Domain(expr<Tag, listN< as_child<A0>::type, ... as_child<AN>::type>) >::type
, where N
is the number of non-void template arguments, and as_child<A>::type
is evaluated as follows:
is_expr<A>value
is true
, then the child type is A
. A
is B &
or cv boost::reference_wrapper<B>
, and is_expr<B>value
is true
, then the child type is B &
. is_expr<A>value
is false
, then the child type is boost::result_of<Domain(expr<tag::terminal, term<A> > )>::type
. A
is B &
or cv boost::reference_wrapper<B>
, and is_expr<B>value
is false
, then the child type is boost::result_of<Domain(expr<tag::terminal, term<B &> > )>::type
.