boost-react-native-bundle
Version:
Boost library as in https://sourceforge.net/projects/boost/files/boost/1.57.0/
991 lines (967 loc) • 144 kB
text/xml
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright 2012 Eric Niebler
Distributed under the Boost
Software License, Version 1.0. (See accompanying
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
-->
<header name="boost/proto/traits.hpp">
<para>
Contains definitions for various expression traits and utilities like
<computeroutput><classname alt="boost::proto::tag_of">proto::tag_of</classname><></computeroutput> and
<computeroutput><classname alt="boost::proto::arity_of">proto::arity_of</classname><></computeroutput>;
the functions
<computeroutput><functionname alt="boost::proto::value">proto::value</functionname>()</computeroutput>,
<computeroutput><functionname alt="boost::proto::left">proto::left</functionname>()</computeroutput> and
<computeroutput><functionname alt="boost::proto::right">proto::right</functionname>()</computeroutput>;
<computeroutput><functionname alt="boost::proto::child">proto::child</functionname>()</computeroutput>,
<computeroutput><functionname alt="boost::proto::child_c">proto::child_c</functionname>()</computeroutput>,
<computeroutput><functionname alt="boost::proto::as_expr">proto::as_expr</functionname>()</computeroutput>,
<computeroutput><functionname alt="boost::proto::as_child">proto::as_child</functionname>()</computeroutput>,
and assorted helpers.
</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_transform">
<template>
<template-type-parameter name="T"/>
</template>
<purpose>Boolean metafunction which tells whether a type is a
<conceptname>PrimitiveTransform</conceptname> or not.</purpose>
<description>
<para>
<computeroutput>proto::is_transform<></computeroutput> is used by the
<computeroutput><classname alt="proto::make">proto::make<></classname></computeroutput>
transform to determine whether a type <computeroutput>R</computeroutput> represents a
<conceptname>PrimitiveTransform</conceptname> to apply, or whether it merely represents itself.
</para>
<para>
It is also used by the
<computeroutput><classname alt="proto::call">proto::call<></classname></computeroutput>
transform to determine whether the function types <computeroutput>R()</computeroutput>,
<computeroutput>R(A1)</computeroutput>, and <computeroutput>R(A1, A2)</computeroutput> should
be passed the expression, state and data parameters (as needed).
</para>
<para>
Unless specialized for a type
<computeroutput>T</computeroutput>, <computeroutput>proto::is_transform<T>::value</computeroutput>
is computed as follows:
<itemizedlist>
<listitem>
<para>
If <computeroutput>T</computeroutput> is a class type that inherits directly or indirectly from
an instantiation of
<computeroutput><classname alt="proto::transform">proto::transform<></classname></computeroutput>,
<computeroutput>proto::is_transform<T>::value</computeroutput> is <computeroutput>true</computeroutput>.
</para>
</listitem>
<listitem>
<para>
Otherwise, <computeroutput>proto::is_transform<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></computeroutput> and
<computeroutput><classname>proto::basic_expr<></classname></computeroutput>are aggregates.
</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>< typename remove_reference< T >::type, 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>< typename remove_reference< T >::type, 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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::terminal</classname>, <classname>proto::term</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::if_else_</classname>, <classname alt="proto::listN">proto::list3</classname>< T, U, V > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::unary_plus</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::negate</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::dereference</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::complement</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::address_of</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::logical_not</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::pre_inc</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::pre_dec</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type><classname>proto::basic_expr</classname>< <classname>proto::tag::post_inc</classname>, <classname alt="proto::listN">proto::list1</classname>< T > ></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_grammar">
<type>
<classname>proto::basic_expr</classname>< <classname>proto::tag::post_dec</classname>, <classname alt="proto::listN">proto::list1</classname>< T > >
</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