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/functional/std/utility.hpp">
10  <para>Defines Proto callables <computeroutput><classname>boost::proto::functional::make_pair</classname></computeroutput>,
11  <computeroutput><classname>boost::proto::functional::first</classname></computeroutput> and
12  <computeroutput><classname>boost::proto::functional::second</classname></computeroutput>.</para>
13
14  <namespace name="boost">
15    <namespace name="proto">
16      <namespace name="functional">
17
18        <!-- proto::functional::make_pair -->
19        <struct name="make_pair">
20          <purpose>A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes
21            <computeroutput>std::make_pair()</computeroutput> on its arguments.</purpose>
22          <description>
23            <para>
24              A <conceptname>PolymorphicFunctionObject</conceptname> type that invokes
25              <computeroutput>std::make_pair()</computeroutput> on its arguments.</para>
26          </description>
27          <inherit>
28            <type><classname>proto::callable</classname></type>
29          </inherit>
30          <struct-specialization name="result">
31            <template>
32              <template-type-parameter name="This"/>
33              <template-type-parameter name="First"/>
34              <template-type-parameter name="Second"/>
35            </template>
36            <specialization>
37              <template-arg>This(First, Second)</template-arg>
38            </specialization>
39            <typedef name="type">
40              <type>std::pair&lt;
41        typename boost::remove_const&lt;typename boost::remove_reference&lt;First&gt;::type&gt;::type
42      , typename boost::remove_const&lt;typename boost::remove_reference&lt;Second&gt;::type&gt;::type
43    &gt;</type>
44            </typedef>
45          </struct-specialization>
46          <method-group name="public member functions">
47            <method name="operator()" cv="const">
48              <type>typename std::pair&lt; First, Second &gt;</type>
49              <template>
50                <template-type-parameter name="First"/>
51                <template-type-parameter name="Second"/>
52              </template>
53              <parameter name="first">
54                <paramtype>First const &amp;</paramtype>
55              </parameter>
56              <parameter name="second">
57                <paramtype>Second const &amp;</paramtype>
58              </parameter>
59              <returns>
60                <para><computeroutput>std::make_pair(first, second)</computeroutput></para>
61              </returns>
62            </method>
63          </method-group>
64        </struct>
65
66        <!-- proto::functional::first -->
67        <struct name="first">
68          <purpose>
69            A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
70            the first element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
71          </purpose>
72          <description>
73            <para>
74              A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
75              the first element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.</para>
76          </description>
77          <inherit><type><classname>proto::callable</classname></type>
78          </inherit>
79          <struct-specialization name="result">
80            <template>
81              <template-type-parameter name="This"/>
82              <template-type-parameter name="Pair"/>
83            </template>
84            <specialization>
85              <template-arg>This(Pair)</template-arg>
86            </specialization>
87            <typedef name="type">
88              <type>typename Pair::first_type</type>
89            </typedef>
90          </struct-specialization>
91          <struct-specialization name="result">
92            <template>
93              <template-type-parameter name="This"/>
94              <template-type-parameter name="Pair"/>
95            </template>
96            <specialization>
97              <template-arg>This(Pair &amp;)</template-arg>
98            </specialization>
99            <typedef name="type">
100              <type>typename Pair::first_type &amp;</type>
101            </typedef>
102          </struct-specialization>
103          <struct-specialization name="result">
104            <template>
105              <template-type-parameter name="This"/>
106              <template-type-parameter name="Pair"/>
107            </template>
108            <specialization>
109              <template-arg>This(Pair const &amp;)</template-arg>
110            </specialization>
111            <typedef name="type">
112              <type>typename Pair::first_type const &amp;</type>
113            </typedef>
114          </struct-specialization>
115          <method-group name="public member functions">
116            <method name="operator()" cv="const">
117              <type>typename Pair::first_type &amp;</type>
118              <template>
119                <template-type-parameter name="Pair"/>
120              </template>
121              <parameter name="pair">
122                <paramtype>Pair &amp;</paramtype>
123              </parameter>
124              <returns>
125                <para>
126                  <computeroutput>pair.first</computeroutput>
127                </para>
128              </returns>
129            </method>
130            <method name="operator()" cv="const">
131              <type>typename Pair::first_type const &amp;</type>
132              <template>
133                <template-type-parameter name="Pair"/>
134              </template>
135              <parameter name="pair">
136                <paramtype>Pair const &amp;</paramtype>
137              </parameter>
138              <returns>
139                <para>
140                  <computeroutput>pair.first</computeroutput>
141                </para>
142              </returns>
143            </method>
144          </method-group>
145        </struct>
146
147        <!-- proto::functional::second -->
148        <struct name="second">
149          <purpose>
150            A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
151            the second element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
152          </purpose>
153          <description>
154            <para>
155              A <conceptname>PolymorphicFunctionObject</conceptname> type that returns
156              the second element of a <computeroutput>std::pair&lt;&gt;</computeroutput>.
157            </para>
158          </description>
159          <inherit><type><classname>proto::callable</classname></type></inherit>
160          <struct-specialization name="result">
161            <template>
162              <template-type-parameter name="This"/>
163              <template-type-parameter name="Pair"/>
164            </template>
165            <specialization>
166              <template-arg>This(Pair)</template-arg>
167            </specialization>
168            <typedef name="type">
169              <type>typename Pair::second_type</type>
170            </typedef>
171          </struct-specialization>
172          <struct-specialization name="result">
173            <template>
174              <template-type-parameter name="This"/>
175              <template-type-parameter name="Pair"/>
176            </template>
177            <specialization>
178              <template-arg>This(Pair &amp;)</template-arg>
179            </specialization>
180            <typedef name="type">
181              <type>typename Pair::second_type &amp;</type>
182            </typedef>
183          </struct-specialization>
184          <struct-specialization name="result">
185            <template>
186              <template-type-parameter name="This"/>
187              <template-type-parameter name="Pair"/>
188            </template>
189            <specialization>
190              <template-arg>This(Pair const &amp;)</template-arg>
191            </specialization>
192            <typedef name="type">
193              <type>typename Pair::second_type const &amp;</type>
194            </typedef>
195          </struct-specialization>
196          <method-group name="public member functions">
197            <method name="operator()" cv="const">
198              <type>typename Pair::second_type &amp;</type>
199              <template>
200                <template-type-parameter name="Pair"/>
201              </template>
202              <parameter name="pair">
203                <paramtype>Pair &amp;</paramtype>
204              </parameter>
205              <returns>
206                <para>
207                  <computeroutput>pair.second</computeroutput>
208                </para>
209              </returns>
210            </method>
211            <method name="operator()" cv="const">
212              <type>typename Pair::second_type const &amp;</type>
213              <template>
214                <template-type-parameter name="Pair"/>
215              </template>
216              <parameter name="pair">
217                <paramtype>Pair const &amp;</paramtype>
218              </parameter>
219              <returns>
220                <para>
221                  <computeroutput>pair.second</computeroutput>
222                </para>
223              </returns>
224            </method>
225          </method-group>
226        </struct>
227
228      </namespace>
229    </namespace>
230  </namespace>
231
232</header>
233