mirror of
https://github.com/boostorg/proto.git
synced 2026-02-18 02:12:12 +00:00
2808 lines
128 KiB
XML
2808 lines
128 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<header name="boost/proto/traits.hpp">
|
|
<para>Contains definitions for child<>, child_c<>, left<>, right<>, tag_of<>, and the helper functions child(), child_c(), value(), left() and right(). </para>
|
|
<namespace name="boost">
|
|
<namespace name="proto">
|
|
<struct name="is_callable">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<purpose>Boolean metafunction which tells whether a type is a callable
|
|
<conceptname>PolymorphicFunctionObject</conceptname> or not.</purpose>
|
|
<description>
|
|
<para>
|
|
<computeroutput>proto::is_callable<></computeroutput> is used by the
|
|
<computeroutput><classname alt="proto::when">proto::when<></classname></computeroutput>
|
|
transform to determine whether a function type <computeroutput>R(A<subscript>1</subscript>,...A<subscript>n</subscript>)</computeroutput>
|
|
is a <conceptname>CallableTransform</conceptname> or an <conceptname>ObjectTransform</conceptname>.
|
|
The former are evaluated using <computeroutput><classname>proto::call<></classname></computeroutput>
|
|
and the later with <computeroutput><classname>proto::make<></classname></computeroutput>.
|
|
If <computeroutput>proto::is_callable<R>::value</computeroutput> is <computeroutput>true</computeroutput>,
|
|
the function type is a <conceptname>CallableTransform</conceptname>; otherwise, it is an <conceptname>ObjectTransform</conceptname>.
|
|
</para>
|
|
<para>
|
|
Unless specialized for a type
|
|
<computeroutput>T</computeroutput>, <computeroutput>proto::is_callable<T>::value</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
If <computeroutput>T</computeroutput> is a template type
|
|
<computeroutput>X<Y<subscript>0</subscript>,...Y<subscript>n</subscript>></computeroutput>,
|
|
where all <computeroutput>Y<subscript>x</subscript></computeroutput> are types for
|
|
<computeroutput>x</computeroutput> in <computeroutput>[0,n]</computeroutput>,
|
|
<computeroutput>proto::is_callable<T>::value</computeroutput> is
|
|
<computeroutput>boost::is_same<Y<subscript>n</subscript>, <classname>proto::callable</classname>>::value</computeroutput>.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
If <computeroutput>T</computeroutput> is derived from <computeroutput><classname>proto::callable</classname></computeroutput>,
|
|
<computeroutput>proto::is_callable<T>::value</computeroutput> is <computeroutput>true</computeroutput>.
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
Otherwise, <computeroutput>proto::is_callable<T>::value</computeroutput>
|
|
is <computeroutput>false</computeroutput>.
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</description>
|
|
<inherit><type>mpl::bool_<<replaceable>true-or-false</replaceable>></type></inherit>
|
|
</struct>
|
|
|
|
<struct name="is_aggregate">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<purpose>A Boolean metafunction that indicates whether a type requires aggregate initialization. </purpose>
|
|
<description>
|
|
<para>
|
|
<computeroutput>proto::is_aggregate<></computeroutput> is used by the
|
|
<computeroutput><classname>proto::make<></classname></computeroutput> transform to determine how
|
|
to construct an object of some type <computeroutput>T</computeroutput>, given some initialization arguments
|
|
<computeroutput>a<subscript>0</subscript>,...a<subscript>n</subscript></computeroutput>.
|
|
If <computeroutput>proto::is_aggregate<T>::value</computeroutput> is <computeroutput>true</computeroutput>,
|
|
then an object of type <computeroutput>T</computeroutput> will be initialized as
|
|
<computeroutput>T t = {a<subscript>0</subscript>,...a<subscript>n</subscript>};</computeroutput>.
|
|
Otherwise, it will be initialized as
|
|
<computeroutput>T t(a<subscript>0</subscript>,...a<subscript>n</subscript>)</computeroutput>.
|
|
</para>
|
|
<para>
|
|
Note: <computeroutput><classname>proto::expr<></classname> is an aggregate.</computeroutput>
|
|
</para>
|
|
</description>
|
|
<inherit><type>mpl::bool_<<replaceable>true-or-false</replaceable>></type></inherit>
|
|
</struct>
|
|
|
|
<namespace name="functional">
|
|
<struct name="as_expr">
|
|
<template>
|
|
<template-type-parameter name="Domain">
|
|
<default><classname>proto::default_domain</classname></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::as_expr">proto::as_expr()</functionname></computeroutput> function.
|
|
</purpose>
|
|
<inherit><type><classname>proto::callable</classname></type></inherit>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(T)</template-arg>
|
|
</specialization>
|
|
<inherit><type><classname>proto::result_of::as_expr</classname>< T, Domain ></type></inherit>
|
|
</struct-specialization>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
<description>
|
|
<para>The object to wrap. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Wrap an object in a Proto terminal if it isn't a Proto expression already.
|
|
</para>
|
|
</description>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::as_expr</functionname><Domain>(t)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T const, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="as_child">
|
|
<template>
|
|
<template-type-parameter name="Domain">
|
|
<default><classname>proto::default_domain</classname></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<purpose>
|
|
A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::as_child">proto::as_child()</functionname></computeroutput> function.
|
|
</purpose>
|
|
<inherit><type><classname>proto::callable</classname></type></inherit>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(T)</template-arg>
|
|
</specialization>
|
|
<inherit><type><classname>proto::result_of::as_child</classname>< T, Domain ></type></inherit>
|
|
</struct-specialization>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
<description>
|
|
<para>The object to wrap. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Wrap an object in a Proto terminal if it isn't a Proto expression already.
|
|
</para>
|
|
</description>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::as_child</functionname><Domain>(t)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T const, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="child_c">
|
|
<template>
|
|
<template-nontype-parameter name="N">
|
|
<type>long</type>
|
|
</template-nontype-parameter>
|
|
</template>
|
|
<purpose>
|
|
A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::child_c">proto::child_c()</functionname></computeroutput> function.
|
|
</purpose>
|
|
<inherit><type><classname>proto::callable</classname></type></inherit>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(Expr)</template-arg>
|
|
</specialization>
|
|
<inherit><type><classname>proto::result_of::child_c</classname>< Expr, N ></type></inherit>
|
|
</struct-specialization>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::child_c</classname>< Expr &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The expression node. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Return the <replaceable>N</replaceable><superscript>th</superscript> child of the given expression.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>
|
|
</para>
|
|
<para>
|
|
<computeroutput>N < Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::child_c</functionname><N>(expr)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::child_c</classname>< Expr const &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="child">
|
|
<template>
|
|
<template-type-parameter name="N">
|
|
<default>mpl::long_<0></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::child">proto::child()</functionname></computeroutput> function.</purpose>
|
|
<description>
|
|
<para>
|
|
A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::child">proto::child()</functionname></computeroutput>
|
|
function. <computeroutput>N</computeroutput> is required to be an MPL Integral Constant.
|
|
</para>
|
|
</description>
|
|
<inherit><type><classname>proto::callable</classname></type></inherit>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(Expr)</template-arg>
|
|
</specialization>
|
|
<inherit>
|
|
<type><classname>proto::result_of::child</classname>< Expr, N ></type>
|
|
</inherit>
|
|
</struct-specialization>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The expression node. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Return the <replaceable>N</replaceable><superscript>th</superscript> child of the given expression.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>
|
|
</para>
|
|
<para>
|
|
<computeroutput>N::value < Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::child</functionname><N>(expr)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr const &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="value">
|
|
<purpose>
|
|
A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::value">proto::value()</functionname></computeroutput> function.
|
|
</purpose>
|
|
<inherit><type><classname>proto::callable</classname></type></inherit>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(Expr)</template-arg>
|
|
</specialization>
|
|
<inherit>
|
|
<type><classname>proto::result_of::value</classname>< Expr ></type>
|
|
</inherit>
|
|
</struct-specialization>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::value</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The terminal expression node. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Return the value of the given terminal expression.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>
|
|
</para>
|
|
<para>
|
|
<computeroutput>0 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::value</functionname>(expr)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::value</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="left">
|
|
<purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::left">proto::left()</functionname></computeroutput> function.</purpose>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(Expr)</template-arg>
|
|
</specialization>
|
|
<inherit>
|
|
<type><classname>proto::result_of::left</classname>< Expr ></type>
|
|
</inherit>
|
|
</struct-specialization>
|
|
<inherit>
|
|
<type><classname>proto::callable</classname></type>
|
|
</inherit>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::left</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The expression node. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>
|
|
Return the left child of the given binary expression.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>
|
|
</para>
|
|
<para>
|
|
<computeroutput>2 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::left</functionname>(expr)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::left</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
<description>
|
|
<para>This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. </para>
|
|
</description>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
|
|
<struct name="right">
|
|
<purpose>A callable <conceptname>PolymorphicFunctionObject</conceptname> that is equivalent to the
|
|
<computeroutput><functionname alt="proto::right">proto::right()</functionname></computeroutput> function.</purpose>
|
|
<struct-specialization name="result">
|
|
<template>
|
|
<template-type-parameter name="This"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<specialization>
|
|
<template-arg>This(Expr)</template-arg>
|
|
</specialization>
|
|
<inherit>
|
|
<type><classname>proto::result_of::right</classname>< Expr ></type>
|
|
</inherit>
|
|
</struct-specialization>
|
|
<inherit>
|
|
<type><classname>proto::callable</classname></type>
|
|
</inherit>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::right</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The expression node. </para>
|
|
</description>
|
|
</parameter>
|
|
<description>
|
|
<para>Return the right child of the given binary expression.</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is <computeroutput>true</computeroutput>
|
|
</para>
|
|
<para>
|
|
<computeroutput>2 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput><functionname>proto::right</functionname>(expr)</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
<method name="operator()" cv="const">
|
|
<type>typename <classname>proto::result_of::right</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
</namespace>
|
|
|
|
<struct name="terminal">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< terminal<T> ></inherit>
|
|
<purpose>A metafunction for generating terminal expression types, a grammar element for matching
|
|
terminal expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that returns the current expression unchanged. </purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit><classname>proto::transform_impl</classname>< Expr, State, Data ></inherit>
|
|
<typedef name="result_type">
|
|
<type>Expr</type>
|
|
</typedef>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>Expr</type>
|
|
<parameter name="expr">
|
|
<paramtype>typename impl::expr_param</paramtype>
|
|
<description>
|
|
<para>The current expression </para>
|
|
</description>
|
|
</parameter>
|
|
<parameter name="">
|
|
<paramtype>typename impl::state_param</paramtype>
|
|
</parameter>
|
|
<parameter name="">
|
|
<paramtype>typename impl::data_param</paramtype>
|
|
</parameter>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::matches</classname><Expr, proto::terminal<T> >::value</computeroutput> is <computeroutput>true</computeroutput>.
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput>expr</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::terminal</classname>, <classname>proto::term</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="if_else_">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
<template-type-parameter name="V"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< if_else_<T, U, V> ></inherit>
|
|
<purpose>A metafunction for generating ternary conditional expression types, a grammar element for
|
|
matching ternary conditional expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname>
|
|
that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><if_else_>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::if_else_</classname>, <classname alt="proto::listN">proto::list3</classname>< T, U, V > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="unary_plus">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< unary_plus<T> ></inherit>
|
|
<purpose>A metafunction for generating unary plus expression types,
|
|
a grammar element for matching unary plus expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><unary_plus>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::unary_plus</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="negate">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< negate<T> ></inherit>
|
|
<purpose>A metafunction for generating unary minus expression types,
|
|
a grammar element for matching unary minus expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><negate>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::negate</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="dereference">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< dereference<T> ></inherit>
|
|
<purpose>A metafunction for generating defereference expression types,
|
|
a grammar element for matching dereference expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><dereference>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::dereference</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="complement">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< complement<T> ></inherit>
|
|
<purpose>A metafunction for generating complement expression types,
|
|
a grammar element for matching complement expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><complement>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::complement</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="address_of">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< address_of<T> ></inherit>
|
|
<purpose>A metafunction for generating address_of expression types,
|
|
a grammar element for matching address_of expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><address_of>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::address_of</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="logical_not">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< logical_not<T> ></inherit>
|
|
<purpose>A metafunction for generating logical_not expression types,
|
|
a grammar element for matching logical_not expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><logical_not>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::logical_not</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="pre_inc">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< pre_inc<T> ></inherit>
|
|
<purpose>A metafunction for generating pre-increment expression types,
|
|
a grammar element for matching pre-increment expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><pre_inc>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::pre_inc</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="pre_dec">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< pre_dec<T> ></inherit>
|
|
<purpose>A metafunction for generating pre-decrement expression types,
|
|
a grammar element for matching pre-decrement expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><pre_dec>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::pre_dec</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="post_inc">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< post_inc<T> ></inherit>
|
|
<purpose>A metafunction for generating post-increment expression types,
|
|
a grammar element for matching post-increment expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><post_inc>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::post_inc</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="post_dec">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< post_dec<T> ></inherit>
|
|
<purpose>A metafunction for generating post-decrement expression types,
|
|
a grammar element for matching post-decrement expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><post_dec>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::post_dec</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="shift_left">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< shift_left<T, U> ></inherit>
|
|
<purpose>A metafunction for generating left-shift expression types,
|
|
a grammar element for matching left-shift expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><shift_left>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::shift_left</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="shift_right">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< shift_right<T, U> ></inherit>
|
|
<purpose>A metafunction for generating right-shift expression types,
|
|
a grammar element for matching right-shift expressions, and a
|
|
<conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><shift_right>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::shift_right</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="multiplies">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< multiplies<T, U> ></inherit>
|
|
<purpose>A metafunction for generating multiplies expression types,
|
|
a grammar element for matching multiplies expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><multiplies>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::multiplies</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="divides">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< divides<T, U> ></inherit>
|
|
<purpose>A metafunction for generating divides expression types,
|
|
a grammar element for matching divides expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><divides>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::divides</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="modulus">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< modulus<T, U> ></inherit>
|
|
<purpose>A metafunction for generating modulus expression types,
|
|
a grammar element for matching modulus expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><modulus>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::modulus</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="plus">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< plus<T, U> ></inherit>
|
|
<purpose>A metafunction for generating binary plus expression types,
|
|
a grammar element for matching binary plus expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><plus>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::plus</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="minus">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< minus<T, U> ></inherit>
|
|
<purpose>A metafunction for generating binary minus expression types,
|
|
a grammar element for matching binary minus expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><minus>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::minus</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="less">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< less<T, U> ></inherit>
|
|
<purpose>A metafunction for generating less expression types,
|
|
a grammar element for matching less expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><less>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::less</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="greater">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< greater<T, U> ></inherit>
|
|
<purpose>A metafunction for generating greater expression types,
|
|
a grammar element for matching greater expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><greater>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::greater</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="less_equal">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< less_equal<T, U> ></inherit>
|
|
<purpose>A metafunction for generating less-or-equal expression types,
|
|
a grammar element for matching less-or-equal expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><less_equal>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::less_equal</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="greater_equal">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< greater_equal<T, U> ></inherit>
|
|
<purpose>A metafunction for generating greater-or-equal expression types,
|
|
a grammar element for matching greater-or-equal expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><greater_equal>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::greater_equal</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="equal_to">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< equal_to<T, U> ></inherit>
|
|
<purpose>A metafunction for generating equal-to expression types,
|
|
a grammar element for matching equal-to expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><equal_to>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::equal_to</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="not_equal_to">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< not_equal_to<T, U> ></inherit>
|
|
<purpose>A metafunction for generating not-equal-to expression types,
|
|
a grammar element for matching not-equal-to expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><mot_equal_to>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::not_equal_to</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="logical_or">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< logical_or<T, U> ></inherit>
|
|
<purpose>A metafunction for generating logical-or expression types,
|
|
a grammar element for matching logical-or expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><logical_or>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::logical_or</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="logical_and">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< logical_and<T, U> ></inherit>
|
|
<purpose>A metafunction for generating logical-and expression types,
|
|
a grammar element for matching logical-and expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><logical_and>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::logical_and</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_and">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_and<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-and expression types,
|
|
a grammar element for matching bitwise-and expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_and>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_and</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_or">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_or<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-or expression types,
|
|
a grammar element for matching bitwise-or expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_or>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_or</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_xor">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_xor<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-xor expression types,
|
|
a grammar element for matching bitwise-xor expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_xor>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_xor</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="comma">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< comma<T, U> ></inherit>
|
|
<purpose>A metafunction for generating comma expression types,
|
|
a grammar element for matching comma expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><comma>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::comma</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="mem_ptr">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< mem_ptr<T, U> ></inherit>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><mem_ptr>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::mem_ptr</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating assignment expression types,
|
|
a grammar element for matching assignment expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="shift_left_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< shift_left_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating left-shift-assign expression types,
|
|
a grammar element for matching left-shift-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><shift_left_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::shift_left_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="shift_right_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< shift_right_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating right-shift-assign expression types,
|
|
a grammar element for matching right-shift-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><shift_right_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::shift_right_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="multiplies_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< multiplies_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating multiplies-assign expression types,
|
|
a grammar element for matching multiplies-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><multiplies_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::multiplies_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="divides_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< divides_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating divides-assign expression types,
|
|
a grammar element for matching divides-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><divides_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::divides_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="modulus_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< modulus_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating modulus-assign expression types,
|
|
a grammar element for matching modulus-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><modulus_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::modulus_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="plus_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< plus_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating plus-assign expression types,
|
|
a grammar element for matching plus-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><plus_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::plus_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="minus_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< minus_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating minus-assign expression types,
|
|
a grammar element for matching minus-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><minus_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::minus_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_and_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_and_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-and-assign expression types,
|
|
a grammar element for matching bitwise-and-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_and_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_and_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_or_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_or_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-or-assign expression types,
|
|
a grammar element for matching bitwise-or-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_or_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_or_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="bitwise_xor_assign">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< bitwise_xor_assign<T, U> ></inherit>
|
|
<purpose>A metafunction for generating bitwise-xor-assign expression types,
|
|
a grammar element for matching bitwise-xor-assign expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><bitwise_xor_assign>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::bitwise_xor_assign</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="subscript">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< subscript<T, U> ></inherit>
|
|
<purpose>A metafunction for generating subscript expression types,
|
|
a grammar element for matching subscript expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><subscript>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::subscript</classname>, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="function">
|
|
<template>
|
|
<template-type-parameter name="A" pack="1"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< function<A...> ></inherit>
|
|
<purpose>A metafunction for generating function-call expression types, a grammar element for
|
|
matching function-call expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname>
|
|
that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><function>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< <classname>proto::tag::function</classname>, <classname alt="proto::listN">proto::list<replaceable>N</replaceable></classname>< A... > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="nullary_expr">
|
|
<template>
|
|
<template-type-parameter name="Tag"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< nullary_expr<Tag, T> ></inherit>
|
|
<purpose>A metafunction for generating nullary expression types, a grammar element for matching
|
|
nullary expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname> that returns the current expression unchanged. </purpose>
|
|
<description>
|
|
<para>
|
|
Use <computeroutput>proto::nullary_expr<<classname>proto::_</classname>, <classname>proto::_</classname>></computeroutput>
|
|
as a grammar element to match any nullary expression.
|
|
</para>
|
|
</description>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit><classname>proto::transform_impl</classname>< Expr, State, Data ></inherit>
|
|
<typedef name="result_type">
|
|
<type>Expr</type>
|
|
</typedef>
|
|
<method-group name="public member functions">
|
|
<method name="operator()" cv="const">
|
|
<type>Expr</type>
|
|
<parameter name="expr">
|
|
<paramtype>typename impl::expr_param</paramtype>
|
|
<description>
|
|
<para>The current expression </para>
|
|
</description>
|
|
</parameter>
|
|
<parameter name="">
|
|
<paramtype>typename impl::state_param</paramtype>
|
|
</parameter>
|
|
<parameter name="">
|
|
<paramtype>typename impl::data_param</paramtype>
|
|
</parameter>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::matches</classname><Expr, proto::nullary_expr<Tag, T> >::value</computeroutput> is <computeroutput>true</computeroutput>.
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
<computeroutput>expr</computeroutput>
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</method>
|
|
</method-group>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< Tag, <classname>proto::term</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="unary_expr">
|
|
<template>
|
|
<template-type-parameter name="Tag"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< unary_expr<Tag, T> ></inherit>
|
|
<purpose>A metafunction for generating unary expression types with a specified tag type,
|
|
a grammar element for matching unary expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname>
|
|
that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<description>
|
|
<para>
|
|
Use <computeroutput>proto::unary_expr<<classname>proto::_</classname>, <classname>proto::_</classname>></computeroutput>
|
|
as a grammar element to match any unary expression.
|
|
</para>
|
|
</description>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><unary_expr>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< Tag, <classname alt="proto::listN">proto::list1</classname>< T > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="binary_expr">
|
|
<template>
|
|
<template-type-parameter name="Tag"/>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="U"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< binary_expr<Tag, T, U> ></inherit>
|
|
<purpose>A metafunction for generating binary expression types with a specified tag type,
|
|
a grammar element for matching binary expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname>
|
|
that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<description>
|
|
<para>
|
|
Use <computeroutput>proto::binary_expr<<classname>proto::_</classname>, <classname>proto::_</classname>, <classname>proto::_</classname>></computeroutput> as a grammar element to match any binary expression.
|
|
</para>
|
|
</description>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><binary_expr>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< Tag, <classname alt="proto::listN">proto::list2</classname>< T, U > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="nary_expr">
|
|
<template>
|
|
<template-type-parameter name="Tag"/>
|
|
<template-type-parameter name="A" pack="1"/>
|
|
</template>
|
|
<inherit><classname>proto::transform</classname>< nary_expr<Tag, A...> ></inherit>
|
|
<purpose>A metafunction for generating n-ary expression types with a specified tag type,
|
|
a grammar element for matching n-ary expressions, and
|
|
a <conceptname>PrimitiveTransform</conceptname>
|
|
that dispatches to the
|
|
<computeroutput><classname alt="proto::pass_through">proto::pass_through<></classname></computeroutput>
|
|
transform.</purpose>
|
|
<description>
|
|
<para>
|
|
Use <computeroutput>proto::nary_expr<<classname>proto::_</classname>, <classname>proto::vararg</classname><<classname>proto::_</classname>> ></computeroutput>
|
|
as a grammar element to match any n-ary expression; that is, any non-terminal.
|
|
</para>
|
|
</description>
|
|
<struct name="impl">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="State"/>
|
|
<template-type-parameter name="Data"/>
|
|
</template>
|
|
<inherit>
|
|
<type><classname>proto::pass_through</classname><nary_expr>::template impl<Expr, State, Data></type>
|
|
</inherit>
|
|
</struct>
|
|
<typedef name="type">
|
|
<type><classname>proto::expr</classname>< Tag, <classname alt="proto::listN">proto::list<replaceable>N</replaceable></classname>< A... > ></type>
|
|
</typedef>
|
|
<typedef name="proto_base_expr">
|
|
<type>type</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="is_expr">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<inherit><type>mpl::bool_<<replaceable>true-or-false</replaceable>></type></inherit>
|
|
<purpose>A Boolean metafunction that indicates whether a given type <computeroutput>T</computeroutput>
|
|
is a Proto expression type.</purpose>
|
|
<description>
|
|
<para>
|
|
If <computeroutput>T</computeroutput> is an instantiation of <computeroutput>
|
|
<classname alt="proto::expr">proto::expr<></classname></computeroutput> or is an extension
|
|
(via <classname alt="proto::extends">proto::extends<></classname> or
|
|
<macroname>BOOST_PROTO_EXTENDS</macroname>()) of such an instantiation,
|
|
<computeroutput><classname>proto::is_expr</classname><T>::value</computeroutput>
|
|
is <computeroutput>true</computeroutput>.
|
|
Otherwise, <computeroutput><classname>proto::is_expr</classname><T>::value</computeroutput>
|
|
is <computeroutput>false</computeroutput>.
|
|
</para>
|
|
</description>
|
|
</struct>
|
|
|
|
<struct name="tag_of">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<purpose>A metafunction that returns the tag type of a Proto expression. </purpose>
|
|
<typedef name="type">
|
|
<type>typename Expr::proto_tag</type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="arity_of">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<purpose>A metafunction that returns the arity of a Proto expression. </purpose>
|
|
<inherit><type>Expr::proto_arity</type></inherit>
|
|
</struct>
|
|
|
|
<namespace name="result_of">
|
|
<struct name="as_expr">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="Domain">
|
|
<default><classname>proto::default_domain</classname></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<purpose>A metafunction that computes the return type of the
|
|
<computeroutput><functionname alt="proto::as_expr">proto::as_expr()</functionname></computeroutput> function.</purpose>
|
|
<description>
|
|
<para>
|
|
The <computeroutput>proto::result_of::as_expr<></computeroutput> 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.
|
|
</para>
|
|
<para>
|
|
If <computeroutput>T</computeroutput> is not yet a Proto type, the resulting terminal type is calculated
|
|
as follows:
|
|
</para>
|
|
<para>
|
|
If <computeroutput>T</computeroutput> is a function type, let
|
|
<computeroutput>A</computeroutput> be <computeroutput>T &</computeroutput>. Otherwise, let
|
|
<computeroutput>A</computeroutput> be the type <computeroutput>T</computeroutput> stripped of
|
|
cv-qualifiers. Then, the result type <computeroutput>proto::result_of::as_expr<T, Domain>::type</computeroutput>
|
|
is <computeroutput>boost::result_of<Domain(<classname>proto::expr</classname>< <classname>proto::tag::terminal</classname>, <classname>proto::term</classname><A> >)>::type</computeroutput>.
|
|
</para>
|
|
</description>
|
|
<typedef name="type">
|
|
<type><replaceable>see-below</replaceable></type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="as_child">
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
<template-type-parameter name="Domain">
|
|
<default><classname>proto::default_domain</classname></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<purpose>A metafunction that computes the return type of the
|
|
<computeroutput><functionname alt="proto::as_child">proto::as_child()</functionname></computeroutput> function.</purpose>
|
|
<description>
|
|
<para>
|
|
The <computeroutput>proto::result_of::as_child<></computeroutput> metafunction turns types into Proto types
|
|
if they are not already by making them Proto terminals held by reference. Types which are already Proto
|
|
types are left alone.
|
|
</para>
|
|
<para>
|
|
When <computeroutput>T</computeroutput> is not yet a Proto type,
|
|
the result type <computeroutput>proto::result_of::as_child<T, Domain>::type</computeroutput> is
|
|
<computeroutput>boost::result_of<Domain(<classname>proto::expr</classname>< <classname>proto::tag::terminal</classname>, <classname>proto::term</classname><T &> >)>::type</computeroutput>.
|
|
</para>
|
|
<para>
|
|
When <computeroutput>T</computeroutput> is already a Proto type
|
|
The result type <computeroutput>proto::result_of::as_child<T, Domain>::type</computeroutput> is
|
|
<computeroutput>T &</computeroutput>.
|
|
</para>
|
|
</description>
|
|
<typedef name="type">
|
|
<type><replaceable>see-below</replaceable></type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="child">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-type-parameter name="N">
|
|
<default>mpl::long_<0></default>
|
|
</template-type-parameter>
|
|
</template>
|
|
<inherit><type><classname>proto::result_of::child_c</classname><Expr, N::value></type></inherit>
|
|
<purpose>A metafunction that returns the type of the <replaceable>N</replaceable><superscript>th</superscript>
|
|
child of a Proto expression, where N is an MPL Integral Constant. </purpose>
|
|
<description>
|
|
<para>
|
|
<computeroutput>proto::result_of::child<Expr, N></computeroutput> is equivalent to
|
|
<computeroutput><classname>proto::result_of::child_c</classname><Expr, N::value></computeroutput>.
|
|
</para>
|
|
</description>
|
|
</struct>
|
|
|
|
<struct name="value">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<purpose>A metafunction that returns the type of the value of a terminal Proto expression. </purpose>
|
|
<typedef name="value_type">
|
|
<description>
|
|
<para>
|
|
The raw type of the value as it is
|
|
stored within <computeroutput>Expr</computeroutput>. This may be a value or a reference.
|
|
</para>
|
|
</description>
|
|
<type>typename Expr::proto_child0</type>
|
|
</typedef>
|
|
<typedef name="type">
|
|
<description>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is not a reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const(&)[N]</computeroutput> becomes <computeroutput>T[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T[N]</computeroutput> becomes <computeroutput>T[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T(&)[N]</computeroutput> becomes <computeroutput>T[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>R(&)(A...)</computeroutput> becomes <computeroutput>R(&)(A...)</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is a non-const reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const(&)[N]</computeroutput> becomes <computeroutput>T const(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T[N]</computeroutput> becomes <computeroutput>T(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T(&)[N]</computeroutput> becomes <computeroutput>T(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>R(&)(A...)</computeroutput> becomes <computeroutput>R(&)(A...)</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is a const reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const(&)[N]</computeroutput> becomes <computeroutput>T const(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T[N]</computeroutput> becomes <computeroutput>T const(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T(&)[N]</computeroutput> becomes <computeroutput>T(&)[N]</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>R(&)(A...)</computeroutput> becomes <computeroutput>R(&)(A...)</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</description>
|
|
<type><replaceable>see-below</replaceable></type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
<struct name="left">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<inherit>proto::result_of::child_c< Expr, 0 ></inherit>
|
|
<purpose>A metafunction that returns the type of the left child of a binary Proto expression. </purpose>
|
|
<description>
|
|
<para>
|
|
<computeroutput>proto::result_of::left<Expr></computeroutput> is equivalent to
|
|
<computeroutput><classname>proto::result_of::child_c</classname><Expr, 0></computeroutput>.
|
|
</para>
|
|
</description>
|
|
</struct>
|
|
|
|
<struct name="right">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<inherit>proto::result_of::child_c< Expr, 1 ></inherit>
|
|
<purpose>A metafunction that returns the type of the right child of a binary Proto expression. </purpose>
|
|
<description>
|
|
<para>
|
|
<computeroutput>proto::result_of::right<Expr></computeroutput> is equivalent to
|
|
<computeroutput><classname>proto::result_of::child_c</classname><Expr, 1></computeroutput>.
|
|
</para>
|
|
</description>
|
|
</struct>
|
|
|
|
<struct name="child_c">
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
<template-nontype-parameter name="N">
|
|
<type>long</type>
|
|
</template-nontype-parameter>
|
|
</template>
|
|
<purpose>A metafunction that returns the type of the <replaceable>N</replaceable><superscript>th</superscript>
|
|
child of a Proto expression. </purpose>
|
|
<description>
|
|
<para>
|
|
A metafunction that returns the type of the <replaceable>N</replaceable><superscript>th</superscript>
|
|
child of a Proto expression. <computeroutput>N</computeroutput> must be 0 or less than
|
|
<computeroutput>Expr::proto_arity::value</computeroutput>.
|
|
</para>
|
|
</description>
|
|
<typedef name="value_type">
|
|
<description>
|
|
<para>
|
|
The raw type of the <replaceable>N</replaceable><superscript>th</superscript> child as it is stored
|
|
within <computeroutput>Expr</computeroutput>. This may be a value or a reference.
|
|
</para>
|
|
</description>
|
|
<type>typename Expr::proto_child0</type>
|
|
</typedef>
|
|
<typedef name="type">
|
|
<description>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is not a reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is a non-const reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
<para>
|
|
If <computeroutput>Expr</computeroutput> is a const reference type, <computeroutput>type</computeroutput>
|
|
is computed as follows:
|
|
<itemizedlist>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T const &</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T &</computeroutput> becomes <computeroutput>T &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
<listitem>
|
|
<para>
|
|
<computeroutput>T</computeroutput> becomes <computeroutput>T const &</computeroutput>
|
|
</para>
|
|
</listitem>
|
|
</itemizedlist>
|
|
</para>
|
|
</description>
|
|
<type><replaceable>see-below</replaceable></type>
|
|
</typedef>
|
|
</struct>
|
|
|
|
</namespace>
|
|
|
|
<overloaded-function name="as_expr">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T const >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Domain"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_expr</classname>< T const, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Domain"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>A function that wraps non-Proto expression types in Proto terminals and leaves Proto
|
|
expression types alone.</purpose>
|
|
<description>
|
|
<para>
|
|
The <computeroutput>proto::as_expr()</computeroutput> function turns objects into Proto terminals if they
|
|
are not Proto expression types already. Non-Proto types are held by value, if possible. Types which are
|
|
already Proto types are left alone.
|
|
</para>
|
|
<para>
|
|
This function can be called either with an explicitly specified
|
|
<computeroutput>Domain</computeroutput> parameter
|
|
(i.e., <computeroutput>proto::as_expr<Domain>(t)</computeroutput>), or without
|
|
(i.e., <computeroutput>proto::as_expr(t)</computeroutput>). If no domain is specified,
|
|
<computeroutput><classname>proto::default_domain</classname></computeroutput> is assumed.
|
|
</para>
|
|
<para>
|
|
If <computeroutput><classname>proto::is_expr</classname><T>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>, then the argument is returned unmodified. Otherwise,
|
|
the argument is wrapped in a Proto terminal expression node according to the following rules.
|
|
If <computeroutput>T</computeroutput> is a function type, let
|
|
<computeroutput>A</computeroutput> be <computeroutput>T &</computeroutput>. Otherwise, let
|
|
<computeroutput>A</computeroutput> be the type <computeroutput>T</computeroutput> stripped of
|
|
cv-qualifiers. Then, <computeroutput>proto::as_expr()</computeroutput> returns
|
|
<computeroutput>Domain()(<classname>proto::terminal</classname><A>::type::make(t))</computeroutput>.
|
|
</para>
|
|
</description>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="as_child">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T const >::type</type>
|
|
<template>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Domain"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::as_child</classname>< T const, Domain >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Domain"/>
|
|
<template-type-parameter name="T"/>
|
|
</template>
|
|
<parameter name="t">
|
|
<paramtype>T const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>A function that wraps non-Proto expression types in Proto terminals (by reference) and leaves
|
|
Proto expression types alone.</purpose>
|
|
<description>
|
|
<para>
|
|
The <computeroutput>proto::as_child()</computeroutput> function turns objects into Proto terminals
|
|
if they are not Proto expression types already. Non-Proto types are held by reference. Types which
|
|
are already Proto types are simply returned as-is.
|
|
</para>
|
|
<para>
|
|
This function can be called either with an explicitly specified
|
|
<computeroutput>Domain</computeroutput> parameter
|
|
(i.e., <computeroutput>proto::as_child<Domain>(t)</computeroutput>), or without
|
|
(i.e., <computeroutput>proto::as_child(t)</computeroutput>). If no domain is specified,
|
|
<computeroutput><classname>proto::default_domain</classname></computeroutput> is assumed.
|
|
</para>
|
|
<para>
|
|
If <computeroutput><classname>proto::is_expr</classname><T>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>, then the argument is returned as-is. Otherwise,
|
|
<computeroutput>proto::as_child()</computeroutput> returns
|
|
<computeroutput>Domain()(<classname>proto::terminal</classname><T &>::type::make(t))</computeroutput>.
|
|
</para>
|
|
</description>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="child">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="N"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The Proto expression. </para>
|
|
</description>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr const &, N >::type</type>
|
|
<template>
|
|
<template-type-parameter name="N"/>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>Return the <replaceable>N</replaceable><superscript>th</superscript> child of the specified Proto expression. </purpose>
|
|
<description>
|
|
<para>
|
|
Return the <replaceable>N</replaceable><superscript>th</superscript> child of the specified Proto expression.
|
|
If <computeroutput>N</computeroutput> is not specified, as in <computeroutput>proto::child(expr)</computeroutput>,
|
|
then <computeroutput>N</computeroutput> is assumed to be <computeroutput>mpl::long_<0></computeroutput>.
|
|
The child is returned by reference.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>.
|
|
</para>
|
|
<para>
|
|
<computeroutput>N</computeroutput> is an MPL Integral Constant.
|
|
</para>
|
|
<para>
|
|
<computeroutput>N::value < Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>A reference to the <replaceable>N</replaceable><superscript>th</superscript> child
|
|
of <computeroutput>expr</computeroutput>.</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="child_c">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child_c</classname>< Expr &, N >::type</type>
|
|
<template>
|
|
<template-nontype-parameter name="N">
|
|
<type>long</type>
|
|
</template-nontype-parameter>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::child_c</classname>< Expr const &, N >::type</type>
|
|
<template>
|
|
<template-nontype-parameter name="N">
|
|
<type>long</type>
|
|
</template-nontype-parameter>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>Return the <replaceable>N</replaceable><superscript>th</superscript> child of the specified
|
|
Proto expression. </purpose>
|
|
<description>
|
|
<para>
|
|
Return the <replaceable>N</replaceable><superscript>th</superscript> child of the specified Proto
|
|
expression. The child is returned by reference.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>.
|
|
</para>
|
|
<para>
|
|
<computeroutput>N < Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>A reference to the <replaceable>N</replaceable><superscript>th</superscript> child
|
|
of <computeroutput>expr</computeroutput>.</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="value">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::value</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::value</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>Return the value stored within the specified Proto terminal expression. </purpose>
|
|
<description>
|
|
<para>
|
|
Return the the value stored within the specified Proto terminal expression. The value is
|
|
returned by reference.
|
|
</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput>0 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>A reference to the terminal's value </para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="left">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::left</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::left</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>Return the left child of the specified binary Proto expression. </purpose>
|
|
<description>
|
|
<para>Return the left child of the specified binary Proto expression. The child is returned by reference.</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>.
|
|
</para>
|
|
<para>
|
|
<computeroutput>2 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>A reference to the left child of <computeroutput>expr</computeroutput>.
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</overloaded-function>
|
|
|
|
<overloaded-function name="right">
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::right</classname>< Expr & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr &</paramtype>
|
|
<description>
|
|
<para>The Proto expression. </para>
|
|
</description>
|
|
</parameter>
|
|
</signature>
|
|
<signature>
|
|
<type>typename <classname>proto::result_of::right</classname>< Expr const & >::type</type>
|
|
<template>
|
|
<template-type-parameter name="Expr"/>
|
|
</template>
|
|
<parameter name="expr">
|
|
<paramtype>Expr const &</paramtype>
|
|
</parameter>
|
|
</signature>
|
|
<purpose>Return the right child of the specified binary Proto expression. </purpose>
|
|
<description>
|
|
<para>Return the right child of the specified binary Proto expression. The child is returned by reference.</para>
|
|
</description>
|
|
<requires>
|
|
<para>
|
|
<computeroutput><classname>proto::is_expr</classname><Expr>::value</computeroutput> is
|
|
<computeroutput>true</computeroutput>.
|
|
</para>
|
|
<para>
|
|
<computeroutput>2 == Expr::proto_arity::value</computeroutput>
|
|
</para>
|
|
</requires>
|
|
<returns>
|
|
<para>
|
|
A reference to the right child of <computeroutput>expr</computeroutput>.
|
|
</para>
|
|
</returns>
|
|
<throws>
|
|
<simpara>Will not throw.</simpara>
|
|
</throws>
|
|
</overloaded-function>
|
|
</namespace>
|
|
</namespace>
|
|
</header>
|