• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<?xml version="1.0" encoding="utf-8"?>
2<!--
3  Copyright 2012 Eric Niebler
4
5  Distributed under the Boost
6  Software License, Version 1.0. (See accompanying
7  file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
8  -->
9<header name="boost/proto/args.hpp">
10  <para>
11    Contains definitions of the <computeroutput>
12    <classname alt="boost::proto::term">proto::term&lt;&gt;</classname></computeroutput>,
13    <computeroutput><classname alt="boost::proto::listN">proto::list1&lt;&gt;</classname></computeroutput>,
14    <computeroutput><classname alt="boost::proto::listN">proto::list2&lt;&gt;</classname></computeroutput>, etc.
15    class templates.
16  </para>
17
18  <namespace name="boost">
19    <namespace name="proto">
20
21      <!-- proto::term<> -->
22      <struct name="term">
23        <template>
24          <template-type-parameter name="T"/>
25        </template>
26        <purpose>A type sequence, for use as the 2<superscript>nd</superscript> parameter to the
27        <computeroutput><classname alt="proto::expr">proto::expr&lt;&gt;</classname></computeroutput> and
28        <computeroutput><classname alt="proto::basic_expr">proto::basic_expr&lt;&gt;</classname></computeroutput>
29        class templates.</purpose>
30        <description>
31          <para>
32            A type sequence with one element, for use as the 2<superscript>nd</superscript> parameter to the
33            <computeroutput><classname alt="proto::expr">proto::expr&lt;&gt;</classname></computeroutput> and
34            <computeroutput><classname alt="proto::basic_expr">proto::basic_expr&lt;&gt;</classname></computeroutput>
35            class templates. The sequence element represents the value of a terminal.
36          </para>
37        </description>
38        <data-member name="arity" specifiers="static">
39          <purpose><computeroutput>= 0;</computeroutput></purpose>
40          <type>const long</type>
41        </data-member>
42        <typedef name="child0">
43          <type>T</type>
44        </typedef>
45      </struct>
46
47      <!-- proto::list1<>, proto::list2<> ... -->
48      <struct name="listN">
49        <template>
50          <template-type-parameter name="Arg" pack="1"/>
51        </template>
52        <purpose><computeroutput>proto::list1&lt;&gt;</computeroutput>, <computeroutput>proto::list2&lt;&gt;</computeroutput>, etc.,
53          are type sequences for use as the 2<superscript>nd</superscript> parameter to the
54          <computeroutput><classname>proto::expr&lt;&gt;</classname></computeroutput> or
55          <computeroutput><classname>proto::basic_expr&lt;&gt;</classname></computeroutput> class templates.</purpose>
56        <description>
57          <para>
58            Type sequences, for use as the 2<superscript>nd</superscript> parameter to the
59            <computeroutput><classname>proto::expr&lt;&gt;</classname></computeroutput> or
60            <computeroutput><classname>proto::basic_expr&lt;&gt;</classname></computeroutput> class template. The
61            types in the sequence correspond to the children of a node in an expression tree.
62            There is no type literally named "<computeroutput>listN</computeroutput>"; rather, there is
63            a set of types named
64            <computeroutput>proto::list1&lt;&gt;</computeroutput>,
65            <computeroutput>proto::list2&lt;&gt;</computeroutput>, etc.
66          </para>
67        </description>
68        <data-member name="arity" specifiers="static">
69          <purpose><computeroutput>= N;</computeroutput></purpose>
70          <type>const long</type>
71        </data-member>
72        <typedef name="childM">
73          <purpose>For each <replaceable>M</replaceable> in <replaceable>[0,N)</replaceable></purpose>
74          <type>Arg<replaceable>M</replaceable></type>
75        </typedef>
76      </struct>
77
78    </namespace>
79  </namespace>
80</header>
81