The type must be a model of . It also
models Unary Polymorphic Function.
The type must be a model of Expr
A Domain creates an association between expressions and a so-called
generator, which is a function that maps an expression in the default
domain to an equivalent expression in this Domain. It also associates
an expression with a grammar, to which all expressions within this
Domain must conform.
The grammar to which every expression in this Domain
must conform.
A Unary Polymorphic Function that accepts expressions in the
default domain and emits expressions in this Domain.
The Domain that is a super-domain of this domain, if
any such domain exists. If not, it is some unspecified
type.
The type of the result of applying
proto_generator to
the specified expression type. The result is required to
model Expr. The domain type
associated with result_type
(result_type::proto_domain)
is required to be the same type as this Domain.
The result of converting some type to a Proto expression
type in this domain. This is used, for instance, when
calculating the type of a variable to hold a Proto
expression.
as_expr_result_type
models
Expr.
The result of converting some type to a Proto expression
type in this domain. This is used, for instance, to
compute the type of an object suitable for storage
as a child in an expression tree.
as_child_result_type
models
Expr.
The result of applying proto_generator
to the specified expression.
The result of converting some object to a Proto expression
in this domain. It returns a Proto expression object that
is suitable for storage in a variable. It should return a
new object, which may be a copy of the object passed in.
The result of converting some object to a Proto expression
in this domain. It returns an object suitable for storage
as a child in an expression tree, which may simply be a
reference to the object passed in.