• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>pair</title>
5<link rel="stylesheet" href="../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../index.html" title="Chapter 1. Fusion 2.2">
8<link rel="up" href="../support.html" title="Support">
9<link rel="prev" href="deduce_sequence.html" title="deduce_sequence">
10<link rel="next" href="../iterator.html" title="Iterator">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="deduce_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../support.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h3 class="title">
27<a name="fusion.support.pair"></a><a class="link" href="pair.html" title="pair">pair</a>
28</h3></div></div></div>
29<h5>
30<a name="fusion.support.pair.h0"></a>
31        <span class="phrase"><a name="fusion.support.pair.description"></a></span><a class="link" href="pair.html#fusion.support.pair.description">Description</a>
32      </h5>
33<p>
34        Fusion <code class="computeroutput"><span class="identifier">pair</span></code> type is a half
35        runtime pair. A half runtime pair is similar to a <a class="link" href="../adapted/std__pair.html" title="std::pair"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code></a>,
36        but, unlike <a class="link" href="../adapted/std__pair.html" title="std::pair"><code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code></a>,
37        the first type does not have data. It is used as elements in <a class="link" href="../container/map.html" title="map"><code class="computeroutput"><span class="identifier">map</span></code></a>s, for example.
38      </p>
39<h5>
40<a name="fusion.support.pair.h1"></a>
41        <span class="phrase"><a name="fusion.support.pair.synopsis"></a></span><a class="link" href="pair.html#fusion.support.pair.synopsis">Synopsis</a>
42      </h5>
43<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">First</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Second</span><span class="special">&gt;</span>
44<span class="keyword">struct</span> <span class="identifier">pair</span><span class="special">;</span>
45
46<span class="keyword">namespace</span> <span class="identifier">result_of</span>
47<span class="special">{</span>
48    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Pair</span><span class="special">&gt;</span>
49    <span class="keyword">struct</span> <span class="identifier">first</span><span class="special">;</span>
50
51    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Pair</span><span class="special">&gt;</span>
52    <span class="keyword">struct</span> <span class="identifier">second</span><span class="special">;</span>
53
54    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">First</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Second</span><span class="special">&gt;</span>
55    <span class="keyword">struct</span> <span class="identifier">make_pair</span><span class="special">;</span>
56<span class="special">}</span>
57
58<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">First</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Second</span><span class="special">&gt;</span>
59<span class="keyword">typename</span> <span class="identifier">result_of</span><span class="special">::</span><span class="identifier">make_pair</span><span class="special">&lt;</span><span class="identifier">First</span><span class="special">,</span><span class="identifier">Second</span><span class="special">&gt;::</span><span class="identifier">type</span>
60<span class="identifier">make_pair</span><span class="special">(</span><span class="identifier">Second</span> <span class="keyword">const</span> <span class="special">&amp;);</span>
61</pre>
62<h5>
63<a name="fusion.support.pair.h2"></a>
64        <span class="phrase"><a name="fusion.support.pair.template_parameters"></a></span><a class="link" href="pair.html#fusion.support.pair.template_parameters">Template
65        parameters</a>
66      </h5>
67<div class="informaltable"><table class="table">
68<colgroup>
69<col>
70<col>
71</colgroup>
72<thead><tr>
73<th>
74                <p>
75                  Parameter
76                </p>
77              </th>
78<th>
79                <p>
80                  Description
81                </p>
82              </th>
83</tr></thead>
84<tbody>
85<tr>
86<td>
87                <p>
88                  First
89                </p>
90              </td>
91<td>
92                <p>
93                  The first type. This is purely a type. No data is held.
94                </p>
95              </td>
96</tr>
97<tr>
98<td>
99                <p>
100                  Second
101                </p>
102              </td>
103<td>
104                <p>
105                  The second type. This contains data.
106                </p>
107              </td>
108</tr>
109</tbody>
110</table></div>
111<div class="variablelist">
112<p class="title"><b>Notation</b></p>
113<dl class="variablelist">
114<dt><span class="term"><code class="computeroutput"><span class="identifier">P</span></code></span></dt>
115<dd><p>
116              Fusion pair type
117            </p></dd>
118<dt><span class="term"><code class="computeroutput"><span class="identifier">p</span></code>, <code class="computeroutput"><span class="identifier">p2</span></code></span></dt>
119<dd><p>
120              Fusion pairs
121            </p></dd>
122<dt><span class="term"><code class="computeroutput"><span class="identifier">F</span></code>, <code class="computeroutput"><span class="identifier">S</span></code></span></dt>
123<dd><p>
124              Arbitrary types
125            </p></dd>
126<dt><span class="term"><code class="computeroutput"><span class="identifier">s</span></code></span></dt>
127<dd><p>
128              Value of type <code class="computeroutput"><span class="identifier">S</span></code>
129            </p></dd>
130<dt><span class="term"><code class="computeroutput"><span class="identifier">o</span></code></span></dt>
131<dd><p>
132              Output stream
133            </p></dd>
134<dt><span class="term"><code class="computeroutput"><span class="identifier">i</span></code></span></dt>
135<dd><p>
136              Input stream
137            </p></dd>
138</dl>
139</div>
140<h5>
141<a name="fusion.support.pair.h3"></a>
142        <span class="phrase"><a name="fusion.support.pair.expression_semantics"></a></span><a class="link" href="pair.html#fusion.support.pair.expression_semantics">Expression
143        Semantics</a>
144      </h5>
145<div class="informaltable"><table class="table">
146<colgroup>
147<col>
148<col>
149</colgroup>
150<thead><tr>
151<th>
152                <p>
153                  Expression
154                </p>
155              </th>
156<th>
157                <p>
158                  Semantics
159                </p>
160              </th>
161</tr></thead>
162<tbody>
163<tr>
164<td>
165                <p>
166                  <code class="computeroutput"><span class="identifier">P</span><span class="special">::</span><span class="identifier">first_type</span></code>
167                </p>
168              </td>
169<td>
170                <p>
171                  The type of the first template parameter, <code class="computeroutput"><span class="identifier">F</span></code>,
172                  equivalent to <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">first</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
173                </p>
174              </td>
175</tr>
176<tr>
177<td>
178                <p>
179                  <code class="computeroutput"><span class="identifier">P</span><span class="special">::</span><span class="identifier">second_type</span></code>
180                </p>
181              </td>
182<td>
183                <p>
184                  The type of the second template parameter, <code class="computeroutput"><span class="identifier">S</span></code>,
185                  equivalent to <code class="computeroutput"><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">second</span><span class="special">&lt;</span><span class="identifier">P</span><span class="special">&gt;::</span><span class="identifier">type</span></code>.
186                </p>
187              </td>
188</tr>
189<tr>
190<td>
191                <p>
192                  <code class="computeroutput"><span class="identifier">P</span><span class="special">()</span></code>
193                </p>
194              </td>
195<td>
196                <p>
197                  Default construction.
198                </p>
199              </td>
200</tr>
201<tr>
202<td>
203                <p>
204                  <code class="computeroutput"><span class="identifier">P</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span></code>
205                </p>
206              </td>
207<td>
208                <p>
209                  Construct a pair given value for the second type, <code class="computeroutput"><span class="identifier">s</span></code>.
210                </p>
211              </td>
212</tr>
213<tr>
214<td>
215                <p>
216                  <code class="computeroutput"><span class="identifier">P</span><span class="special">(</span><span class="identifier">p2</span><span class="special">)</span></code>
217                </p>
218              </td>
219<td>
220                <p>
221                  Copy constructs a pair from another pair, <code class="computeroutput"><span class="identifier">p2</span></code>.
222                </p>
223              </td>
224</tr>
225<tr>
226<td>
227                <p>
228                  <code class="computeroutput"><span class="identifier">p</span><span class="special">.</span><span class="identifier">second</span></code>
229                </p>
230              </td>
231<td>
232                <p>
233                  Get the data from <code class="computeroutput"><span class="identifier">p1</span></code>.
234                </p>
235              </td>
236</tr>
237<tr>
238<td>
239                <p>
240                  <code class="computeroutput"><span class="identifier">p</span> <span class="special">=</span>
241                  <span class="identifier">p2</span></code>
242                </p>
243              </td>
244<td>
245                <p>
246                  Assigns a pair, <code class="computeroutput"><span class="identifier">p1</span></code>,
247                  from another pair, <code class="computeroutput"><span class="identifier">p2</span></code>.
248                </p>
249              </td>
250</tr>
251<tr>
252<td>
253                <p>
254                  make_pair&lt;F&gt;(s)
255                </p>
256              </td>
257<td>
258                <p>
259                  Make a pair given the first type, <code class="computeroutput"><span class="identifier">F</span></code>,
260                  and a value for the second type, <code class="computeroutput"><span class="identifier">s</span></code>.
261                  The second type assumes the type of <code class="computeroutput"><span class="identifier">s</span></code>
262                </p>
263              </td>
264</tr>
265<tr>
266<td>
267                <p>
268                  <code class="computeroutput"><span class="identifier">o</span> <span class="special">&lt;&lt;</span>
269                  <span class="identifier">p</span></code>
270                </p>
271              </td>
272<td>
273                <p>
274                  Output <code class="computeroutput"><span class="identifier">p</span></code> to output
275                  stream, <code class="computeroutput"><span class="identifier">o</span></code>.
276                </p>
277              </td>
278</tr>
279<tr>
280<td>
281                <p>
282                  <code class="computeroutput"><span class="identifier">i</span> <span class="special">&gt;&gt;</span>
283                  <span class="identifier">p</span></code>
284                </p>
285              </td>
286<td>
287                <p>
288                  Input <code class="computeroutput"><span class="identifier">p</span></code> from input
289                  stream, <code class="computeroutput"><span class="identifier">i</span></code>.
290                </p>
291              </td>
292</tr>
293<tr>
294<td>
295                <p>
296                  <code class="computeroutput"><span class="identifier">p</span> <span class="special">==</span>
297                  <span class="identifier">p2</span></code>
298                </p>
299              </td>
300<td>
301                <p>
302                  Tests two pairs for equality.
303                </p>
304              </td>
305</tr>
306<tr>
307<td>
308                <p>
309                  <code class="computeroutput"><span class="identifier">p</span> <span class="special">!=</span>
310                  <span class="identifier">p2</span></code>
311                </p>
312              </td>
313<td>
314                <p>
315                  Tests two pairs for inequality.
316                </p>
317              </td>
318</tr>
319</tbody>
320</table></div>
321<h5>
322<a name="fusion.support.pair.h4"></a>
323        <span class="phrase"><a name="fusion.support.pair.header"></a></span><a class="link" href="pair.html#fusion.support.pair.header">Header</a>
324      </h5>
325<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">support</span><span class="special">/</span><span class="identifier">pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
326<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">pair</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
327</pre>
328<h5>
329<a name="fusion.support.pair.h5"></a>
330        <span class="phrase"><a name="fusion.support.pair.example"></a></span><a class="link" href="pair.html#fusion.support.pair.example">Example</a>
331      </h5>
332<pre class="programlisting"><span class="identifier">pair</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="keyword">char</span><span class="special">&gt;</span> <span class="identifier">p</span><span class="special">(</span><span class="char">'X'</span><span class="special">);</span>
333<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">p</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
334<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">make_pair</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="char">'X'</span><span class="special">)</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>
335<span class="identifier">assert</span><span class="special">((</span><span class="identifier">p</span> <span class="special">==</span> <span class="identifier">make_pair</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;(</span><span class="char">'X'</span><span class="special">)));</span>
336</pre>
337</div>
338<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
339<td align="left"></td>
340<td align="right"><div class="copyright-footer">Copyright © 2001-2006, 2011, 2012 Joel de Guzman,
341      Dan Marsden, Tobias Schwinger<p>
342        Distributed under the Boost Software License, Version 1.0. (See accompanying
343        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
344      </p>
345</div></td>
346</tr></table>
347<hr>
348<div class="spirit-nav">
349<a accesskey="p" href="deduce_sequence.html"><img src="../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../support.html"><img src="../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../index.html"><img src="../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../iterator.html"><img src="../../../../../../doc/src/images/next.png" alt="Next"></a>
350</div>
351</body>
352</html>
353