• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2<html>
3<head>
4<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
5<title>Reference</title>
6<link rel="stylesheet" href="../../../doc/src/boostbook.css" type="text/css">
7<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
8<link rel="home" href="../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
9<link rel="up" href="../metaparse.html" title="Chapter 24. Boost.Metaparse">
10<link rel="prev" href="the_design_of_the_library.html" title="The design of the library">
11<link rel="next" href="../move.html" title="Chapter 25. Boost.Move">
12</head>
13<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
14<table cellpadding="2" width="100%"><tr>
15<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../boost.png"></td>
16<td align="center"><a href="../../../index.html">Home</a></td>
17<td align="center"><a href="../../../libs/libraries.htm">Libraries</a></td>
18<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
19<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
20<td align="center"><a href="../../../more/index.htm">More</a></td>
21</tr></table>
22<hr>
23<div class="spirit-nav">
24<a accesskey="p" href="the_design_of_the_library.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../metaparse.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="../move.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
25</div>
26<div class="section">
27<div class="titlepage"><div><div><h2 class="title" style="clear: both">
28<a name="metaparse.reference"></a><a name="reference"></a><a class="link" href="reference.html" title="Reference">Reference</a>
29</h2></div></div></div>
30<div class="toc"><dl class="toc">
31<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided">Parsers
32      and combinators provided by the library</a></span></dt>
33<dt><span class="section"><a href="reference.html#metaparse.reference.compile_time_data_structures_and">Compile-time
34      data structures and values</a></span></dt>
35<dt><span class="section"><a href="reference.html#metaparse.reference.string">String</a></span></dt>
36<dt><span class="section"><a href="reference.html#metaparse.reference.errors">Errors</a></span></dt>
37<dt><span class="section"><a href="reference.html#metaparse.reference.tags">Tags</a></span></dt>
38<dt><span class="section"><a href="reference.html#metaparse.reference.utilities">Utilities</a></span></dt>
39<dt><span class="section"><a href="reference.html#metaparse.reference.terms_used_by_the_library">Terms
40      used by the library</a></span></dt>
41<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical">Alphabetical</a></span></dt>
42</dl></div>
43<div class="section">
44<div class="titlepage"><div><div><h3 class="title">
45<a name="metaparse.reference.parsers_and_combinators_provided"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided" title="Parsers and combinators provided by the library">Parsers
46      and combinators provided by the library</a>
47</h3></div></div></div>
48<div class="toc"><dl class="toc">
49<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers">Parsers</a></span></dt>
50<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators">Combinators</a></span></dt>
51</dl></div>
52<div class="section">
53<div class="titlepage"><div><div><h4 class="title">
54<a name="metaparse.reference.parsers_and_combinators_provided.parsers"></a><a name="parsers"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers" title="Parsers">Parsers</a>
55</h4></div></div></div>
56<div class="toc"><dl class="toc">
57<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.character">Character</a></span></dt>
58<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.numeric">Numeric</a></span></dt>
59<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.whitespace">Whitespace</a></span></dt>
60<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.validation_and_error_reporting">Validation
61          and error reporting</a></span></dt>
62<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.miscellaneous">Miscellaneous</a></span></dt>
63</dl></div>
64<div class="section">
65<div class="titlepage"><div><div><h5 class="title">
66<a name="metaparse.reference.parsers_and_combinators_provided.parsers.character"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.character" title="Character">Character</a>
67</h5></div></div></div>
68<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
69<li class="listitem">
70                <a class="link" href="reference.html#alphanum">alphanum</a>
71              </li>
72<li class="listitem">
73                <a class="link" href="reference.html#digit">digit</a>
74              </li>
75<li class="listitem">
76                <a class="link" href="reference.html#letter">letter</a>
77              </li>
78<li class="listitem">
79                <a class="link" href="reference.html#lit">lit</a>
80              </li>
81<li class="listitem">
82                <a class="link" href="reference.html#lit_c">lit_c</a>
83              </li>
84<li class="listitem">
85                <a class="link" href="reference.html#one_char">one_char</a>
86              </li>
87<li class="listitem">
88                <a class="link" href="reference.html#one_char_except">one_char_except</a>
89              </li>
90<li class="listitem">
91                <a class="link" href="reference.html#one_char_except_c">one_char_except_c</a>
92              </li>
93<li class="listitem">
94                <a class="link" href="reference.html#range">range</a>
95              </li>
96<li class="listitem">
97                <a class="link" href="reference.html#range_c">range_c</a>
98              </li>
99<li class="listitem">
100                <a class="link" href="reference.html#space">space</a>
101              </li>
102</ul></div>
103</div>
104<div class="section">
105<div class="titlepage"><div><div><h5 class="title">
106<a name="metaparse.reference.parsers_and_combinators_provided.parsers.numeric"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.numeric" title="Numeric">Numeric</a>
107</h5></div></div></div>
108<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
109<li class="listitem">
110                <a class="link" href="reference.html#digit_val">digit_val</a>
111              </li>
112<li class="listitem">
113                <a class="link" href="reference.html#int_">int_</a>
114              </li>
115</ul></div>
116</div>
117<div class="section">
118<div class="titlepage"><div><div><h5 class="title">
119<a name="metaparse.reference.parsers_and_combinators_provided.parsers.whitespace"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.whitespace" title="Whitespace">Whitespace</a>
120</h5></div></div></div>
121<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
122<li class="listitem">
123                <a class="link" href="reference.html#space">space</a>
124              </li>
125<li class="listitem">
126                <a class="link" href="reference.html#spaces">spaces</a>
127              </li>
128</ul></div>
129</div>
130<div class="section">
131<div class="titlepage"><div><div><h5 class="title">
132<a name="metaparse.reference.parsers_and_combinators_provided.parsers.validation_and_error_reporting"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.validation_and_error_reporting" title="Validation and error reporting">Validation
133          and error reporting</a>
134</h5></div></div></div>
135<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
136<li class="listitem">
137                <a class="link" href="reference.html#empty">empty</a>
138              </li>
139<li class="listitem">
140                <a class="link" href="reference.html#fail">fail</a>
141              </li>
142</ul></div>
143</div>
144<div class="section">
145<div class="titlepage"><div><div><h5 class="title">
146<a name="metaparse.reference.parsers_and_combinators_provided.parsers.miscellaneous"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.parsers.miscellaneous" title="Miscellaneous">Miscellaneous</a>
147</h5></div></div></div>
148<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
149<li class="listitem">
150                <a class="link" href="reference.html#keyword">keyword</a>
151              </li>
152<li class="listitem">
153                <a class="link" href="reference.html#return_">return_</a>
154              </li>
155</ul></div>
156</div>
157</div>
158<div class="section">
159<div class="titlepage"><div><div><h4 class="title">
160<a name="metaparse.reference.parsers_and_combinators_provided.combinators"></a><a name="combinators"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators" title="Combinators">Combinators</a>
161</h4></div></div></div>
162<div class="toc"><dl class="toc">
163<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.validation_and_error_reporting">Validation
164          and error reporting</a></span></dt>
165<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.repetition">Repetition</a></span></dt>
166<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.selection">Selection</a></span></dt>
167<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.sequence">Sequence</a></span></dt>
168<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.result_transformation_semantic_a">Result
169          transformation (semantic actions)</a></span></dt>
170<dt><span class="section"><a href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.miscellaneous">Miscellaneous</a></span></dt>
171</dl></div>
172<div class="section">
173<div class="titlepage"><div><div><h5 class="title">
174<a name="metaparse.reference.parsers_and_combinators_provided.combinators.validation_and_error_reporting"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.validation_and_error_reporting" title="Validation and error reporting">Validation
175          and error reporting</a>
176</h5></div></div></div>
177<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
178<li class="listitem">
179                <a class="link" href="reference.html#accept_when">accept_when</a>
180              </li>
181<li class="listitem">
182                <a class="link" href="reference.html#change_error_message">change_error_message</a>
183              </li>
184<li class="listitem">
185                <a class="link" href="reference.html#entire_input">entire_input</a>
186              </li>
187<li class="listitem">
188                <a class="link" href="reference.html#except">except</a>
189              </li>
190<li class="listitem">
191                <a class="link" href="reference.html#fail_at_first_char_expected">fail_at_first_char_expected</a>
192              </li>
193<li class="listitem">
194                <a class="link" href="reference.html#transform_error">transform_error</a>
195              </li>
196<li class="listitem">
197                <a class="link" href="reference.html#transform_error_message">transform_error_message</a>
198              </li>
199</ul></div>
200</div>
201<div class="section">
202<div class="titlepage"><div><div><h5 class="title">
203<a name="metaparse.reference.parsers_and_combinators_provided.combinators.repetition"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.repetition" title="Repetition">Repetition</a>
204</h5></div></div></div>
205<p>
206            See the <a class="link" href="user_manual.html#repetition">Repetition</a> section of the
207            <a class="link" href="user_manual.html#manual">User Manual</a> for a detailed comparison of
208            the most common repetition combinators.
209          </p>
210<p>
211            <a class="link" href="user_manual.html#finding-the-right-folding-parser-combinator">Cheat-sheet</a>
212            for choosing among the <code class="computeroutput"><span class="identifier">fold</span><span class="special">*</span></code> parsers.
213          </p>
214<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
215<li class="listitem">
216                <a class="link" href="reference.html#foldl">foldl</a>
217              </li>
218<li class="listitem">
219                <a class="link" href="reference.html#foldl1">foldl1</a>
220              </li>
221<li class="listitem">
222                <a class="link" href="reference.html#foldl_reject_incomplete">foldl_reject_incomplete</a>
223              </li>
224<li class="listitem">
225                <a class="link" href="reference.html#foldl_reject_incomplete1">foldl_reject_incomplete1</a>
226              </li>
227<li class="listitem">
228                <a class="link" href="reference.html#foldl_reject_incomplete_start_with_parser">foldl_reject_incomplete_start_with_parser</a>
229              </li>
230<li class="listitem">
231                <a class="link" href="reference.html#foldl_start_with_parser">foldl_start_with_parser</a>
232              </li>
233<li class="listitem">
234                <a class="link" href="reference.html#foldr">foldr</a>
235              </li>
236<li class="listitem">
237                <a class="link" href="reference.html#foldr1">foldr1</a>
238              </li>
239<li class="listitem">
240                <a class="link" href="reference.html#foldr_reject_incomplete">foldr_reject_incomplete</a>
241              </li>
242<li class="listitem">
243                <a class="link" href="reference.html#foldr_reject_incomplete1">foldr_reject_incomplete1</a>
244              </li>
245<li class="listitem">
246                <a class="link" href="reference.html#foldr_start_with_parser">foldr_start_with_parser</a>
247              </li>
248<li class="listitem">
249                <a class="link" href="reference.html#iterate">iterate</a>
250              </li>
251<li class="listitem">
252                <a class="link" href="reference.html#iterate_c">iterate_c</a>
253              </li>
254<li class="listitem">
255                <a class="link" href="reference.html#repeated">repeated</a>
256              </li>
257<li class="listitem">
258                <a class="link" href="reference.html#repeated1">repeated1</a>
259              </li>
260<li class="listitem">
261                <a class="link" href="reference.html#repeated_reject_incomplete">repeated_reject_incomplete</a>
262              </li>
263<li class="listitem">
264                <a class="link" href="reference.html#repeated_reject_incomplete1">repeated_reject_incomplete1</a>
265              </li>
266<li class="listitem">
267                <a class="link" href="reference.html#repeated_one_of">repeated_one_of</a>
268              </li>
269<li class="listitem">
270                <a class="link" href="reference.html#repeated_one_of1">repeated_one_of1</a>
271              </li>
272</ul></div>
273</div>
274<div class="section">
275<div class="titlepage"><div><div><h5 class="title">
276<a name="metaparse.reference.parsers_and_combinators_provided.combinators.selection"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.selection" title="Selection">Selection</a>
277</h5></div></div></div>
278<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
279<li class="listitem">
280                <a class="link" href="reference.html#if_">if_</a>
281              </li>
282<li class="listitem">
283                <a class="link" href="reference.html#one_of">one_of</a>
284              </li>
285<li class="listitem">
286                <a class="link" href="reference.html#one_of_c">one_of_c</a>
287              </li>
288<li class="listitem">
289                <a class="link" href="reference.html#optional">optional</a>
290              </li>
291<li class="listitem">
292                <a class="link" href="reference.html#repeated_one_of">repeated_one_of</a>
293              </li>
294<li class="listitem">
295                <a class="link" href="reference.html#repeated_one_of1">repeated_one_of1</a>
296              </li>
297</ul></div>
298</div>
299<div class="section">
300<div class="titlepage"><div><div><h5 class="title">
301<a name="metaparse.reference.parsers_and_combinators_provided.combinators.sequence"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.sequence" title="Sequence">Sequence</a>
302</h5></div></div></div>
303<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
304<li class="listitem">
305                <a class="link" href="reference.html#first_of">first_of</a>
306              </li>
307<li class="listitem">
308                <a class="link" href="reference.html#last_of">last_of</a>
309              </li>
310<li class="listitem">
311                <a class="link" href="reference.html#middle_of">middle_of</a>
312              </li>
313<li class="listitem">
314                <a class="link" href="reference.html#nth_of">nth_of</a>
315              </li>
316<li class="listitem">
317                <a class="link" href="reference.html#nth_of_c">nth_of_c</a>
318              </li>
319<li class="listitem">
320                <a class="link" href="reference.html#sequence">sequence</a>
321              </li>
322<li class="listitem">
323                <a class="link" href="reference.html#sequence_apply">sequence_apply</a>
324              </li>
325</ul></div>
326</div>
327<div class="section">
328<div class="titlepage"><div><div><h5 class="title">
329<a name="metaparse.reference.parsers_and_combinators_provided.combinators.result_transformation_semantic_a"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.result_transformation_semantic_a" title="Result transformation (semantic actions)">Result
330          transformation (semantic actions)</a>
331</h5></div></div></div>
332<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
333<li class="listitem">
334                <a class="link" href="reference.html#always">always</a>
335              </li>
336<li class="listitem">
337                <a class="link" href="reference.html#always_c">always_c</a>
338              </li>
339<li class="listitem">
340                <a class="link" href="reference.html#transform">transform</a>
341              </li>
342</ul></div>
343</div>
344<div class="section">
345<div class="titlepage"><div><div><h5 class="title">
346<a name="metaparse.reference.parsers_and_combinators_provided.combinators.miscellaneous"></a><a class="link" href="reference.html#metaparse.reference.parsers_and_combinators_provided.combinators.miscellaneous" title="Miscellaneous">Miscellaneous</a>
347</h5></div></div></div>
348<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
349<li class="listitem">
350                <a class="link" href="reference.html#grammar">grammar</a>
351              </li>
352<li class="listitem">
353                <a class="link" href="reference.html#look_ahead">look_ahead</a>
354              </li>
355<li class="listitem">
356                <a class="link" href="reference.html#token">token</a>
357              </li>
358</ul></div>
359</div>
360</div>
361</div>
362<div class="section">
363<div class="titlepage"><div><div><h3 class="title">
364<a name="metaparse.reference.compile_time_data_structures_and"></a><a class="link" href="reference.html#metaparse.reference.compile_time_data_structures_and" title="Compile-time data structures and values">Compile-time
365      data structures and values</a>
366</h3></div></div></div>
367<div class="toc"><dl class="toc">
368<dt><span class="section"><a href="reference.html#metaparse.reference.compile_time_data_structures_and.result_of_parsing">Result
369        of parsing</a></span></dt>
370<dt><span class="section"><a href="reference.html#metaparse.reference.compile_time_data_structures_and.source_position">Source
371        position</a></span></dt>
372</dl></div>
373<div class="section">
374<div class="titlepage"><div><div><h4 class="title">
375<a name="metaparse.reference.compile_time_data_structures_and.result_of_parsing"></a><a class="link" href="reference.html#metaparse.reference.compile_time_data_structures_and.result_of_parsing" title="Result of parsing">Result
376        of parsing</a>
377</h4></div></div></div>
378<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
379<li class="listitem">
380              <a class="link" href="reference.html#accept">accept</a>
381            </li>
382<li class="listitem">
383              <a class="link" href="reference.html#get_message">get_message</a>
384            </li>
385<li class="listitem">
386              <a class="link" href="reference.html#get_position">get_position</a>
387            </li>
388<li class="listitem">
389              <a class="link" href="reference.html#get_remaining">get_remaining</a>
390            </li>
391<li class="listitem">
392              <a class="link" href="reference.html#get_result">get_result</a>
393            </li>
394<li class="listitem">
395              <a class="link" href="reference.html#is_error">is_error</a>
396            </li>
397<li class="listitem">
398              <a class="link" href="reference.html#reject">reject</a>
399            </li>
400</ul></div>
401</div>
402<div class="section">
403<div class="titlepage"><div><div><h4 class="title">
404<a name="metaparse.reference.compile_time_data_structures_and.source_position"></a><a class="link" href="reference.html#metaparse.reference.compile_time_data_structures_and.source_position" title="Source position">Source
405        position</a>
406</h4></div></div></div>
407<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
408<li class="listitem">
409              <a class="link" href="reference.html#get_col">get_col</a>
410            </li>
411<li class="listitem">
412              <a class="link" href="reference.html#get_line">get_line</a>
413            </li>
414<li class="listitem">
415              <a class="link" href="reference.html#get_prev_char">get_prev_char</a>
416            </li>
417<li class="listitem">
418              <a class="link" href="reference.html#next_char">next_char</a>
419            </li>
420<li class="listitem">
421              <a class="link" href="reference.html#next_line">next_line</a>
422            </li>
423<li class="listitem">
424              <a class="link" href="reference.html#source_position">source_position</a>
425            </li>
426<li class="listitem">
427              <a class="link" href="reference.html#source_position_tag">source_position_tag</a>
428            </li>
429<li class="listitem">
430              <a class="link" href="reference.html#start">start</a>
431            </li>
432</ul></div>
433</div>
434</div>
435<div class="section">
436<div class="titlepage"><div><div><h3 class="title">
437<a name="metaparse.reference.string"></a><a name="ref-string"></a><a class="link" href="reference.html#metaparse.reference.string" title="String">String</a>
438</h3></div></div></div>
439<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
440<li class="listitem">
441            <a class="link" href="reference.html#string">string</a>
442          </li>
443<li class="listitem">
444            <a class="link" href="reference.html#string_tag">string_tag</a>
445          </li>
446<li class="listitem">
447            <a class="link" href="reference.html#BOOST_METAPARSE_STRING">BOOST_METAPARSE_STRING</a>
448          </li>
449</ul></div>
450</div>
451<div class="section">
452<div class="titlepage"><div><div><h3 class="title">
453<a name="metaparse.reference.errors"></a><a class="link" href="reference.html#metaparse.reference.errors" title="Errors">Errors</a>
454</h3></div></div></div>
455<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
456<li class="listitem">
457            <a class="link" href="reference.html#digit_expected">digit_expected</a>
458          </li>
459<li class="listitem">
460            <a class="link" href="reference.html#end_of_input_expected">end_of_input_expected</a>
461          </li>
462<li class="listitem">
463            <a class="link" href="reference.html#expected_to_fail">expected_to_fail</a>
464          </li>
465<li class="listitem">
466            <a class="link" href="reference.html#index_out_of_range">index_out_of_range</a>
467          </li>
468<li class="listitem">
469            <a class="link" href="reference.html#letter_expected">letter_expected</a>
470          </li>
471<li class="listitem">
472            <a class="link" href="reference.html#literal_expected">literal_expected</a>
473          </li>
474<li class="listitem">
475            <a class="link" href="reference.html#none_of_the_expected_cases_found">none_of_the_expected_cases_found</a>
476          </li>
477<li class="listitem">
478            <a class="link" href="reference.html#unexpected_character">unexpected_character</a>
479          </li>
480<li class="listitem">
481            <a class="link" href="reference.html#unexpected_end_of_input">unexpected_end_of_input</a>
482          </li>
483<li class="listitem">
484            <a class="link" href="reference.html#unpaired">unpaired</a>
485          </li>
486<li class="listitem">
487            <a class="link" href="reference.html#whitespace_expected">whitespace_expected</a>
488          </li>
489</ul></div>
490</div>
491<div class="section">
492<div class="titlepage"><div><div><h3 class="title">
493<a name="metaparse.reference.tags"></a><a class="link" href="reference.html#metaparse.reference.tags" title="Tags">Tags</a>
494</h3></div></div></div>
495<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
496<li class="listitem">
497            <a class="link" href="reference.html#accept_tag">accept_tag</a>
498          </li>
499<li class="listitem">
500            <a class="link" href="reference.html#fail_tag">fail_tag</a>
501          </li>
502<li class="listitem">
503            <a class="link" href="reference.html#source_position_tag">source_position_tag</a>
504          </li>
505</ul></div>
506</div>
507<div class="section">
508<div class="titlepage"><div><div><h3 class="title">
509<a name="metaparse.reference.utilities"></a><a class="link" href="reference.html#metaparse.reference.utilities" title="Utilities">Utilities</a>
510</h3></div></div></div>
511<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
512<li class="listitem">
513            <a class="link" href="reference.html#build_parser">build_parser</a>
514          </li>
515<li class="listitem">
516            <a class="link" href="reference.html#debug_parsing_error">debug_parsing_error</a>
517          </li>
518<li class="listitem">
519            <a class="link" href="reference.html#BOOST_METAPARSE_DEFINE_ERROR">BOOST_METAPARSE_DEFINE_ERROR</a>
520          </li>
521<li class="listitem">
522            <a class="link" href="reference.html#BOOST_METAPARSE_VERSION">BOOST_METAPARSE_VERSION</a>
523          </li>
524<li class="listitem">
525            <a class="link" href="reference.html#unless_error">unless_error</a>
526          </li>
527</ul></div>
528<p>
529        Metaparse uses a number of general purpose metafunctions and metafunction
530        classes.
531      </p>
532<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
533<li class="listitem">
534            <a class="link" href="reference.html#digit_to_int">digit_to_int</a>
535          </li>
536<li class="listitem">
537            <a class="link" href="reference.html#digit_to_int_c">digit_to_int_c</a>
538          </li>
539<li class="listitem">
540            <a class="link" href="reference.html#int_to_digit">int_to_digit</a>
541          </li>
542<li class="listitem">
543            <a class="link" href="reference.html#int_to_digit_c">int_to_digit_c</a>
544          </li>
545<li class="listitem">
546            <a class="link" href="reference.html#in_range">in_range</a>
547          </li>
548<li class="listitem">
549            <a class="link" href="reference.html#in_range_c">in_range_c</a>
550          </li>
551<li class="listitem">
552            <a class="link" href="reference.html#is_digit">is_digit</a>
553          </li>
554<li class="listitem">
555            <a class="link" href="reference.html#is_lcase_letter">is_lcase_letter</a>
556          </li>
557<li class="listitem">
558            <a class="link" href="reference.html#is_letter">is_letter</a>
559          </li>
560<li class="listitem">
561            <a class="link" href="reference.html#is_ucase_letter">is_ucase_letter</a>
562          </li>
563<li class="listitem">
564            <a class="link" href="reference.html#is_whitespace">is_whitespace</a>
565          </li>
566<li class="listitem">
567            <a class="link" href="reference.html#is_whitespace_c">is_whitespace_c</a>
568          </li>
569</ul></div>
570</div>
571<div class="section">
572<div class="titlepage"><div><div><h3 class="title">
573<a name="metaparse.reference.terms_used_by_the_library"></a><a class="link" href="reference.html#metaparse.reference.terms_used_by_the_library" title="Terms used by the library">Terms
574      used by the library</a>
575</h3></div></div></div>
576<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
577<li class="listitem">
578            <a class="link" href="reference.html#boxed_value">boxed value</a>
579          </li>
580<li class="listitem">
581            <a class="link" href="reference.html#currying">currying</a>
582          </li>
583<li class="listitem">
584            <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
585          </li>
586<li class="listitem">
587            <a class="link" href="reference.html#nullary_metafunction">nullary template metafunction</a>
588          </li>
589<li class="listitem">
590            <a class="link" href="reference.html#parser">parser</a>
591          </li>
592<li class="listitem">
593            <a class="link" href="reference.html#parser_combinator">parser combinator</a>
594          </li>
595<li class="listitem">
596            <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
597          </li>
598<li class="listitem">
599            <a class="link" href="reference.html#predicate">predicate</a>
600          </li>
601<li class="listitem">
602            <a class="link" href="reference.html#tag">tag</a>
603          </li>
604<li class="listitem">
605            <a class="link" href="reference.html#metafunction">template metafunction</a>
606          </li>
607<li class="listitem">
608            <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
609          </li>
610<li class="listitem">
611            <a class="link" href="reference.html#metaprogramming_value">template metaprogramming value</a>
612          </li>
613</ul></div>
614</div>
615<div class="section">
616<div class="titlepage"><div><div><h3 class="title">
617<a name="metaparse.reference.alphabetical"></a><a class="link" href="reference.html#metaparse.reference.alphabetical" title="Alphabetical">Alphabetical</a>
618</h3></div></div></div>
619<div class="toc"><dl class="toc">
620<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.accept">accept</a></span></dt>
621<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.accept_tag">accept_tag</a></span></dt>
622<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.accept_when">accept_when</a></span></dt>
623<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.alphanum">alphanum</a></span></dt>
624<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.always_c">always_c</a></span></dt>
625<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.always">always</a></span></dt>
626<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error">BOOST_METAPARSE_DEFINE_ERROR</a></span></dt>
627<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string">BOOST_METAPARSE_STRING</a></span></dt>
628<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version">BOOST_METAPARSE_VERSION</a></span></dt>
629<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.boxed_value">Boxed
630        value</a></span></dt>
631<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.build_parser">build_parser</a></span></dt>
632<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.change_error_message">change_error_message</a></span></dt>
633<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.currying">Currying</a></span></dt>
634<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.debug_parsing_error">debug_parsing_error</a></span></dt>
635<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.digit_expected">digit_expected</a></span></dt>
636<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.digit">digit</a></span></dt>
637<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.digit_to_int_c">digit_to_int_c</a></span></dt>
638<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.digit_to_int">digit_to_int</a></span></dt>
639<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.digit_val">digit_val</a></span></dt>
640<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.empty">empty</a></span></dt>
641<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.end_of_input_expected">end_of_input_expected</a></span></dt>
642<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.entire_input">entire_input</a></span></dt>
643<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.except">except</a></span></dt>
644<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.expected_to_fail">expected_to_fail</a></span></dt>
645<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected">fail_at_first_char_expected</a></span></dt>
646<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.fail">fail</a></span></dt>
647<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.fail_tag">fail_tag</a></span></dt>
648<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.first_of">first_of</a></span></dt>
649<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl1">foldl1</a></span></dt>
650<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete">foldl_reject_incomplete</a></span></dt>
651<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1">foldl_reject_incomplete1</a></span></dt>
652<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi">foldl_reject_incomplete_start_with_parser</a></span></dt>
653<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser">foldl_start_with_parser</a></span></dt>
654<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldl">foldl</a></span></dt>
655<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldr1">foldr1</a></span></dt>
656<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete">foldr_reject_incomplete</a></span></dt>
657<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1">foldr_reject_incomplete1</a></span></dt>
658<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser">foldr_start_with_parser</a></span></dt>
659<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.foldr">foldr</a></span></dt>
660<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_col">get_col</a></span></dt>
661<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_line">get_line</a></span></dt>
662<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_message">get_message</a></span></dt>
663<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_position">get_position</a></span></dt>
664<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_prev_char">get_prev_char</a></span></dt>
665<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_remaining">get_remaining</a></span></dt>
666<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.get_result">get_result</a></span></dt>
667<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.grammar">grammar</a></span></dt>
668<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.if">if_</a></span></dt>
669<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.index_out_of_range">index_out_of_range</a></span></dt>
670<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.in_range_c">in_range_c</a></span></dt>
671<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.in_range">in_range</a></span></dt>
672<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.int">int_</a></span></dt>
673<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.int_to_digit_c">int_to_digit_c</a></span></dt>
674<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.int_to_digit">int_to_digit</a></span></dt>
675<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_digit">is_digit</a></span></dt>
676<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_error">is_error</a></span></dt>
677<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_lcase_letter">is_lcase_letter</a></span></dt>
678<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_letter">is_letter</a></span></dt>
679<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_ucase_letter">is_ucase_letter</a></span></dt>
680<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_whitespace_c">is_whitespace_c</a></span></dt>
681<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.is_whitespace">is_whitespace</a></span></dt>
682<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.iterate_c">iterate_c</a></span></dt>
683<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.iterate">iterate</a></span></dt>
684<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.keyword">keyword</a></span></dt>
685<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.last_of">last_of</a></span></dt>
686<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.lazy_template_metafunction">Lazy
687        template metafunction</a></span></dt>
688<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.letter_expected">letter_expected</a></span></dt>
689<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.letter">letter</a></span></dt>
690<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.lit_c">lit_c</a></span></dt>
691<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.literal_expected">literal_expected</a></span></dt>
692<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.lit">lit</a></span></dt>
693<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.look_ahead">look_ahead</a></span></dt>
694<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.template_metafunction_class">Template
695        metafunction class</a></span></dt>
696<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.template_metafunction">Template
697        metafunction</a></span></dt>
698<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.template_metaprogramming_value">Template
699        metaprogramming value</a></span></dt>
700<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.middle_of">middle_of</a></span></dt>
701<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.next_char">next_char</a></span></dt>
702<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.next_line">next_line</a></span></dt>
703<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.none_of_the_expected_cases_found">none_of_the_expected_cases_found</a></span></dt>
704<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.nth_of_c">nth_of_c</a></span></dt>
705<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.nth_of">nth_of</a></span></dt>
706<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.nullary_template_metafunction">Nullary
707        template metafunction</a></span></dt>
708<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.one_char_except_c">one_char_except_c</a></span></dt>
709<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.one_char_except">one_char_except</a></span></dt>
710<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.one_char">one_char</a></span></dt>
711<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.one_of_c">one_of_c</a></span></dt>
712<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.one_of">one_of</a></span></dt>
713<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.optional">optional</a></span></dt>
714<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.parser_combinator">Parser
715        combinator</a></span></dt>
716<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.parser">Parser</a></span></dt>
717<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.parsing_error_message">Parsing
718        error message</a></span></dt>
719<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.predicate">Predicate</a></span></dt>
720<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.range_c">range_c</a></span></dt>
721<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.range">range</a></span></dt>
722<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.reject">reject</a></span></dt>
723<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated1">repeated1</a></span></dt>
724<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1">repeated_reject_incomplete1</a></span></dt>
725<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete">repeated_reject_incomplete</a></span></dt>
726<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated_one_of1">repeated_one_of1</a></span></dt>
727<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated_one_of">repeated_one_of</a></span></dt>
728<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.repeated">repeated</a></span></dt>
729<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.return">return_</a></span></dt>
730<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.sequence">sequence</a></span></dt>
731<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.sequence_apply">sequence_apply</a></span></dt>
732<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.source_position">source_position</a></span></dt>
733<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.source_position_tag">source_position_tag</a></span></dt>
734<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.space">space</a></span></dt>
735<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.spaces">spaces</a></span></dt>
736<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.start">start</a></span></dt>
737<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.string">string</a></span></dt>
738<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.string_tag">string_tag</a></span></dt>
739<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.tag">Tag</a></span></dt>
740<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.token">token</a></span></dt>
741<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.transform_error_message">transform_error_message</a></span></dt>
742<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.transform_error">transform_error</a></span></dt>
743<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.transform">transform</a></span></dt>
744<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.unexpected_character">unexpected_character</a></span></dt>
745<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.unexpected_end_of_input">unexpected_end_of_input</a></span></dt>
746<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.unless_error">unless_error</a></span></dt>
747<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.unpaired">unpaired</a></span></dt>
748<dt><span class="section"><a href="reference.html#metaparse.reference.alphabetical.whitespace_expected">whitespace_expected</a></span></dt>
749</dl></div>
750<div class="section">
751<div class="titlepage"><div><div><h4 class="title">
752<a name="metaparse.reference.alphabetical.accept"></a><a name="accept"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.accept" title="accept">accept</a>
753</h4></div></div></div>
754<h2>
755<a name="metaparse.reference.alphabetical.accept.h0"></a>
756          <span class="phrase"><a name="metaparse.reference.alphabetical.accept.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept.synopsis">Synopsis</a>
757        </h2>
758<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Result</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Remaining</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Pos</span><span class="special">&gt;</span>
759<span class="keyword">struct</span> <span class="identifier">accept</span><span class="special">;</span>
760</pre>
761<p>
762          This is a <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
763          value</a>.
764        </p>
765<div class="table">
766<a name="metaparse.reference.alphabetical.accept.arguments"></a><p class="title"><b>Table 24.2. Arguments</b></p>
767<div class="table-contents"><table class="table" summary="Arguments">
768<colgroup>
769<col>
770<col>
771</colgroup>
772<thead><tr>
773<th>
774                  <p>
775                    Name
776                  </p>
777                </th>
778<th>
779                  <p>
780                    Type
781                  </p>
782                </th>
783</tr></thead>
784<tbody>
785<tr>
786<td>
787                  <p>
788                    <code class="computeroutput"><span class="identifier">Result</span></code>
789                  </p>
790                </td>
791<td>
792                  <p>
793                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
794                    value</a>
795                  </p>
796                </td>
797</tr>
798<tr>
799<td>
800                  <p>
801                    <code class="computeroutput"><span class="identifier">Remaining</span></code>
802                  </p>
803                </td>
804<td>
805                  <p>
806                    <a class="link" href="reference.html#string">string</a>
807                  </p>
808                </td>
809</tr>
810<tr>
811<td>
812                  <p>
813                    <code class="computeroutput"><span class="identifier">Pos</span></code>
814                  </p>
815                </td>
816<td>
817                  <p>
818                    <a class="link" href="reference.html#source_position">source position</a>
819                  </p>
820                </td>
821</tr>
822</tbody>
823</table></div>
824</div>
825<br class="table-break"><h2>
826<a name="metaparse.reference.alphabetical.accept.h1"></a>
827          <span class="phrase"><a name="metaparse.reference.alphabetical.accept.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept.description">Description</a>
828        </h2>
829<p>
830          Values representing a successful parser application. It behaves as a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>: when it
831          is evaluated as a metafunction, it returns itself with its arguments evaluated.
832          See expression semantics for further details.
833        </p>
834<div class="note"><table border="0" summary="Note">
835<tr>
836<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
837<th align="left">Note</th>
838</tr>
839<tr><td align="left" valign="top"><p>
840            Note that for backward compatibility when <code class="computeroutput"><span class="identifier">Result</span><span class="special">::</span><span class="identifier">type</span></code>
841            is not defined, <code class="computeroutput"><span class="identifier">accept</span><span class="special">&lt;....&gt;::</span><span class="identifier">type</span></code>
842            does not evaluate <code class="computeroutput"><span class="identifier">Result</span></code>.
843            For example <code class="computeroutput"><span class="identifier">accept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
844            <span class="identifier">start</span><span class="special">&gt;::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">accept</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">)::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">start</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span></code>. Using types that are not template
845            metaprogramming values as <code class="computeroutput"><span class="identifier">Result</span></code>
846            is deprecated and will not work in future versions of the library.
847          </p></td></tr>
848</table></div>
849<h2>
850<a name="metaparse.reference.alphabetical.accept.h2"></a>
851          <span class="phrase"><a name="metaparse.reference.alphabetical.accept.expressions_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept.expressions_semantics">Expressions
852          semantics</a>
853        </h2>
854<p>
855          For any <code class="computeroutput"><span class="identifier">r</span></code> template metaprogramming
856          value, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string
857          and <code class="computeroutput"><span class="identifier">p</span></code> source position the
858          following are equivalent:
859        </p>
860<pre class="programlisting"><span class="identifier">accept</span><span class="special">&lt;</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">type</span>
861
862<span class="identifier">accept</span><span class="special">&lt;</span><span class="identifier">r</span><span class="special">,</span> <span class="identifier">s</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">p</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span>
863</pre>
864<h2>
865<a name="metaparse.reference.alphabetical.accept.h3"></a>
866          <span class="phrase"><a name="metaparse.reference.alphabetical.accept.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept.header">Header</a>
867        </h2>
868<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">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
869</pre>
870<h2>
871<a name="metaparse.reference.alphabetical.accept.h4"></a>
872          <span class="phrase"><a name="metaparse.reference.alphabetical.accept.operations"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept.operations">Operations</a>
873        </h2>
874<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
875<li class="listitem">
876              <a class="link" href="reference.html#get_position"><code class="computeroutput"><span class="identifier">get_position</span></code></a>
877            </li>
878<li class="listitem">
879              <a class="link" href="reference.html#get_remaining"><code class="computeroutput"><span class="identifier">get_remaining</span></code></a>
880            </li>
881<li class="listitem">
882              <a class="link" href="reference.html#get_result"><code class="computeroutput"><span class="identifier">get_result</span></code></a>
883            </li>
884</ul></div>
885</div>
886<div class="section">
887<div class="titlepage"><div><div><h4 class="title">
888<a name="metaparse.reference.alphabetical.accept_tag"></a><a name="accept_tag"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_tag" title="accept_tag">accept_tag</a>
889</h4></div></div></div>
890<h2>
891<a name="metaparse.reference.alphabetical.accept_tag.h0"></a>
892          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_tag.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_tag.synopsis">Synopsis</a>
893        </h2>
894<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">accept_tag</span><span class="special">;</span>
895</pre>
896<p>
897          This is a <a class="link" href="reference.html#tag">tag</a>.
898        </p>
899<h2>
900<a name="metaparse.reference.alphabetical.accept_tag.h1"></a>
901          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_tag.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_tag.description">Description</a>
902        </h2>
903<p>
904          This is the tag of the values returned by a parser when parsing was successful.
905        </p>
906<h2>
907<a name="metaparse.reference.alphabetical.accept_tag.h2"></a>
908          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_tag.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_tag.header">Header</a>
909        </h2>
910<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">metaparse</span><span class="special">/</span><span class="identifier">accept_tag</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
911</pre>
912</div>
913<div class="section">
914<div class="titlepage"><div><div><h4 class="title">
915<a name="metaparse.reference.alphabetical.accept_when"></a><a name="accept_when"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when" title="accept_when">accept_when</a>
916</h4></div></div></div>
917<h2>
918<a name="metaparse.reference.alphabetical.accept_when.h0"></a>
919          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_when.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when.synopsis">Synopsis</a>
920        </h2>
921<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Pred</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Msg</span><span class="special">&gt;</span>
922<span class="keyword">struct</span> <span class="identifier">accept_when</span><span class="special">;</span>
923</pre>
924<p>
925          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
926        </p>
927<div class="table">
928<a name="metaparse.reference.alphabetical.accept_when.arguments"></a><p class="title"><b>Table 24.3. Arguments</b></p>
929<div class="table-contents"><table class="table" summary="Arguments">
930<colgroup>
931<col>
932<col>
933</colgroup>
934<thead><tr>
935<th>
936                  <p>
937                    Name
938                  </p>
939                </th>
940<th>
941                  <p>
942                    Type
943                  </p>
944                </th>
945</tr></thead>
946<tbody>
947<tr>
948<td>
949                  <p>
950                    <code class="computeroutput"><span class="identifier">P</span></code>
951                  </p>
952                </td>
953<td>
954                  <p>
955                    <a class="link" href="reference.html#parser">parser</a>
956                  </p>
957                </td>
958</tr>
959<tr>
960<td>
961                  <p>
962                    <code class="computeroutput"><span class="identifier">Pred</span></code>
963                  </p>
964                </td>
965<td>
966                  <p>
967                    <a class="link" href="reference.html#predicate">predicate</a>
968                  </p>
969                </td>
970</tr>
971<tr>
972<td>
973                  <p>
974                    <code class="computeroutput"><span class="identifier">Msg</span></code>
975                  </p>
976                </td>
977<td>
978                  <p>
979                    <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
980                  </p>
981                </td>
982</tr>
983</tbody>
984</table></div>
985</div>
986<br class="table-break"><h2>
987<a name="metaparse.reference.alphabetical.accept_when.h1"></a>
988          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_when.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when.description">Description</a>
989        </h2>
990<p>
991          It parses the input with <code class="computeroutput"><span class="identifier">P</span></code>.
992          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input,
993          <code class="computeroutput"><span class="identifier">accept_when</span></code> rejects it
994          as well. When <code class="computeroutput"><span class="identifier">P</span></code> accepts
995          it, <code class="computeroutput"><span class="identifier">accept_when</span></code> evaluates
996          <code class="computeroutput"><span class="identifier">Pred</span></code> with the result of
997          parsing the input with <code class="computeroutput"><span class="identifier">P</span></code>.
998          When <code class="computeroutput"><span class="identifier">Pred</span></code> returns <code class="computeroutput"><span class="keyword">true</span></code>, <code class="computeroutput"><span class="identifier">accept_when</span></code>
999          accepts the input and the result of parsing will be what <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise <code class="computeroutput"><span class="identifier">accept_when</span></code>
1000          rejects the input and <code class="computeroutput"><span class="identifier">Msg</span></code>
1001          is used as the error reason.
1002        </p>
1003<h2>
1004<a name="metaparse.reference.alphabetical.accept_when.h2"></a>
1005          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_when.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when.header">Header</a>
1006        </h2>
1007<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">metaparse</span><span class="special">/</span><span class="identifier">accept_when</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1008</pre>
1009<h2>
1010<a name="metaparse.reference.alphabetical.accept_when.h3"></a>
1011          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_when.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when.expression_semantics">Expression
1012          semantics</a>
1013        </h2>
1014<p>
1015          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">pred</span></code> predicate, <code class="computeroutput"><span class="identifier">msg</span></code>
1016          parsing error message, <code class="computeroutput"><span class="identifier">s</span></code>
1017          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
1018          source position
1019        </p>
1020<pre class="programlisting"><span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pred</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;</span><span class="identifier">i</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
1021</pre>
1022<p>
1023          is equivalent to
1024        </p>
1025<pre class="programlisting"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
1026</pre>
1027<p>
1028          when <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> doesn't return an error and <code class="computeroutput"><span class="identifier">pred</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;&gt;::</span><span class="identifier">type</span></code>
1029          is <code class="computeroutput"><span class="keyword">true</span></code>. Otherwise it is equivalent
1030          to
1031        </p>
1032<pre class="programlisting"><span class="identifier">fail</span><span class="special">&lt;</span><span class="identifier">msg</span><span class="special">&gt;</span>
1033</pre>
1034<h2>
1035<a name="metaparse.reference.alphabetical.accept_when.h4"></a>
1036          <span class="phrase"><a name="metaparse.reference.alphabetical.accept_when.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.accept_when.example">Example</a>
1037        </h2>
1038<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">metaparse</span><span class="special">/</span><span class="identifier">accept_when</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1039<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">one_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1040<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1041<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1042<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1043<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1044<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1045<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1046
1047<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1048
1049<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">digit_expected</span><span class="special">,</span> <span class="string">"Digit expected"</span><span class="special">);</span>
1050
1051<span class="keyword">using</span> <span class="identifier">accept_digit</span> <span class="special">=</span> <span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">&lt;&gt;,</span> <span class="identifier">digit_expected</span><span class="special">&gt;;</span>
1052
1053<span class="keyword">static_assert</span><span class="special">(</span>
1054  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
1055    <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
1056  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1057  <span class="string">"accept_digit should accept a digit"</span>
1058<span class="special">);</span>
1059
1060<span class="keyword">static_assert</span><span class="special">(</span>
1061  <span class="identifier">get_result</span><span class="special">&lt;</span>
1062    <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
1063  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
1064  <span class="string">"the result of parsing should be the character value"</span>
1065<span class="special">);</span>
1066
1067<span class="keyword">static_assert</span><span class="special">(</span>
1068  <span class="identifier">is_error</span><span class="special">&lt;</span>
1069    <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
1070  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1071  <span class="string">"accept_digit should reject a character that is not a digit"</span>
1072<span class="special">);</span>
1073</pre>
1074</div>
1075<div class="section">
1076<div class="titlepage"><div><div><h4 class="title">
1077<a name="metaparse.reference.alphabetical.alphanum"></a><a name="alphanum"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum" title="alphanum">alphanum</a>
1078</h4></div></div></div>
1079<h2>
1080<a name="metaparse.reference.alphabetical.alphanum.h0"></a>
1081          <span class="phrase"><a name="metaparse.reference.alphabetical.alphanum.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum.synopsis">Synopsis</a>
1082        </h2>
1083<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">alphanum</span><span class="special">;</span>
1084</pre>
1085<p>
1086          This is a <a class="link" href="reference.html#parser">parser</a>.
1087        </p>
1088<h2>
1089<a name="metaparse.reference.alphabetical.alphanum.h1"></a>
1090          <span class="phrase"><a name="metaparse.reference.alphabetical.alphanum.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum.description">Description</a>
1091        </h2>
1092<p>
1093          It accepts one character in the range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">z</span></code>,
1094          <code class="computeroutput"><span class="identifier">A</span><span class="special">-</span><span class="identifier">Z</span></code> or <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>. The result
1095          of the parser is the accepted character.
1096        </p>
1097<h2>
1098<a name="metaparse.reference.alphabetical.alphanum.h2"></a>
1099          <span class="phrase"><a name="metaparse.reference.alphabetical.alphanum.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum.header">Header</a>
1100        </h2>
1101<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">metaparse</span><span class="special">/</span><span class="identifier">alphanum</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1102</pre>
1103<h2>
1104<a name="metaparse.reference.alphabetical.alphanum.h3"></a>
1105          <span class="phrase"><a name="metaparse.reference.alphabetical.alphanum.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum.expression_semantics">Expression
1106          semantics</a>
1107        </h2>
1108<p>
1109          The following are equivalent:
1110        </p>
1111<pre class="programlisting"><span class="identifier">alphanum</span>
1112
1113<span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">letter</span><span class="special">&gt;</span>
1114</pre>
1115<h2>
1116<a name="metaparse.reference.alphabetical.alphanum.h4"></a>
1117          <span class="phrase"><a name="metaparse.reference.alphabetical.alphanum.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.alphanum.example">Example</a>
1118        </h2>
1119<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">metaparse</span><span class="special">/</span><span class="identifier">alphanum</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1120<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1121<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1122<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1123<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1124
1125<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1126
1127<span class="keyword">static_assert</span><span class="special">(</span>
1128  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1129  <span class="string">"alphanum should accept a digit"</span>
1130<span class="special">);</span>
1131
1132<span class="keyword">static_assert</span><span class="special">(</span>
1133  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1134  <span class="string">"alphanum should accept a character"</span>
1135<span class="special">);</span>
1136
1137<span class="keyword">static_assert</span><span class="special">(</span>
1138  <span class="identifier">get_result</span><span class="special">&lt;</span>
1139    <span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
1140  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
1141  <span class="string">"the result of parsing should be the character value"</span>
1142<span class="special">);</span>
1143
1144<span class="keyword">static_assert</span><span class="special">(</span>
1145  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">","</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1146  <span class="string">"alphanum should reject a comma"</span>
1147<span class="special">);</span>
1148</pre>
1149</div>
1150<div class="section">
1151<div class="titlepage"><div><div><h4 class="title">
1152<a name="metaparse.reference.alphabetical.always_c"></a><a name="always_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c" title="always_c">always_c</a>
1153</h4></div></div></div>
1154<h2>
1155<a name="metaparse.reference.alphabetical.always_c.h0"></a>
1156          <span class="phrase"><a name="metaparse.reference.alphabetical.always_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c.synopsis">Synopsis</a>
1157        </h2>
1158<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1159<span class="keyword">struct</span> <span class="identifier">always_c</span><span class="special">;</span>
1160</pre>
1161<p>
1162          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
1163        </p>
1164<div class="table">
1165<a name="metaparse.reference.alphabetical.always_c.arguments"></a><p class="title"><b>Table 24.4. Arguments</b></p>
1166<div class="table-contents"><table class="table" summary="Arguments">
1167<colgroup>
1168<col>
1169<col>
1170</colgroup>
1171<thead><tr>
1172<th>
1173                  <p>
1174                    Name
1175                  </p>
1176                </th>
1177<th>
1178                  <p>
1179                    Type
1180                  </p>
1181                </th>
1182</tr></thead>
1183<tbody>
1184<tr>
1185<td>
1186                  <p>
1187                    <code class="computeroutput"><span class="identifier">C</span></code>
1188                  </p>
1189                </td>
1190<td>
1191                  <p>
1192                    character
1193                  </p>
1194                </td>
1195</tr>
1196<tr>
1197<td>
1198                  <p>
1199                    <code class="computeroutput"><span class="identifier">T</span></code>
1200                  </p>
1201                </td>
1202<td>
1203                  <p>
1204                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
1205                    value</a>
1206                  </p>
1207                </td>
1208</tr>
1209</tbody>
1210</table></div>
1211</div>
1212<br class="table-break"><h2>
1213<a name="metaparse.reference.alphabetical.always_c.h1"></a>
1214          <span class="phrase"><a name="metaparse.reference.alphabetical.always_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c.description">Description</a>
1215        </h2>
1216<p>
1217          It accepts inputs beginning with the <code class="computeroutput"><span class="identifier">C</span></code>
1218          character. It consumes that character and the result of parsing is <code class="computeroutput"><span class="identifier">T</span></code>. Other inputs as rejected.
1219        </p>
1220<h2>
1221<a name="metaparse.reference.alphabetical.always_c.h2"></a>
1222          <span class="phrase"><a name="metaparse.reference.alphabetical.always_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c.header">Header</a>
1223        </h2>
1224<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">metaparse</span><span class="special">/</span><span class="identifier">always_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1225</pre>
1226<h2>
1227<a name="metaparse.reference.alphabetical.always_c.h3"></a>
1228          <span class="phrase"><a name="metaparse.reference.alphabetical.always_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c.expression_semantics">Expression
1229          semantics</a>
1230        </h2>
1231<p>
1232          For any <code class="computeroutput"><span class="identifier">c</span></code> character and
1233          <code class="computeroutput"><span class="identifier">t</span></code> class the following are
1234          equivalent:
1235        </p>
1236<pre class="programlisting"><span class="identifier">always_c</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">,</span> <span class="identifier">t</span><span class="special">&gt;</span>
1237
1238<span class="identifier">always</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;,</span> <span class="identifier">t</span><span class="special">&gt;</span>
1239</pre>
1240<h2>
1241<a name="metaparse.reference.alphabetical.always_c.h4"></a>
1242          <span class="phrase"><a name="metaparse.reference.alphabetical.always_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always_c.example">Example</a>
1243        </h2>
1244<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">metaparse</span><span class="special">/</span><span class="identifier">always_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1245<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1246<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1247<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1248<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1249
1250<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1251
1252<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1253
1254<span class="keyword">using</span> <span class="identifier">always13</span> <span class="special">=</span> <span class="identifier">always_c</span><span class="special">&lt;</span><span class="char">'x'</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;;</span>
1255
1256<span class="keyword">static_assert</span><span class="special">(</span>
1257  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1258  <span class="string">"always13 should accept x"</span>
1259<span class="special">);</span>
1260
1261<span class="keyword">static_assert</span><span class="special">(</span>
1262  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1263    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
1264    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
1265  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1266  <span class="string">"the result of parsing should be the integral_constant type"</span>
1267<span class="special">);</span>
1268
1269<span class="keyword">static_assert</span><span class="special">(</span>
1270  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"y"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1271  <span class="string">"always13 should reject characters other than x"</span>
1272<span class="special">);</span>
1273</pre>
1274</div>
1275<div class="section">
1276<div class="titlepage"><div><div><h4 class="title">
1277<a name="metaparse.reference.alphabetical.always"></a><a name="always"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.always" title="always">always</a>
1278</h4></div></div></div>
1279<h2>
1280<a name="metaparse.reference.alphabetical.always.h0"></a>
1281          <span class="phrase"><a name="metaparse.reference.alphabetical.always.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always.synopsis">Synopsis</a>
1282        </h2>
1283<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
1284<span class="keyword">struct</span> <span class="identifier">always</span><span class="special">;</span>
1285</pre>
1286<p>
1287          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
1288        </p>
1289<div class="table">
1290<a name="metaparse.reference.alphabetical.always.arguments"></a><p class="title"><b>Table 24.5. Arguments</b></p>
1291<div class="table-contents"><table class="table" summary="Arguments">
1292<colgroup>
1293<col>
1294<col>
1295</colgroup>
1296<thead><tr>
1297<th>
1298                  <p>
1299                    Name
1300                  </p>
1301                </th>
1302<th>
1303                  <p>
1304                    Type
1305                  </p>
1306                </th>
1307</tr></thead>
1308<tbody>
1309<tr>
1310<td>
1311                  <p>
1312                    <code class="computeroutput"><span class="identifier">P</span></code>
1313                  </p>
1314                </td>
1315<td>
1316                  <p>
1317                    <a class="link" href="reference.html#parser">parser</a>
1318                  </p>
1319                </td>
1320</tr>
1321<tr>
1322<td>
1323                  <p>
1324                    <code class="computeroutput"><span class="identifier">T</span></code>
1325                  </p>
1326                </td>
1327<td>
1328                  <p>
1329                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
1330                    value</a>
1331                  </p>
1332                </td>
1333</tr>
1334</tbody>
1335</table></div>
1336</div>
1337<br class="table-break"><h2>
1338<a name="metaparse.reference.alphabetical.always.h1"></a>
1339          <span class="phrase"><a name="metaparse.reference.alphabetical.always.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always.description">Description</a>
1340        </h2>
1341<p>
1342          It accepts an input if and only if <code class="computeroutput"><span class="identifier">P</span></code>
1343          accepts it, but the result of parsing will be <code class="computeroutput"><span class="identifier">T</span></code>
1344          instead of the result <code class="computeroutput"><span class="identifier">P</span></code>
1345          returned.
1346        </p>
1347<h2>
1348<a name="metaparse.reference.alphabetical.always.h2"></a>
1349          <span class="phrase"><a name="metaparse.reference.alphabetical.always.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always.header">Header</a>
1350        </h2>
1351<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">metaparse</span><span class="special">/</span><span class="identifier">always</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1352</pre>
1353<h2>
1354<a name="metaparse.reference.alphabetical.always.h3"></a>
1355          <span class="phrase"><a name="metaparse.reference.alphabetical.always.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always.expression_semantics">Expression
1356          semantics</a>
1357        </h2>
1358<p>
1359          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">t</span></code> class the following are equivalent:
1360        </p>
1361<pre class="programlisting"><span class="identifier">always</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">&gt;</span>
1362
1363<span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">&gt;&gt;</span>
1364</pre>
1365<h2>
1366<a name="metaparse.reference.alphabetical.always.h4"></a>
1367          <span class="phrase"><a name="metaparse.reference.alphabetical.always.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.always.example">Example</a>
1368        </h2>
1369<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">metaparse</span><span class="special">/</span><span class="identifier">always</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1370<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1371<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1372<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1373<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1374<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1375
1376<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1377
1378<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1379
1380<span class="keyword">using</span> <span class="identifier">always13</span> <span class="special">=</span> <span class="identifier">always</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'x'</span><span class="special">&gt;,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;;</span>
1381
1382<span class="keyword">static_assert</span><span class="special">(</span>
1383  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1384  <span class="string">"always13 should accept x"</span>
1385<span class="special">);</span>
1386
1387<span class="keyword">static_assert</span><span class="special">(</span>
1388  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1389    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
1390    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
1391  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1392  <span class="string">"the result of parsing should be the integral_constant type"</span>
1393<span class="special">);</span>
1394
1395<span class="keyword">static_assert</span><span class="special">(</span>
1396  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"y"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1397  <span class="string">"always13 should reject characters other than x"</span>
1398<span class="special">);</span>
1399</pre>
1400</div>
1401<div class="section">
1402<div class="titlepage"><div><div><h4 class="title">
1403<a name="metaparse.reference.alphabetical.boost_metaparse_define_error"></a><a name="BOOST_METAPARSE_DEFINE_ERROR"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error" title="BOOST_METAPARSE_DEFINE_ERROR">BOOST_METAPARSE_DEFINE_ERROR</a>
1404</h4></div></div></div>
1405<h2>
1406<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.h0"></a>
1407          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_define_error.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error.synopsis">Synopsis</a>
1408        </h2>
1409<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">name</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">)</span> <span class="special">\</span>
1410  <span class="comment">// unspecified</span>
1411</pre>
1412<p>
1413          This is a macro.
1414        </p>
1415<div class="table">
1416<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.arguments"></a><p class="title"><b>Table 24.6. Arguments</b></p>
1417<div class="table-contents"><table class="table" summary="Arguments">
1418<colgroup>
1419<col>
1420<col>
1421</colgroup>
1422<thead><tr>
1423<th>
1424                  <p>
1425                    Name
1426                  </p>
1427                </th>
1428<th>
1429                  <p>
1430                    Type
1431                  </p>
1432                </th>
1433</tr></thead>
1434<tbody>
1435<tr>
1436<td>
1437                  <p>
1438                    <code class="computeroutput"><span class="identifier">name</span></code>
1439                  </p>
1440                </td>
1441<td>
1442                  <p>
1443                    identifier token
1444                  </p>
1445                </td>
1446</tr>
1447<tr>
1448<td>
1449                  <p>
1450                    <code class="computeroutput"><span class="identifier">msg</span></code>
1451                  </p>
1452                </td>
1453<td>
1454                  <p>
1455                    string literal
1456                  </p>
1457                </td>
1458</tr>
1459</tbody>
1460</table></div>
1461</div>
1462<br class="table-break"><h2>
1463<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.h1"></a>
1464          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_define_error.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error.description">Description</a>
1465        </h2>
1466<p>
1467          Macro for defining a <a class="link" href="reference.html#parsing_error_message">parsing error
1468          message</a> class. <code class="computeroutput"><span class="identifier">name</span></code>
1469          is the name of the class representing the error message and <code class="computeroutput"><span class="identifier">msg</span></code> is a string literal containing the
1470          description of the error.
1471        </p>
1472<h2>
1473<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.h2"></a>
1474          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_define_error.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error.header">Header</a>
1475        </h2>
1476<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">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1477</pre>
1478<h2>
1479<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.h3"></a>
1480          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_define_error.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error.expression_semantics">Expression
1481          semantics</a>
1482        </h2>
1483<p>
1484          For any <code class="computeroutput"><span class="identifier">n</span></code> name and <code class="computeroutput"><span class="identifier">m</span></code> string literal, given the following
1485          is defined:
1486        </p>
1487<pre class="programlisting"><span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">m</span><span class="special">);</span>
1488</pre>
1489<p>
1490          the following pairs of expressions are equivalent:
1491        </p>
1492<pre class="programlisting"><span class="identifier">n</span><span class="special">::</span><span class="identifier">get_value</span><span class="special">()</span>
1493<span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">(</span><span class="identifier">m</span><span class="special">)</span>
1494
1495<span class="identifier">n</span><span class="special">::</span><span class="identifier">type</span>
1496<span class="identifier">n</span>
1497</pre>
1498<h2>
1499<a name="metaparse.reference.alphabetical.boost_metaparse_define_error.h4"></a>
1500          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_define_error.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_define_error.example">Example</a>
1501        </h2>
1502<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">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1503<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1504<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1505<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1506<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1507<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1508<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">change_error_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1509<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1510<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1511<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1512
1513<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1514
1515<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1516
1517<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">age_expected</span><span class="special">,</span> <span class="string">"Age expected"</span><span class="special">);</span>
1518
1519<span class="keyword">using</span> <span class="identifier">name_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">&gt;&gt;;</span>
1520<span class="keyword">using</span> <span class="identifier">age_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">change_error_message</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">age_expected</span><span class="special">&gt;&gt;;</span>
1521
1522<span class="keyword">using</span> <span class="identifier">name_age</span> <span class="special">=</span> <span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">age_token</span><span class="special">&gt;;</span>
1523
1524<span class="keyword">static_assert</span><span class="special">(</span>
1525  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1526    <span class="identifier">age_expected</span><span class="special">,</span>
1527    <span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">name_age</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"Joe "</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
1528  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1529  <span class="string">"the error message should be age_expected when the age is missing"</span>
1530<span class="special">);</span>
1531</pre>
1532</div>
1533<div class="section">
1534<div class="titlepage"><div><div><h4 class="title">
1535<a name="metaparse.reference.alphabetical.boost_metaparse_string"></a><a name="BOOST_METAPARSE_STRING"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string" title="BOOST_METAPARSE_STRING">BOOST_METAPARSE_STRING</a>
1536</h4></div></div></div>
1537<h2>
1538<a name="metaparse.reference.alphabetical.boost_metaparse_string.h0"></a>
1539          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_string.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string.synopsis">Synopsis</a>
1540        </h2>
1541<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="identifier">s</span><span class="special">)</span> <span class="special">\</span>
1542  <span class="comment">// unspecified</span>
1543</pre>
1544<p>
1545          This is a macro.
1546        </p>
1547<div class="table">
1548<a name="metaparse.reference.alphabetical.boost_metaparse_string.arguments"></a><p class="title"><b>Table 24.7. Arguments</b></p>
1549<div class="table-contents"><table class="table" summary="Arguments">
1550<colgroup>
1551<col>
1552<col>
1553</colgroup>
1554<thead><tr>
1555<th>
1556                  <p>
1557                    Name
1558                  </p>
1559                </th>
1560<th>
1561                  <p>
1562                    Type
1563                  </p>
1564                </th>
1565</tr></thead>
1566<tbody><tr>
1567<td>
1568                  <p>
1569                    <code class="computeroutput"><span class="identifier">s</span></code>
1570                  </p>
1571                </td>
1572<td>
1573                  <p>
1574                    string literal
1575                  </p>
1576                </td>
1577</tr></tbody>
1578</table></div>
1579</div>
1580<br class="table-break"><h2>
1581<a name="metaparse.reference.alphabetical.boost_metaparse_string.h1"></a>
1582          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_string.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string.description">Description</a>
1583        </h2>
1584<p>
1585          Macro for defining <a class="link" href="reference.html#string"><code class="computeroutput"><span class="identifier">string</span></code></a>
1586          values. <code class="computeroutput"><span class="identifier">s</span></code> is expected to
1587          be a string literal. The macro requires C++11.
1588        </p>
1589<p>
1590          The maximal length of the string is limited. This limit is defined by the
1591          <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span></code>
1592          macro.
1593        </p>
1594<p>
1595          On platforms where <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_STRING</span></code>
1596          is not supported, the <code class="computeroutput"><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span></code>
1597          header defines the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_V1_CONFIG_NO_BOOST_METAPARSE_STRING</span></code>
1598          macro. Defining this macro before including the header disables the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_STRING</span></code> macro.
1599        </p>
1600<p>
1601          The upper limit for the maximum length, which can be used is 2048. The
1602          implementation of the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_STRING</span></code>
1603          macro is generated using <code class="computeroutput"><span class="identifier">tools</span><span class="special">/</span><span class="identifier">string_headers</span><span class="special">.</span><span class="identifier">py</span></code> and
1604          can be regenerated to extend this upper limit. Note that for Oracle Developer
1605          Studio the string length limit is 127.
1606        </p>
1607<p>
1608          Metaparse supports changing the string length limit within a compilation
1609          unit. To change the length limit, redefine the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span></code>
1610          macro.
1611        </p>
1612<p>
1613          You can find benchmarks of this macro <a class="link" href="performance.html#BOOST_METAPARSE_STRING_benchmark">here</a>.
1614        </p>
1615<h2>
1616<a name="metaparse.reference.alphabetical.boost_metaparse_string.h2"></a>
1617          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_string.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string.header">Header</a>
1618        </h2>
1619<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">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1620</pre>
1621<h2>
1622<a name="metaparse.reference.alphabetical.boost_metaparse_string.h3"></a>
1623          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_string.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string.expression_semantics">Expression
1624          semantics</a>
1625        </h2>
1626<p>
1627          The semantics of this macro is demonstrated by an example. The following
1628        </p>
1629<pre class="programlisting"><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"hello"</span><span class="special">)</span>
1630</pre>
1631<p>
1632          is equivalent to
1633        </p>
1634<pre class="programlisting"><span class="identifier">string</span><span class="special">&lt;</span><span class="char">'h'</span><span class="special">,</span><span class="char">'e'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'o'</span><span class="special">&gt;</span>
1635</pre>
1636<h2>
1637<a name="metaparse.reference.alphabetical.boost_metaparse_string.h4"></a>
1638          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_string.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_string.example">Example</a>
1639        </h2>
1640<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span> <span class="number">8</span>
1641<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1642
1643<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1644
1645<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1646
1647<span class="keyword">using</span> <span class="identifier">hello1</span> <span class="special">=</span> <span class="identifier">string</span><span class="special">&lt;</span><span class="char">'H'</span><span class="special">,</span><span class="char">'e'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'o'</span><span class="special">&gt;;</span>
1648<span class="keyword">using</span> <span class="identifier">hello2</span> <span class="special">=</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">);</span>
1649
1650<span class="keyword">static_assert</span><span class="special">(</span>
1651  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1652    <span class="identifier">string</span><span class="special">&lt;</span><span class="char">'H'</span><span class="special">,</span> <span class="char">'e'</span><span class="special">,</span> <span class="char">'l'</span><span class="special">,</span> <span class="char">'l'</span><span class="special">,</span> <span class="char">'o'</span><span class="special">&gt;,</span>
1653    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">)</span>
1654  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1655  <span class="string">"The type generated by the macro should be identical to the hand-crafted one."</span>
1656<span class="special">);</span>
1657
1658<span class="preprocessor">#undef</span> <span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span>
1659<span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span> <span class="number">32</span>
1660
1661<span class="keyword">static_assert</span><span class="special">(</span>
1662  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
1663    <span class="identifier">string</span><span class="special">&lt;</span>
1664      <span class="char">'A'</span><span class="special">,</span> <span class="char">' '</span><span class="special">,</span> <span class="char">'l'</span><span class="special">,</span> <span class="char">'o'</span><span class="special">,</span> <span class="char">'n'</span><span class="special">,</span> <span class="char">'g'</span><span class="special">,</span> <span class="char">'e'</span><span class="special">,</span> <span class="char">'r'</span><span class="special">,</span>
1665      <span class="char">' '</span><span class="special">,</span> <span class="char">'s'</span><span class="special">,</span> <span class="char">'t'</span><span class="special">,</span> <span class="char">'r'</span><span class="special">,</span> <span class="char">'i'</span><span class="special">,</span> <span class="char">'n'</span><span class="special">,</span> <span class="char">'g'</span>
1666    <span class="special">&gt;,</span>
1667    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"A longer string"</span><span class="special">)</span>
1668  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
1669  <span class="string">"The type generated by the macro should be identical to the hand-crafted one."</span>
1670<span class="special">);</span>
1671</pre>
1672</div>
1673<div class="section">
1674<div class="titlepage"><div><div><h4 class="title">
1675<a name="metaparse.reference.alphabetical.boost_metaparse_version"></a><a name="BOOST_METAPARSE_VERSION"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version" title="BOOST_METAPARSE_VERSION">BOOST_METAPARSE_VERSION</a>
1676</h4></div></div></div>
1677<h2>
1678<a name="metaparse.reference.alphabetical.boost_metaparse_version.h0"></a>
1679          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_version.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version.synopsis">Synopsis</a>
1680        </h2>
1681<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_VERSION</span> <span class="special">\\</span> <span class="identifier">unspecified</span>
1682</pre>
1683<p>
1684          This is a macro.
1685        </p>
1686<h2>
1687<a name="metaparse.reference.alphabetical.boost_metaparse_version.h1"></a>
1688          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_version.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version.description">Description</a>
1689        </h2>
1690<p>
1691          Macro containing the version number of Boost.Metaparse.
1692        </p>
1693<h2>
1694<a name="metaparse.reference.alphabetical.boost_metaparse_version.h2"></a>
1695          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_version.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version.header">Header</a>
1696        </h2>
1697<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">metaparse</span><span class="special">/</span><span class="identifier">version</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1698</pre>
1699<h2>
1700<a name="metaparse.reference.alphabetical.boost_metaparse_version.h3"></a>
1701          <span class="phrase"><a name="metaparse.reference.alphabetical.boost_metaparse_version.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.boost_metaparse_version.expression_semantics">Expression
1702          semantics</a>
1703        </h2>
1704<p>
1705          It has major, minor and release components:
1706        </p>
1707<pre class="programlisting"><span class="identifier">major</span>   <span class="special">==</span> <span class="identifier">BOOST_METAPARSE_VERSION</span> <span class="special">/</span> <span class="number">10000000</span>
1708<span class="identifier">minor</span>   <span class="special">==</span> <span class="special">(</span><span class="identifier">BOOST_METAPARSE_VERSION</span> <span class="special">%</span> <span class="number">10000000</span><span class="special">)</span> <span class="special">/</span> <span class="number">100000</span>
1709<span class="identifier">release</span> <span class="special">==</span> <span class="identifier">BOOST_METAPARSE_VERSION</span> <span class="special">%</span> <span class="number">100000</span>
1710</pre>
1711</div>
1712<div class="section">
1713<div class="titlepage"><div><div><h4 class="title">
1714<a name="metaparse.reference.alphabetical.boxed_value"></a><a name="boxed_value"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.boxed_value" title="Boxed value">Boxed
1715        value</a>
1716</h4></div></div></div>
1717<p>
1718          A <span class="emphasis"><em>boxed value</em></span> is a type representing a constant value.
1719          It has a public static <code class="computeroutput"><span class="keyword">const</span></code>
1720          or <code class="computeroutput"><span class="keyword">constexpr</span></code> member called
1721          <code class="computeroutput"><span class="identifier">value</span></code>. The class represents
1722          that value as a type, so it can be manipulated by <a class="link" href="reference.html#metafunction">template
1723          metafunction</a>s. It has to be a <a class="link" href="reference.html#metaprogramming_value">template
1724          metaprogramming value</a>.
1725        </p>
1726<p>
1727          For example the following <code class="computeroutput"><span class="keyword">struct</span></code>
1728          represents the <code class="computeroutput"><span class="keyword">true</span></code> value
1729          of type <code class="computeroutput"><span class="keyword">bool</span></code>:
1730        </p>
1731<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">true_type</span>
1732<span class="special">{</span>
1733  <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="keyword">true</span><span class="special">;</span>
1734  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">true_type</span><span class="special">;</span>
1735<span class="special">};</span>
1736</pre>
1737<p>
1738          The <code class="computeroutput"><span class="identifier">value</span></code> member is the
1739          wrapped value. <code class="computeroutput"><span class="identifier">true_type</span><span class="special">::</span><span class="identifier">type</span></code>
1740          is an alias of <code class="computeroutput"><span class="identifier">true_type</span></code>
1741          which makes it a template metaprogramming value.
1742        </p>
1743</div>
1744<div class="section">
1745<div class="titlepage"><div><div><h4 class="title">
1746<a name="metaparse.reference.alphabetical.build_parser"></a><a name="build_parser"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser" title="build_parser">build_parser</a>
1747</h4></div></div></div>
1748<h2>
1749<a name="metaparse.reference.alphabetical.build_parser.h0"></a>
1750          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.synopsis">Synopsis</a>
1751        </h2>
1752<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
1753<span class="keyword">struct</span> <span class="identifier">build_parser</span><span class="special">;</span>
1754</pre>
1755<p>
1756          This is a <a class="link" href="reference.html#metafunction">template metafunction</a>.
1757        </p>
1758<div class="table">
1759<a name="metaparse.reference.alphabetical.build_parser.arguments"></a><p class="title"><b>Table 24.8. Arguments</b></p>
1760<div class="table-contents"><table class="table" summary="Arguments">
1761<colgroup>
1762<col>
1763<col>
1764</colgroup>
1765<thead><tr>
1766<th>
1767                  <p>
1768                    Name
1769                  </p>
1770                </th>
1771<th>
1772                  <p>
1773                    Type
1774                  </p>
1775                </th>
1776</tr></thead>
1777<tbody><tr>
1778<td>
1779                  <p>
1780                    <code class="computeroutput"><span class="identifier">P</span></code>
1781                  </p>
1782                </td>
1783<td>
1784                  <p>
1785                    <a class="link" href="reference.html#parser">parser</a>
1786                  </p>
1787                </td>
1788</tr></tbody>
1789</table></div>
1790</div>
1791<br class="table-break"><h2>
1792<a name="metaparse.reference.alphabetical.build_parser.h1"></a>
1793          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.description">Description</a>
1794        </h2>
1795<p>
1796          It generates a simple interface for parser. It returns a metafunction class
1797          that takes an input string, parses it with <code class="computeroutput"><span class="identifier">P</span></code>
1798          and returns the result of parsing. It generates a compilation error when
1799          parsing fails.
1800        </p>
1801<h2>
1802<a name="metaparse.reference.alphabetical.build_parser.h2"></a>
1803          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.return_value"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.return_value">Return
1804          value</a>
1805        </h2>
1806<p>
1807          It returns a <a class="link" href="reference.html#metafunction_class">template metafunction class</a>:
1808        </p>
1809<pre class="programlisting"><span class="keyword">struct</span>
1810<span class="special">{</span>
1811  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">S</span><span class="special">&gt;</span>
1812  <span class="keyword">struct</span> <span class="identifier">apply</span><span class="special">;</span>
1813<span class="special">};</span>
1814</pre>
1815<div class="table">
1816<a name="metaparse.reference.alphabetical.build_parser.arguments0"></a><p class="title"><b>Table 24.9. Arguments</b></p>
1817<div class="table-contents"><table class="table" summary="Arguments">
1818<colgroup>
1819<col>
1820<col>
1821</colgroup>
1822<thead><tr>
1823<th>
1824                  <p>
1825                    Name
1826                  </p>
1827                </th>
1828<th>
1829                  <p>
1830                    Type
1831                  </p>
1832                </th>
1833</tr></thead>
1834<tbody><tr>
1835<td>
1836                  <p>
1837                    <code class="computeroutput"><span class="identifier">S</span></code>
1838                  </p>
1839                </td>
1840<td>
1841                  <p>
1842                    <a class="link" href="reference.html#string">string</a>
1843                  </p>
1844                </td>
1845</tr></tbody>
1846</table></div>
1847</div>
1848<br class="table-break"><h2>
1849<a name="metaparse.reference.alphabetical.build_parser.h3"></a>
1850          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.header">Header</a>
1851        </h2>
1852<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">metaparse</span><span class="special">/</span><span class="identifier">build_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1853</pre>
1854<h2>
1855<a name="metaparse.reference.alphabetical.build_parser.h4"></a>
1856          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.expression_semantics">Expression
1857          semantics</a>
1858        </h2>
1859<p>
1860          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">s</span></code> compile-time string
1861        </p>
1862<pre class="programlisting"><span class="identifier">build_parser</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;</span>
1863</pre>
1864<p>
1865          is equivalent to
1866        </p>
1867<pre class="programlisting"><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;&gt;</span>
1868</pre>
1869<h2>
1870<a name="metaparse.reference.alphabetical.build_parser.h5"></a>
1871          <span class="phrase"><a name="metaparse.reference.alphabetical.build_parser.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.build_parser.example">Example</a>
1872        </h2>
1873<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">metaparse</span><span class="special">/</span><span class="identifier">build_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1874<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1875<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1876
1877<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1878
1879<span class="keyword">using</span> <span class="identifier">string_to_int</span> <span class="special">=</span> <span class="identifier">build_parser</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">;</span>
1880
1881<span class="keyword">static_assert</span><span class="special">(</span>
1882  <span class="identifier">string_to_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1113"</span><span class="special">)&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1113</span><span class="special">,</span>
1883  <span class="string">"string_to_int should be a metafunction turning a string into an int"</span>
1884<span class="special">);</span>
1885</pre>
1886</div>
1887<div class="section">
1888<div class="titlepage"><div><div><h4 class="title">
1889<a name="metaparse.reference.alphabetical.change_error_message"></a><a name="change_error_message"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message" title="change_error_message">change_error_message</a>
1890</h4></div></div></div>
1891<h2>
1892<a name="metaparse.reference.alphabetical.change_error_message.h0"></a>
1893          <span class="phrase"><a name="metaparse.reference.alphabetical.change_error_message.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message.synopsis">Synopsis</a>
1894        </h2>
1895<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Msg</span><span class="special">&gt;</span>
1896<span class="keyword">struct</span> <span class="identifier">change_error_message</span><span class="special">;</span>
1897</pre>
1898<p>
1899          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
1900        </p>
1901<div class="table">
1902<a name="metaparse.reference.alphabetical.change_error_message.arguments"></a><p class="title"><b>Table 24.10. Arguments</b></p>
1903<div class="table-contents"><table class="table" summary="Arguments">
1904<colgroup>
1905<col>
1906<col>
1907</colgroup>
1908<thead><tr>
1909<th>
1910                  <p>
1911                    Name
1912                  </p>
1913                </th>
1914<th>
1915                  <p>
1916                    Type
1917                  </p>
1918                </th>
1919</tr></thead>
1920<tbody>
1921<tr>
1922<td>
1923                  <p>
1924                    <code class="computeroutput"><span class="identifier">P</span></code>
1925                  </p>
1926                </td>
1927<td>
1928                  <p>
1929                    <a class="link" href="reference.html#parser">parser</a>
1930                  </p>
1931                </td>
1932</tr>
1933<tr>
1934<td>
1935                  <p>
1936                    <code class="computeroutput"><span class="identifier">Msg</span></code>
1937                  </p>
1938                </td>
1939<td>
1940                  <p>
1941                    <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
1942                  </p>
1943                </td>
1944</tr>
1945</tbody>
1946</table></div>
1947</div>
1948<br class="table-break"><h2>
1949<a name="metaparse.reference.alphabetical.change_error_message.h1"></a>
1950          <span class="phrase"><a name="metaparse.reference.alphabetical.change_error_message.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message.description">Description</a>
1951        </h2>
1952<p>
1953          It applies <code class="computeroutput"><span class="identifier">P</span></code> on the input.
1954          When <code class="computeroutput"><span class="identifier">P</span></code> succeeds, <code class="computeroutput"><span class="identifier">change_error_message</span></code> returns the result
1955          <code class="computeroutput"><span class="identifier">P</span></code> returns, otherwise <code class="computeroutput"><span class="identifier">change_error_message</span></code> rejects the input
1956          and the reason will be <code class="computeroutput"><span class="identifier">Msg</span></code>.
1957        </p>
1958<h2>
1959<a name="metaparse.reference.alphabetical.change_error_message.h2"></a>
1960          <span class="phrase"><a name="metaparse.reference.alphabetical.change_error_message.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message.header">Header</a>
1961        </h2>
1962<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">metaparse</span><span class="special">/</span><span class="identifier">change_error_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1963</pre>
1964<h2>
1965<a name="metaparse.reference.alphabetical.change_error_message.h3"></a>
1966          <span class="phrase"><a name="metaparse.reference.alphabetical.change_error_message.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message.expression_semantics">Expression
1967          semantics</a>
1968        </h2>
1969<p>
1970          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">m</span></code> parsing error message, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
1971        </p>
1972<pre class="programlisting"><span class="identifier">change_error_message</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
1973</pre>
1974<p>
1975          is equivalent to <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> when <code class="computeroutput"><span class="identifier">p</span></code>
1976          accepts the input. It is equivalent to <code class="computeroutput"><span class="identifier">fail</span><span class="special">&lt;</span><span class="identifier">msg</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> otherwise.
1977        </p>
1978<h2>
1979<a name="metaparse.reference.alphabetical.change_error_message.h4"></a>
1980          <span class="phrase"><a name="metaparse.reference.alphabetical.change_error_message.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.change_error_message.example">Example</a>
1981        </h2>
1982<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">metaparse</span><span class="special">/</span><span class="identifier">change_error_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1983<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1984<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1985<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">keyword</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1986<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1987<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1988<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1989<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1990<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1991<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1992<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
1993
1994<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
1995
1996<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
1997
1998<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">name_expected</span><span class="special">,</span> <span class="string">"Name expected"</span><span class="special">);</span>
1999
2000<span class="keyword">using</span> <span class="identifier">keyword_name</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)&gt;&gt;;</span>
2001<span class="keyword">using</span> <span class="identifier">name_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">&gt;&gt;;</span>
2002
2003<span class="keyword">using</span> <span class="identifier">name_parser</span> <span class="special">=</span>
2004  <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">keyword_name</span><span class="special">,</span> <span class="identifier">change_error_message</span><span class="special">&lt;</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">name_expected</span><span class="special">&gt;&gt;;</span>
2005
2006<span class="keyword">static_assert</span><span class="special">(</span>
2007  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
2008    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name Bela"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2009  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2010  <span class="string">"name_parser should accept \"name &lt;a name&gt;\""</span>
2011<span class="special">);</span>
2012
2013<span class="keyword">static_assert</span><span class="special">(</span>
2014  <span class="identifier">is_error</span><span class="special">&lt;</span>
2015    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2016  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2017  <span class="string">"name_parser should reject input when name is a question mark"</span>
2018<span class="special">);</span>
2019
2020<span class="keyword">static_assert</span><span class="special">(</span>
2021  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
2022    <span class="identifier">get_message</span><span class="special">&lt;</span>
2023      <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2024    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
2025    <span class="identifier">name_expected</span>
2026  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2027  <span class="string">"the error message should be the one specified by change_error_message"</span>
2028<span class="special">);</span>
2029</pre>
2030</div>
2031<div class="section">
2032<div class="titlepage"><div><div><h4 class="title">
2033<a name="metaparse.reference.alphabetical.currying"></a><a name="currying"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.currying" title="Currying">Currying</a>
2034</h4></div></div></div>
2035<p>
2036          A <a class="link" href="reference.html#metafunction">template metafunction</a> supports <span class="emphasis"><em>currying</em></span>
2037          when it accepts less arguments than it normally expects. When less arguments
2038          are provided, then it returns a <a class="link" href="reference.html#metafunction_class">template
2039          metafunction class</a> expecting the remaining arguments. That template
2040          metafunction class is also expected to support currying.
2041        </p>
2042<p>
2043          For example assuming the following metafunction is given:
2044        </p>
2045<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">B</span><span class="special">&gt;</span>
2046<span class="keyword">struct</span> <span class="identifier">plus</span><span class="special">;</span>
2047</pre>
2048<p>
2049          It takes two values, adds them and returns their result. For example:
2050        </p>
2051<pre class="programlisting"><span class="keyword">static_assert</span><span class="special">(</span>
2052  <span class="identifier">plus</span><span class="special">&lt;</span>
2053    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
2054    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span>
2055  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
2056  <span class="string">"This should work"</span>
2057<span class="special">);</span>
2058</pre>
2059<p>
2060          If it supports currying, then the following should also work:
2061        </p>
2062<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">inc</span> <span class="special">=</span> <span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;&gt;;</span>
2063
2064<span class="keyword">static_assert</span><span class="special">(</span>
2065  <span class="identifier">inc</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">12</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
2066  <span class="string">"This should work"</span>
2067<span class="special">);</span>
2068</pre>
2069<p>
2070          The above example defines the <code class="computeroutput"><span class="identifier">inc</span></code>
2071          template metafunction class by calling <code class="computeroutput"><span class="identifier">plus</span></code>
2072          with just one argument: the <a class="link" href="reference.html#boxed_value">boxed</a> <code class="computeroutput"><span class="number">1</span></code> value.
2073        </p>
2074</div>
2075<div class="section">
2076<div class="titlepage"><div><div><h4 class="title">
2077<a name="metaparse.reference.alphabetical.debug_parsing_error"></a><a name="debug_parsing_error"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error" title="debug_parsing_error">debug_parsing_error</a>
2078</h4></div></div></div>
2079<h2>
2080<a name="metaparse.reference.alphabetical.debug_parsing_error.h0"></a>
2081          <span class="phrase"><a name="metaparse.reference.alphabetical.debug_parsing_error.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error.synopsis">Synopsis</a>
2082        </h2>
2083<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">S</span><span class="special">&gt;</span>
2084<span class="keyword">struct</span> <span class="identifier">debug_parsing_error</span>
2085<span class="special">{</span>
2086  <span class="identifier">debug_parsing_error</span><span class="special">();</span>
2087<span class="special">};</span>
2088</pre>
2089<p>
2090          This is a template class.
2091        </p>
2092<div class="table">
2093<a name="metaparse.reference.alphabetical.debug_parsing_error.arguments"></a><p class="title"><b>Table 24.11. Arguments</b></p>
2094<div class="table-contents"><table class="table" summary="Arguments">
2095<colgroup>
2096<col>
2097<col>
2098</colgroup>
2099<thead><tr>
2100<th>
2101                  <p>
2102                    Name
2103                  </p>
2104                </th>
2105<th>
2106                  <p>
2107                    Type
2108                  </p>
2109                </th>
2110</tr></thead>
2111<tbody>
2112<tr>
2113<td>
2114                  <p>
2115                    <code class="computeroutput"><span class="identifier">P</span></code>
2116                  </p>
2117                </td>
2118<td>
2119                  <p>
2120                    <a class="link" href="reference.html#parser">parser</a>
2121                  </p>
2122                </td>
2123</tr>
2124<tr>
2125<td>
2126                  <p>
2127                    <code class="computeroutput"><span class="identifier">S</span></code>
2128                  </p>
2129                </td>
2130<td>
2131                  <p>
2132                    <a class="link" href="reference.html#string">string</a>
2133                  </p>
2134                </td>
2135</tr>
2136</tbody>
2137</table></div>
2138</div>
2139<br class="table-break"><h2>
2140<a name="metaparse.reference.alphabetical.debug_parsing_error.h1"></a>
2141          <span class="phrase"><a name="metaparse.reference.alphabetical.debug_parsing_error.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error.description">Description</a>
2142        </h2>
2143<p>
2144          Utility to debug errors generated by a compile-time parser. An instance
2145          of the instantiated template class has to be created and initialised using
2146          the default constructor. When parsing the input string using the parser
2147          generates an error, the default constructor of <code class="computeroutput"><span class="identifier">debug_parsing_error</span></code>
2148          prints the error message to the standard output at run-time and calls
2149          <code class="computeroutput"><span class="identifier">exit</span></code>.
2150        </p>
2151<div class="note"><table border="0" summary="Note">
2152<tr>
2153<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
2154<th align="left">Note</th>
2155</tr>
2156<tr><td align="left" valign="top"><p>
2157            Note that more powerful debugging utilities, like <a href="https://github.com/sabel83/metashell#metashell" target="_top">Metashell</a>
2158            are also available.
2159          </p></td></tr>
2160</table></div>
2161<h2>
2162<a name="metaparse.reference.alphabetical.debug_parsing_error.h2"></a>
2163          <span class="phrase"><a name="metaparse.reference.alphabetical.debug_parsing_error.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error.header">Header</a>
2164        </h2>
2165<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">metaparse</span><span class="special">/</span><span class="identifier">debug_parsing_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2166</pre>
2167<h2>
2168<a name="metaparse.reference.alphabetical.debug_parsing_error.h3"></a>
2169          <span class="phrase"><a name="metaparse.reference.alphabetical.debug_parsing_error.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error.expression_semantics">Expression
2170          semantics</a>
2171        </h2>
2172<p>
2173          For any <code class="computeroutput"><span class="identifier">p</span></code> compile-time
2174          parser and <code class="computeroutput"><span class="identifier">s</span></code> compile-time
2175          string
2176        </p>
2177<pre class="programlisting"><span class="identifier">debug_parsing_error</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">s</span><span class="special">&gt;()</span>
2178</pre>
2179<p>
2180          Tries to parse <code class="computeroutput"><span class="identifier">s</span></code> using
2181          <code class="computeroutput"><span class="identifier">p</span></code> at compile-time. At run-time
2182          the constructor prints the result of parsing to the standard output and
2183          calls <code class="computeroutput"><span class="identifier">exit</span></code>.
2184        </p>
2185<h2>
2186<a name="metaparse.reference.alphabetical.debug_parsing_error.h4"></a>
2187          <span class="phrase"><a name="metaparse.reference.alphabetical.debug_parsing_error.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.debug_parsing_error.example">Example</a>
2188        </h2>
2189<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">metaparse</span><span class="special">/</span><span class="identifier">debug_parsing_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2190<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2191<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2192
2193<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
2194
2195<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2196
2197<span class="identifier">debug_parsing_error</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"not an int"</span><span class="special">)&gt;</span> <span class="identifier">do_debugging</span><span class="special">;</span>
2198
2199<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{}</span>
2200</pre>
2201<p>
2202          By running the compiled executable you get the following:
2203        </p>
2204<p>
2205          Compile-time parsing results ---------------------------- Input text: not
2206          an int
2207        </p>
2208<p>
2209          Parsing failed: line 1, col 1: Digit expected
2210        </p>
2211</div>
2212<div class="section">
2213<div class="titlepage"><div><div><h4 class="title">
2214<a name="metaparse.reference.alphabetical.digit_expected"></a><a name="digit_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_expected" title="digit_expected">digit_expected</a>
2215</h4></div></div></div>
2216<h2>
2217<a name="metaparse.reference.alphabetical.digit_expected.h0"></a>
2218          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_expected.synopsis">Synopsis</a>
2219        </h2>
2220<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
2221<span class="special">{</span>
2222  <span class="keyword">struct</span> <span class="identifier">digit_expected</span><span class="special">;</span>
2223<span class="special">}</span>
2224</pre>
2225<p>
2226          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
2227        </p>
2228<h2>
2229<a name="metaparse.reference.alphabetical.digit_expected.h1"></a>
2230          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_expected.description">Description</a>
2231        </h2>
2232<p>
2233          Class representing the error that a digit character was expected at a specific
2234          location.
2235        </p>
2236<h2>
2237<a name="metaparse.reference.alphabetical.digit_expected.h2"></a>
2238          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_expected.header">Header</a>
2239        </h2>
2240<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">digit_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2241</pre>
2242</div>
2243<div class="section">
2244<div class="titlepage"><div><div><h4 class="title">
2245<a name="metaparse.reference.alphabetical.digit"></a><a name="digit"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.digit" title="digit">digit</a>
2246</h4></div></div></div>
2247<h2>
2248<a name="metaparse.reference.alphabetical.digit.h0"></a>
2249          <span class="phrase"><a name="metaparse.reference.alphabetical.digit.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit.synopsis">Synopsis</a>
2250        </h2>
2251<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">digit</span><span class="special">;</span>
2252</pre>
2253<p>
2254          This is a <a class="link" href="reference.html#parser">parser</a>.
2255        </p>
2256<h2>
2257<a name="metaparse.reference.alphabetical.digit.h1"></a>
2258          <span class="phrase"><a name="metaparse.reference.alphabetical.digit.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit.description">Description</a>
2259        </h2>
2260<p>
2261          Parser accepting one character in the range <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>. The result
2262          of the parser is the accepted character.
2263        </p>
2264<h2>
2265<a name="metaparse.reference.alphabetical.digit.h2"></a>
2266          <span class="phrase"><a name="metaparse.reference.alphabetical.digit.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit.header">Header</a>
2267        </h2>
2268<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">metaparse</span><span class="special">/</span><span class="identifier">digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2269</pre>
2270<h2>
2271<a name="metaparse.reference.alphabetical.digit.h3"></a>
2272          <span class="phrase"><a name="metaparse.reference.alphabetical.digit.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit.expression_semantics">Expression
2273          semantics</a>
2274        </h2>
2275<p>
2276          The following are equivalent:
2277        </p>
2278<pre class="programlisting"><span class="identifier">digit</span>
2279
2280<span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">,</span> <span class="identifier">error</span><span class="special">::</span><span class="identifier">digit_expected</span><span class="special">&gt;</span>
2281</pre>
2282<h2>
2283<a name="metaparse.reference.alphabetical.digit.h4"></a>
2284          <span class="phrase"><a name="metaparse.reference.alphabetical.digit.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit.example">Example</a>
2285        </h2>
2286<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">metaparse</span><span class="special">/</span><span class="identifier">digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2287<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2288<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2289<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2290<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2291
2292<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2293
2294<span class="keyword">static_assert</span><span class="special">(</span>
2295  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2296  <span class="string">"digit should accept a digit"</span>
2297<span class="special">);</span>
2298
2299<span class="keyword">static_assert</span><span class="special">(</span>
2300  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2301  <span class="string">"digit should reject a character"</span>
2302<span class="special">);</span>
2303
2304<span class="keyword">static_assert</span><span class="special">(</span>
2305  <span class="identifier">get_result</span><span class="special">&lt;</span>
2306    <span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2307  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
2308  <span class="string">"the result of parsing should be the character value"</span>
2309<span class="special">);</span>
2310</pre>
2311</div>
2312<div class="section">
2313<div class="titlepage"><div><div><h4 class="title">
2314<a name="metaparse.reference.alphabetical.digit_to_int_c"></a><a name="digit_to_int_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c" title="digit_to_int_c">digit_to_int_c</a>
2315</h4></div></div></div>
2316<h2>
2317<a name="metaparse.reference.alphabetical.digit_to_int_c.h0"></a>
2318          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.synopsis">Synopsis</a>
2319        </h2>
2320<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
2321<span class="special">{</span>
2322  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">D</span><span class="special">&gt;</span>
2323  <span class="keyword">struct</span> <span class="identifier">digit_to_int_c</span><span class="special">;</span>
2324<span class="special">}</span>
2325</pre>
2326<p>
2327          This is a template class similar to a <a class="link" href="reference.html#metafunction">template
2328          metafunction</a> but taking a <code class="computeroutput"><span class="keyword">char</span></code>
2329          value as argument.
2330        </p>
2331<div class="table">
2332<a name="metaparse.reference.alphabetical.digit_to_int_c.arguments"></a><p class="title"><b>Table 24.12. Arguments</b></p>
2333<div class="table-contents"><table class="table" summary="Arguments">
2334<colgroup>
2335<col>
2336<col>
2337</colgroup>
2338<thead><tr>
2339<th>
2340                  <p>
2341                    Name
2342                  </p>
2343                </th>
2344<th>
2345                  <p>
2346                    Type
2347                  </p>
2348                </th>
2349</tr></thead>
2350<tbody><tr>
2351<td>
2352                  <p>
2353                    <code class="computeroutput"><span class="identifier">D</span></code>
2354                  </p>
2355                </td>
2356<td>
2357                  <p>
2358                    character value
2359                  </p>
2360                </td>
2361</tr></tbody>
2362</table></div>
2363</div>
2364<br class="table-break"><h2>
2365<a name="metaparse.reference.alphabetical.digit_to_int_c.h1"></a>
2366          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.description">Description</a>
2367        </h2>
2368<p>
2369          Converts a character containing a value in the range <code class="computeroutput"><span class="special">[</span><span class="char">'0'</span><span class="special">..</span><span class="char">'9'</span><span class="special">]</span></code> to an integer.
2370        </p>
2371<h2>
2372<a name="metaparse.reference.alphabetical.digit_to_int_c.h2"></a>
2373          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.return_value"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.return_value">Return
2374          value</a>
2375        </h2>
2376<p>
2377          It returns a <a class="link" href="reference.html#boxed_value">boxed</a> integer value.
2378        </p>
2379<h2>
2380<a name="metaparse.reference.alphabetical.digit_to_int_c.h3"></a>
2381          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.header">Header</a>
2382        </h2>
2383<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">digit_to_int_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2384</pre>
2385<h2>
2386<a name="metaparse.reference.alphabetical.digit_to_int_c.h4"></a>
2387          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.expression_semantics">Expression
2388          semantics</a>
2389        </h2>
2390<p>
2391          The following pairs of expressions are equivalent
2392        </p>
2393<pre class="programlisting"><span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;::</span><span class="identifier">type</span>
2394<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span>
2395
2396<span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="char">'9'</span><span class="special">&gt;::</span><span class="identifier">type</span>
2397<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">9</span><span class="special">&gt;</span>
2398</pre>
2399<h2>
2400<a name="metaparse.reference.alphabetical.digit_to_int_c.h5"></a>
2401          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int_c.example">Example</a>
2402        </h2>
2403<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">digit_to_int_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2404
2405<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2406
2407<span class="keyword">static_assert</span><span class="special">(</span>
2408  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
2409  <span class="string">"it should convert a character to the corresponding integer value"</span>
2410<span class="special">);</span>
2411
2412<span class="keyword">static_assert</span><span class="special">(</span>
2413  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="char">'3'</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">3</span><span class="special">,</span>
2414  <span class="string">"it should convert a character to the corresponding integer value"</span>
2415<span class="special">);</span>
2416
2417<span class="keyword">static_assert</span><span class="special">(</span>
2418  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="char">'9'</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">9</span><span class="special">,</span>
2419  <span class="string">"it should convert a character to the corresponding integer value"</span>
2420<span class="special">);</span>
2421</pre>
2422</div>
2423<div class="section">
2424<div class="titlepage"><div><div><h4 class="title">
2425<a name="metaparse.reference.alphabetical.digit_to_int"></a><a name="digit_to_int"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int" title="digit_to_int">digit_to_int</a>
2426</h4></div></div></div>
2427<h2>
2428<a name="metaparse.reference.alphabetical.digit_to_int.h0"></a>
2429          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.synopsis">Synopsis</a>
2430        </h2>
2431<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
2432<span class="special">{</span>
2433  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
2434  <span class="keyword">struct</span> <span class="identifier">digit_to_int</span><span class="special">;</span>
2435<span class="special">}</span>
2436</pre>
2437<p>
2438          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
2439          that supports <a class="link" href="reference.html#currying">currying</a>.
2440        </p>
2441<div class="table">
2442<a name="metaparse.reference.alphabetical.digit_to_int.arguments"></a><p class="title"><b>Table 24.13. Arguments</b></p>
2443<div class="table-contents"><table class="table" summary="Arguments">
2444<colgroup>
2445<col>
2446<col>
2447</colgroup>
2448<thead><tr>
2449<th>
2450                  <p>
2451                    Name
2452                  </p>
2453                </th>
2454<th>
2455                  <p>
2456                    Type
2457                  </p>
2458                </th>
2459</tr></thead>
2460<tbody><tr>
2461<td>
2462                  <p>
2463                    <code class="computeroutput"><span class="identifier">D</span></code>
2464                  </p>
2465                </td>
2466<td>
2467                  <p>
2468                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
2469                  </p>
2470                </td>
2471</tr></tbody>
2472</table></div>
2473</div>
2474<br class="table-break"><h2>
2475<a name="metaparse.reference.alphabetical.digit_to_int.h1"></a>
2476          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.description">Description</a>
2477        </h2>
2478<p>
2479          Converts a boxed character containing a value in the range <code class="computeroutput"><span class="special">[</span><span class="char">'0'</span><span class="special">..</span><span class="char">'9'</span><span class="special">]</span></code> to an
2480          integer.
2481        </p>
2482<h2>
2483<a name="metaparse.reference.alphabetical.digit_to_int.h2"></a>
2484          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.return_value"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.return_value">Return
2485          value</a>
2486        </h2>
2487<p>
2488          It returns a <a class="link" href="reference.html#boxed_value">boxed</a> integer value.
2489        </p>
2490<h2>
2491<a name="metaparse.reference.alphabetical.digit_to_int.h3"></a>
2492          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.header">Header</a>
2493        </h2>
2494<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">digit_to_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2495</pre>
2496<h2>
2497<a name="metaparse.reference.alphabetical.digit_to_int.h4"></a>
2498          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.expression_semantics">Expression
2499          semantics</a>
2500        </h2>
2501<p>
2502          For any <code class="computeroutput"><span class="identifier">C</span></code> boxed character
2503          value in the range <code class="computeroutput"><span class="special">[</span><span class="char">'0'</span><span class="special">..</span><span class="char">'9'</span><span class="special">]</span></code>
2504          the following expressions are equivalent
2505        </p>
2506<pre class="programlisting"><span class="identifier">digit_to_int</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span>
2507<span class="identifier">digit_to_int</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span>
2508<span class="identifier">digit_to_int_c</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;::</span><span class="identifier">type</span>
2509</pre>
2510<h2>
2511<a name="metaparse.reference.alphabetical.digit_to_int.h5"></a>
2512          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_to_int.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_to_int.example">Example</a>
2513        </h2>
2514<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">digit_to_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2515
2516<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
2517
2518<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2519
2520<span class="keyword">struct</span> <span class="identifier">nullary_metafunction_returning_4</span>
2521<span class="special">{</span>
2522  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'4'</span><span class="special">&gt;;</span>
2523<span class="special">};</span>
2524
2525<span class="keyword">static_assert</span><span class="special">(</span>
2526  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
2527  <span class="string">"it should convert a character to the corresponding integer value"</span>
2528<span class="special">);</span>
2529
2530<span class="keyword">static_assert</span><span class="special">(</span>
2531  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
2532    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'7'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">7</span><span class="special">,</span>
2533  <span class="string">"it should support currying"</span>
2534<span class="special">);</span>
2535
2536<span class="keyword">static_assert</span><span class="special">(</span>
2537  <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int</span><span class="special">&lt;</span><span class="identifier">nullary_metafunction_returning_4</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">4</span><span class="special">,</span>
2538  <span class="string">"it should support lazy evaluation"</span>
2539<span class="special">);</span>
2540</pre>
2541</div>
2542<div class="section">
2543<div class="titlepage"><div><div><h4 class="title">
2544<a name="metaparse.reference.alphabetical.digit_val"></a><a name="digit_val"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val" title="digit_val">digit_val</a>
2545</h4></div></div></div>
2546<h2>
2547<a name="metaparse.reference.alphabetical.digit_val.h0"></a>
2548          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_val.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val.synopsis">Synopsis</a>
2549        </h2>
2550<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">digit_val</span><span class="special">;</span>
2551</pre>
2552<p>
2553          This is a <a class="link" href="reference.html#parser">parser</a>.
2554        </p>
2555<h2>
2556<a name="metaparse.reference.alphabetical.digit_val.h1"></a>
2557          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_val.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val.description">Description</a>
2558        </h2>
2559<p>
2560          It accepts one character in the range <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>. The result
2561          of the parser is the value represented by the accepted character.
2562        </p>
2563<h2>
2564<a name="metaparse.reference.alphabetical.digit_val.h2"></a>
2565          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_val.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val.header">Header</a>
2566        </h2>
2567<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">metaparse</span><span class="special">/</span><span class="identifier">digit_val</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2568</pre>
2569<h2>
2570<a name="metaparse.reference.alphabetical.digit_val.h3"></a>
2571          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_val.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val.expression_semantics">Expression
2572          semantics</a>
2573        </h2>
2574<p>
2575          The following are equivalent:
2576        </p>
2577<pre class="programlisting"><span class="identifier">digit_val</span>
2578
2579<span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int</span><span class="special">&lt;&gt;&gt;</span>
2580</pre>
2581<h2>
2582<a name="metaparse.reference.alphabetical.digit_val.h4"></a>
2583          <span class="phrase"><a name="metaparse.reference.alphabetical.digit_val.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.digit_val.example">Example</a>
2584        </h2>
2585<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">metaparse</span><span class="special">/</span><span class="identifier">digit_val</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2586<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2587<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2588<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2589<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2590
2591<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2592
2593<span class="keyword">static_assert</span><span class="special">(</span>
2594  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2595  <span class="string">"digit_val should accept a digit"</span>
2596<span class="special">);</span>
2597
2598<span class="keyword">static_assert</span><span class="special">(</span>
2599  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2600  <span class="string">"digit_val should reject a character"</span>
2601<span class="special">);</span>
2602
2603<span class="keyword">static_assert</span><span class="special">(</span>
2604  <span class="identifier">get_result</span><span class="special">&lt;</span>
2605    <span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2606  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
2607  <span class="string">"the result of parsing should be the int value"</span>
2608<span class="special">);</span>
2609</pre>
2610</div>
2611<div class="section">
2612<div class="titlepage"><div><div><h4 class="title">
2613<a name="metaparse.reference.alphabetical.empty"></a><a name="empty"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.empty" title="empty">empty</a>
2614</h4></div></div></div>
2615<h2>
2616<a name="metaparse.reference.alphabetical.empty.h0"></a>
2617          <span class="phrase"><a name="metaparse.reference.alphabetical.empty.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.empty.synopsis">Synopsis</a>
2618        </h2>
2619<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Result</span><span class="special">&gt;</span>
2620<span class="keyword">struct</span> <span class="identifier">empty</span><span class="special">;</span>
2621</pre>
2622<p>
2623          This is a <a class="link" href="reference.html#parser">parser</a>.
2624        </p>
2625<div class="table">
2626<a name="metaparse.reference.alphabetical.empty.arguments"></a><p class="title"><b>Table 24.14. Arguments</b></p>
2627<div class="table-contents"><table class="table" summary="Arguments">
2628<colgroup>
2629<col>
2630<col>
2631</colgroup>
2632<thead><tr>
2633<th>
2634                  <p>
2635                    Name
2636                  </p>
2637                </th>
2638<th>
2639                  <p>
2640                    Type
2641                  </p>
2642                </th>
2643</tr></thead>
2644<tbody><tr>
2645<td>
2646                  <p>
2647                    <code class="computeroutput"><span class="identifier">Result</span></code>
2648                  </p>
2649                </td>
2650<td>
2651                  <p>
2652                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
2653                    value</a>
2654                  </p>
2655                </td>
2656</tr></tbody>
2657</table></div>
2658</div>
2659<br class="table-break"><h2>
2660<a name="metaparse.reference.alphabetical.empty.h1"></a>
2661          <span class="phrase"><a name="metaparse.reference.alphabetical.empty.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.empty.description">Description</a>
2662        </h2>
2663<p>
2664          It accepts empty input only. The result of parsing is the <code class="computeroutput"><span class="identifier">Result</span></code> argument.
2665        </p>
2666<h2>
2667<a name="metaparse.reference.alphabetical.empty.h2"></a>
2668          <span class="phrase"><a name="metaparse.reference.alphabetical.empty.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.empty.header">Header</a>
2669        </h2>
2670<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">metaparse</span><span class="special">/</span><span class="identifier">empty</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2671</pre>
2672<h2>
2673<a name="metaparse.reference.alphabetical.empty.h3"></a>
2674          <span class="phrase"><a name="metaparse.reference.alphabetical.empty.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.empty.expression_semantics">Expression
2675          semantics</a>
2676        </h2>
2677<p>
2678          For any <code class="computeroutput"><span class="identifier">c</span></code> class the following
2679          are equivalent:
2680        </p>
2681<pre class="programlisting"><span class="identifier">empty</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;</span>
2682
2683<span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">error</span><span class="special">::</span><span class="identifier">end_of_input_expected</span><span class="special">&gt;</span>
2684</pre>
2685<h2>
2686<a name="metaparse.reference.alphabetical.empty.h4"></a>
2687          <span class="phrase"><a name="metaparse.reference.alphabetical.empty.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.empty.example">Example</a>
2688        </h2>
2689<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">metaparse</span><span class="special">/</span><span class="identifier">empty</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2690<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2691<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2692<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2693<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2694
2695<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
2696
2697<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2698
2699<span class="keyword">using</span> <span class="identifier">want_empty</span> <span class="special">=</span> <span class="identifier">empty</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"result"</span><span class="special">)&gt;;</span>
2700
2701<span class="keyword">static_assert</span><span class="special">(</span>
2702  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2703  <span class="string">"empty accepts the empty input"</span>
2704<span class="special">);</span>
2705
2706<span class="keyword">static_assert</span><span class="special">(</span>
2707  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2708  <span class="string">"empty should reject non-empty input"</span>
2709<span class="special">);</span>
2710
2711<span class="keyword">static_assert</span><span class="special">(</span>
2712  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
2713    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
2714    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"result"</span><span class="special">)</span>
2715  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2716  <span class="string">"the result of parsing should be the given value"</span>
2717<span class="special">);</span>
2718</pre>
2719</div>
2720<div class="section">
2721<div class="titlepage"><div><div><h4 class="title">
2722<a name="metaparse.reference.alphabetical.end_of_input_expected"></a><a name="end_of_input_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.end_of_input_expected" title="end_of_input_expected">end_of_input_expected</a>
2723</h4></div></div></div>
2724<h2>
2725<a name="metaparse.reference.alphabetical.end_of_input_expected.h0"></a>
2726          <span class="phrase"><a name="metaparse.reference.alphabetical.end_of_input_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.end_of_input_expected.synopsis">Synopsis</a>
2727        </h2>
2728<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
2729<span class="special">{</span>
2730  <span class="keyword">struct</span> <span class="identifier">end_of_input_expected</span><span class="special">;</span>
2731<span class="special">}</span>
2732</pre>
2733<p>
2734          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
2735        </p>
2736<h2>
2737<a name="metaparse.reference.alphabetical.end_of_input_expected.h1"></a>
2738          <span class="phrase"><a name="metaparse.reference.alphabetical.end_of_input_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.end_of_input_expected.description">Description</a>
2739        </h2>
2740<p>
2741          Class representing the error that the input contains more characters than
2742          it should.
2743        </p>
2744<h2>
2745<a name="metaparse.reference.alphabetical.end_of_input_expected.h2"></a>
2746          <span class="phrase"><a name="metaparse.reference.alphabetical.end_of_input_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.end_of_input_expected.header">Header</a>
2747        </h2>
2748<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">end_of_input_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2749</pre>
2750</div>
2751<div class="section">
2752<div class="titlepage"><div><div><h4 class="title">
2753<a name="metaparse.reference.alphabetical.entire_input"></a><a name="entire_input"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input" title="entire_input">entire_input</a>
2754</h4></div></div></div>
2755<h2>
2756<a name="metaparse.reference.alphabetical.entire_input.h0"></a>
2757          <span class="phrase"><a name="metaparse.reference.alphabetical.entire_input.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input.synopsis">Synopsis</a>
2758        </h2>
2759<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Msg</span> <span class="special">=</span> <span class="identifier">error</span><span class="special">::</span><span class="identifier">end_of_input_expected</span><span class="special">&gt;</span>
2760<span class="keyword">struct</span> <span class="identifier">entire_input</span><span class="special">;</span>
2761</pre>
2762<p>
2763          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
2764        </p>
2765<div class="table">
2766<a name="metaparse.reference.alphabetical.entire_input.arguments"></a><p class="title"><b>Table 24.15. Arguments</b></p>
2767<div class="table-contents"><table class="table" summary="Arguments">
2768<colgroup>
2769<col>
2770<col>
2771</colgroup>
2772<thead><tr>
2773<th>
2774                  <p>
2775                    Name
2776                  </p>
2777                </th>
2778<th>
2779                  <p>
2780                    Type
2781                  </p>
2782                </th>
2783</tr></thead>
2784<tbody>
2785<tr>
2786<td>
2787                  <p>
2788                    <code class="computeroutput"><span class="identifier">P</span></code>
2789                  </p>
2790                </td>
2791<td>
2792                  <p>
2793                    <a class="link" href="reference.html#parser">parser</a>
2794                  </p>
2795                </td>
2796</tr>
2797<tr>
2798<td>
2799                  <p>
2800                    <code class="computeroutput"><span class="identifier">Msg</span></code>
2801                  </p>
2802                </td>
2803<td>
2804                  <p>
2805                    <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
2806                  </p>
2807                </td>
2808</tr>
2809</tbody>
2810</table></div>
2811</div>
2812<br class="table-break"><h2>
2813<a name="metaparse.reference.alphabetical.entire_input.h1"></a>
2814          <span class="phrase"><a name="metaparse.reference.alphabetical.entire_input.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input.description">Description</a>
2815        </h2>
2816<p>
2817          It parses the input using <code class="computeroutput"><span class="identifier">P</span></code>
2818          and checks if it consumes the entire input. If <code class="computeroutput"><span class="identifier">P</span></code>
2819          fails or doesn't consume the entire input, <code class="computeroutput"><span class="identifier">entire_input</span></code>
2820          fails. Otherwise <code class="computeroutput"><span class="identifier">entire_input</span></code>
2821          returns the result of <code class="computeroutput"><span class="identifier">P</span></code>.
2822          When <code class="computeroutput"><span class="identifier">P</span></code> does not consume
2823          the entire input, the error message returned by <code class="computeroutput"><span class="identifier">entire_input</span></code>
2824          is <code class="computeroutput"><span class="identifier">Msg</span></code>.
2825        </p>
2826<h2>
2827<a name="metaparse.reference.alphabetical.entire_input.h2"></a>
2828          <span class="phrase"><a name="metaparse.reference.alphabetical.entire_input.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input.header">Header</a>
2829        </h2>
2830<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">metaparse</span><span class="special">/</span><span class="identifier">entire_input</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2831</pre>
2832<h2>
2833<a name="metaparse.reference.alphabetical.entire_input.h3"></a>
2834          <span class="phrase"><a name="metaparse.reference.alphabetical.entire_input.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input.expression_semantics">Expression
2835          semantics</a>
2836        </h2>
2837<p>
2838          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">e</span></code> parsing error message the following
2839          are equivalent
2840        </p>
2841<pre class="programlisting"><span class="identifier">entire_input</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">e</span><span class="special">&gt;</span>
2842
2843<span class="identifier">first_of</span><span class="special">&lt;</span>
2844  <span class="identifier">p</span><span class="special">,</span>
2845  <span class="identifier">change_error_message</span><span class="special">&lt;</span><span class="identifier">empty</span><span class="special">&lt;/*</span> <span class="identifier">some</span> <span class="identifier">metaprogramming</span> <span class="identifier">value</span> <span class="special">*/&gt;,</span> <span class="identifier">e</span><span class="special">&gt;</span>
2846<span class="special">&gt;</span>
2847</pre>
2848<h2>
2849<a name="metaparse.reference.alphabetical.entire_input.h4"></a>
2850          <span class="phrase"><a name="metaparse.reference.alphabetical.entire_input.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.entire_input.example">Example</a>
2851        </h2>
2852<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">metaparse</span><span class="special">/</span><span class="identifier">entire_input</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2853<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2854<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2855<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2856<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2857<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2858<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2859
2860<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
2861
2862<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">extra_chars_at_end</span><span class="special">,</span> <span class="string">"Extra chars at end"</span><span class="special">);</span>
2863
2864<span class="keyword">using</span> <span class="identifier">int_parser</span> <span class="special">=</span> <span class="identifier">entire_input</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">extra_chars_at_end</span><span class="special">&gt;;</span>
2865
2866<span class="keyword">static_assert</span><span class="special">(</span>
2867  <span class="identifier">get_result</span><span class="special">&lt;</span>
2868    <span class="identifier">int_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1113"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2869  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1113</span><span class="special">,</span>
2870  <span class="string">"it should parse the input if it contains only an integer"</span>
2871<span class="special">);</span>
2872
2873<span class="keyword">static_assert</span><span class="special">(</span>
2874  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
2875    <span class="identifier">get_message</span><span class="special">&lt;</span>
2876      <span class="identifier">int_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1113mm"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
2877    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
2878    <span class="identifier">extra_chars_at_end</span>
2879  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
2880  <span class="string">"it should return the specified error message when there are extra characters"</span>
2881<span class="special">);</span>
2882</pre>
2883</div>
2884<div class="section">
2885<div class="titlepage"><div><div><h4 class="title">
2886<a name="metaparse.reference.alphabetical.except"></a><a name="except"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.except" title="except">except</a>
2887</h4></div></div></div>
2888<h2>
2889<a name="metaparse.reference.alphabetical.except.h0"></a>
2890          <span class="phrase"><a name="metaparse.reference.alphabetical.except.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.except.synopsis">Synopsis</a>
2891        </h2>
2892<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Result</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ErrorMsg</span><span class="special">&gt;</span>
2893<span class="keyword">struct</span> <span class="identifier">except</span><span class="special">;</span>
2894</pre>
2895<p>
2896          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
2897        </p>
2898<div class="table">
2899<a name="metaparse.reference.alphabetical.except.arguments"></a><p class="title"><b>Table 24.16. Arguments</b></p>
2900<div class="table-contents"><table class="table" summary="Arguments">
2901<colgroup>
2902<col>
2903<col>
2904</colgroup>
2905<thead><tr>
2906<th>
2907                  <p>
2908                    Name
2909                  </p>
2910                </th>
2911<th>
2912                  <p>
2913                    Type
2914                  </p>
2915                </th>
2916</tr></thead>
2917<tbody>
2918<tr>
2919<td>
2920                  <p>
2921                    <code class="computeroutput"><span class="identifier">P</span></code>
2922                  </p>
2923                </td>
2924<td>
2925                  <p>
2926                    <a class="link" href="reference.html#parser">parser</a>
2927                  </p>
2928                </td>
2929</tr>
2930<tr>
2931<td>
2932                  <p>
2933                    <code class="computeroutput"><span class="identifier">Result</span></code>
2934                  </p>
2935                </td>
2936<td>
2937                  <p>
2938                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
2939                    value</a>
2940                  </p>
2941                </td>
2942</tr>
2943<tr>
2944<td>
2945                  <p>
2946                    <code class="computeroutput"><span class="identifier">ErrorMsg</span></code>
2947                  </p>
2948                </td>
2949<td>
2950                  <p>
2951                    <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
2952                  </p>
2953                </td>
2954</tr>
2955</tbody>
2956</table></div>
2957</div>
2958<br class="table-break"><h2>
2959<a name="metaparse.reference.alphabetical.except.h1"></a>
2960          <span class="phrase"><a name="metaparse.reference.alphabetical.except.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.except.description">Description</a>
2961        </h2>
2962<p>
2963          <code class="computeroutput"><span class="identifier">except</span></code> accepts the input
2964          when <code class="computeroutput"><span class="identifier">P</span></code> rejects it and the
2965          result of parsing is the <code class="computeroutput"><span class="identifier">Result</span></code>
2966          argument. When <code class="computeroutput"><span class="identifier">P</span></code> accepts
2967          the input, <code class="computeroutput"><span class="identifier">except</span></code> rejects
2968          it and the reason is <code class="computeroutput"><span class="identifier">ErrorMsg</span></code>.
2969        </p>
2970<h2>
2971<a name="metaparse.reference.alphabetical.except.h2"></a>
2972          <span class="phrase"><a name="metaparse.reference.alphabetical.except.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.except.header">Header</a>
2973        </h2>
2974<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">metaparse</span><span class="special">/</span><span class="identifier">except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
2975</pre>
2976<h2>
2977<a name="metaparse.reference.alphabetical.except.h3"></a>
2978          <span class="phrase"><a name="metaparse.reference.alphabetical.except.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.except.expression_semantics">Expression
2979          semantics</a>
2980        </h2>
2981<p>
2982          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">c</span></code> class, <code class="computeroutput"><span class="identifier">msg</span></code>
2983          parsing error message, <code class="computeroutput"><span class="identifier">s</span></code>
2984          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
2985          source position the following are equivalent
2986        </p>
2987<pre class="programlisting"><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
2988<span class="identifier">c</span>
2989
2990<span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
2991<span class="identifier">s</span>
2992
2993<span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
2994<span class="identifier">pos</span>
2995</pre>
2996<p>
2997          when <code class="computeroutput"><span class="identifier">p</span></code> rejects the input.
2998          The result of the parser is an error with the error message <code class="computeroutput"><span class="identifier">msg</span></code> otherwise.
2999        </p>
3000<h2>
3001<a name="metaparse.reference.alphabetical.except.h4"></a>
3002          <span class="phrase"><a name="metaparse.reference.alphabetical.except.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.except.example">Example</a>
3003        </h2>
3004<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">metaparse</span><span class="special">/</span><span class="identifier">except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3005<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3006<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3007<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3008<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3009<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3010<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3011
3012<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3013
3014<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3015
3016<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span>
3017  <span class="identifier">number_is_not_allowed</span><span class="special">,</span>
3018  <span class="string">"numbers are not allowed here"</span>
3019<span class="special">);</span>
3020
3021<span class="keyword">using</span> <span class="identifier">except_int</span> <span class="special">=</span>
3022  <span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;,</span> <span class="identifier">number_is_not_allowed</span><span class="special">&gt;;</span>
3023
3024<span class="keyword">static_assert</span><span class="special">(</span>
3025  <span class="identifier">get_result</span><span class="special">&lt;</span>
3026    <span class="identifier">except_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3027  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1</span><span class="special">,</span>
3028  <span class="string">"it should accept the input when it is not an integer"</span>
3029<span class="special">);</span>
3030
3031<span class="keyword">static_assert</span><span class="special">(</span>
3032  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
3033    <span class="identifier">number_is_not_allowed</span><span class="special">,</span>
3034    <span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">except_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
3035  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3036  <span class="string">"it should reject the input when it is an integer"</span>
3037<span class="special">);</span>
3038</pre>
3039</div>
3040<div class="section">
3041<div class="titlepage"><div><div><h4 class="title">
3042<a name="metaparse.reference.alphabetical.expected_to_fail"></a><a name="expected_to_fail"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.expected_to_fail" title="expected_to_fail">expected_to_fail</a>
3043</h4></div></div></div>
3044<h2>
3045<a name="metaparse.reference.alphabetical.expected_to_fail.h0"></a>
3046          <span class="phrase"><a name="metaparse.reference.alphabetical.expected_to_fail.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.expected_to_fail.synopsis">Synopsis</a>
3047        </h2>
3048<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
3049<span class="special">{</span>
3050  <span class="keyword">struct</span> <span class="identifier">expected_to_fail</span><span class="special">;</span>
3051<span class="special">}</span>
3052</pre>
3053<p>
3054          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
3055        </p>
3056<h2>
3057<a name="metaparse.reference.alphabetical.expected_to_fail.h1"></a>
3058          <span class="phrase"><a name="metaparse.reference.alphabetical.expected_to_fail.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.expected_to_fail.description">Description</a>
3059        </h2>
3060<p>
3061          Class representing the error that a parser was expected to fail but it
3062          did not fail.
3063        </p>
3064<h2>
3065<a name="metaparse.reference.alphabetical.expected_to_fail.h2"></a>
3066          <span class="phrase"><a name="metaparse.reference.alphabetical.expected_to_fail.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.expected_to_fail.header">Header</a>
3067        </h2>
3068<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">expected_to_fail</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3069</pre>
3070</div>
3071<div class="section">
3072<div class="titlepage"><div><div><h4 class="title">
3073<a name="metaparse.reference.alphabetical.fail_at_first_char_expected"></a><a name="fail_at_first_char_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected" title="fail_at_first_char_expected">fail_at_first_char_expected</a>
3074</h4></div></div></div>
3075<h2>
3076<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.h0"></a>
3077          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_at_first_char_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected.synopsis">Synopsis</a>
3078        </h2>
3079<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
3080<span class="keyword">struct</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">;</span>
3081</pre>
3082<p>
3083          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3084        </p>
3085<div class="table">
3086<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.arguments"></a><p class="title"><b>Table 24.17. Arguments</b></p>
3087<div class="table-contents"><table class="table" summary="Arguments">
3088<colgroup>
3089<col>
3090<col>
3091</colgroup>
3092<thead><tr>
3093<th>
3094                  <p>
3095                    Name
3096                  </p>
3097                </th>
3098<th>
3099                  <p>
3100                    Type
3101                  </p>
3102                </th>
3103</tr></thead>
3104<tbody><tr>
3105<td>
3106                  <p>
3107                    <code class="computeroutput"><span class="identifier">P</span></code>
3108                  </p>
3109                </td>
3110<td>
3111                  <p>
3112                    <a class="link" href="reference.html#parser">parser</a>
3113                  </p>
3114                </td>
3115</tr></tbody>
3116</table></div>
3117</div>
3118<br class="table-break"><h2>
3119<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.h1"></a>
3120          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_at_first_char_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected.description">Description</a>
3121        </h2>
3122<p>
3123          It tries to parse the input using <code class="computeroutput"><span class="identifier">P</span></code>.
3124          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
3125          without consuming any character, <code class="computeroutput"><span class="identifier">fail_at_first_char_expected</span></code>
3126          accepts the input. Otherwise (when <code class="computeroutput"><span class="identifier">P</span></code>
3127          accepts the input or when it consumes characters before rejecting the input)
3128          <code class="computeroutput"><span class="identifier">fail_at_first_char_expected</span></code>
3129          rejects the input.
3130        </p>
3131<h2>
3132<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.h2"></a>
3133          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_at_first_char_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected.header">Header</a>
3134        </h2>
3135<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">metaparse</span><span class="special">/</span><span class="identifier">fail_at_first_char_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3136</pre>
3137<h2>
3138<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.h3"></a>
3139          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_at_first_char_expected.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected.expression_semantics">Expression
3140          semantics</a>
3141        </h2>
3142<p>
3143          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position:
3144        </p>
3145<p>
3146          When <code class="computeroutput"><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span></code>
3147          is false, the following are equivalent:
3148        </p>
3149<pre class="programlisting"><span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
3150<span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">error</span><span class="special">::</span><span class="identifier">expected_to_fail</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3151</pre>
3152<p>
3153          When <code class="computeroutput"><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span></code>
3154          is true and <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">pos</span><span class="special">,</span> <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
3155          is also true, the following are equivalent:
3156        </p>
3157<pre class="programlisting"><span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
3158<span class="identifier">accept</span><span class="special">&lt;/*</span> <span class="identifier">unspecified</span> <span class="special">*/,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3159</pre>
3160<p>
3161          Otherwise the following are equivalent:
3162        </p>
3163<pre class="programlisting"><span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">except</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">&gt;,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
3164<span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
3165</pre>
3166<h2>
3167<a name="metaparse.reference.alphabetical.fail_at_first_char_expected.h4"></a>
3168          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_at_first_char_expected.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_at_first_char_expected.example">Example</a>
3169        </h2>
3170<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">metaparse</span><span class="special">/</span><span class="identifier">fail_at_first_char_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3171<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3172<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3173<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">foldl_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3174<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">first_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3175<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3176<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3177<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3178<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3179<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3180
3181<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3182<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3183
3184<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3185
3186<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;,</span> <span class="identifier">int_</span><span class="special">&gt;;</span>
3187
3188<span class="keyword">using</span> <span class="identifier">plus_exp</span> <span class="special">=</span>
3189  <span class="identifier">first_of</span><span class="special">&lt;</span>
3190    <span class="identifier">foldl_start_with_parser</span><span class="special">&lt;</span>
3191      <span class="identifier">plus_int</span><span class="special">,</span>
3192      <span class="identifier">int_</span><span class="special">,</span>
3193      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
3194    <span class="special">&gt;,</span>
3195    <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">&gt;</span>
3196  <span class="special">&gt;;</span>
3197
3198<span class="keyword">static_assert</span><span class="special">(</span>
3199  <span class="identifier">get_result</span><span class="special">&lt;</span>
3200    <span class="identifier">plus_exp</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1+2+3"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3201  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">6</span><span class="special">,</span>
3202  <span class="string">"it should accept the input when it is a list of '+' separated ints"</span>
3203<span class="special">);</span>
3204
3205<span class="keyword">static_assert</span><span class="special">(</span>
3206  <span class="identifier">is_error</span><span class="special">&lt;</span>
3207    <span class="identifier">plus_exp</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1+2+3+"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3208  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3209  <span class="string">"it should reject the input when it has an extra +"</span>
3210<span class="special">);</span>
3211</pre>
3212</div>
3213<div class="section">
3214<div class="titlepage"><div><div><h4 class="title">
3215<a name="metaparse.reference.alphabetical.fail"></a><a name="fail"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.fail" title="fail">fail</a>
3216</h4></div></div></div>
3217<h2>
3218<a name="metaparse.reference.alphabetical.fail.h0"></a>
3219          <span class="phrase"><a name="metaparse.reference.alphabetical.fail.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail.synopsis">Synopsis</a>
3220        </h2>
3221<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Msg</span><span class="special">&gt;</span>
3222<span class="keyword">struct</span> <span class="identifier">fail</span><span class="special">;</span>
3223</pre>
3224<p>
3225          This is a <a class="link" href="reference.html#parser">parser</a>.
3226        </p>
3227<div class="table">
3228<a name="metaparse.reference.alphabetical.fail.arguments"></a><p class="title"><b>Table 24.18. Arguments</b></p>
3229<div class="table-contents"><table class="table" summary="Arguments">
3230<colgroup>
3231<col>
3232<col>
3233</colgroup>
3234<thead><tr>
3235<th>
3236                  <p>
3237                    Name
3238                  </p>
3239                </th>
3240<th>
3241                  <p>
3242                    Type
3243                  </p>
3244                </th>
3245</tr></thead>
3246<tbody><tr>
3247<td>
3248                  <p>
3249                    <code class="computeroutput"><span class="identifier">Msg</span></code>
3250                  </p>
3251                </td>
3252<td>
3253                  <p>
3254                    <a class="link" href="reference.html#parsing_error_message">parsing error message</a>
3255                  </p>
3256                </td>
3257</tr></tbody>
3258</table></div>
3259</div>
3260<br class="table-break"><h2>
3261<a name="metaparse.reference.alphabetical.fail.h1"></a>
3262          <span class="phrase"><a name="metaparse.reference.alphabetical.fail.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail.description">Description</a>
3263        </h2>
3264<p>
3265          Parser rejecting every input.
3266        </p>
3267<h2>
3268<a name="metaparse.reference.alphabetical.fail.h2"></a>
3269          <span class="phrase"><a name="metaparse.reference.alphabetical.fail.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail.header">Header</a>
3270        </h2>
3271<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">metaparse</span><span class="special">/</span><span class="identifier">fail</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3272</pre>
3273<h2>
3274<a name="metaparse.reference.alphabetical.fail.h3"></a>
3275          <span class="phrase"><a name="metaparse.reference.alphabetical.fail.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail.expression_semantics">Expression
3276          semantics</a>
3277        </h2>
3278<p>
3279          For any <code class="computeroutput"><span class="identifier">msg</span></code> parsing error
3280          message, <code class="computeroutput"><span class="identifier">s</span></code> compile-time
3281          string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
3282        </p>
3283<pre class="programlisting"><span class="identifier">fail</span><span class="special">&lt;</span><span class="identifier">msg</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
3284</pre>
3285<p>
3286          returns an error with <code class="computeroutput"><span class="identifier">msg</span></code>
3287          as the error message.
3288        </p>
3289<h2>
3290<a name="metaparse.reference.alphabetical.fail.h4"></a>
3291          <span class="phrase"><a name="metaparse.reference.alphabetical.fail.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail.example">Example</a>
3292        </h2>
3293<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">metaparse</span><span class="special">/</span><span class="identifier">fail</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3294<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3295<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3296<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3297<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3298<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3299
3300<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3301
3302<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="string">"This is an example parsing error"</span><span class="special">);</span>
3303
3304<span class="keyword">using</span> <span class="identifier">fail_p</span> <span class="special">=</span> <span class="identifier">fail</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">&gt;;</span>
3305
3306<span class="keyword">static_assert</span><span class="special">(</span>
3307  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">fail_p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3308  <span class="string">"it should reject every input"</span>
3309<span class="special">);</span>
3310
3311<span class="keyword">static_assert</span><span class="special">(</span>
3312  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
3313    <span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">fail_p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
3314    <span class="identifier">sample_error</span>
3315  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3316  <span class="string">"the error message should be the type specified"</span>
3317<span class="special">);</span>
3318</pre>
3319</div>
3320<div class="section">
3321<div class="titlepage"><div><div><h4 class="title">
3322<a name="metaparse.reference.alphabetical.fail_tag"></a><a name="fail_tag"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_tag" title="fail_tag">fail_tag</a>
3323</h4></div></div></div>
3324<h2>
3325<a name="metaparse.reference.alphabetical.fail_tag.h0"></a>
3326          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_tag.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_tag.synopsis">Synopsis</a>
3327        </h2>
3328<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">fail_tag</span><span class="special">;</span>
3329</pre>
3330<p>
3331          This is a <a class="link" href="reference.html#tag">tag</a>.
3332        </p>
3333<h2>
3334<a name="metaparse.reference.alphabetical.fail_tag.h1"></a>
3335          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_tag.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_tag.description">Description</a>
3336        </h2>
3337<p>
3338          This is the tag of the values returned by a parser when parsing was not
3339          successful.
3340        </p>
3341<h2>
3342<a name="metaparse.reference.alphabetical.fail_tag.h2"></a>
3343          <span class="phrase"><a name="metaparse.reference.alphabetical.fail_tag.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.fail_tag.header">Header</a>
3344        </h2>
3345<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">metaparse</span><span class="special">/</span><span class="identifier">fail_tag</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3346</pre>
3347</div>
3348<div class="section">
3349<div class="titlepage"><div><div><h4 class="title">
3350<a name="metaparse.reference.alphabetical.first_of"></a><a name="first_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of" title="first_of">first_of</a>
3351</h4></div></div></div>
3352<h2>
3353<a name="metaparse.reference.alphabetical.first_of.h0"></a>
3354          <span class="phrase"><a name="metaparse.reference.alphabetical.first_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of.synopsis">Synopsis</a>
3355        </h2>
3356<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
3357<span class="keyword">struct</span> <span class="identifier">first_of</span><span class="special">;</span>
3358</pre>
3359<p>
3360          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3361        </p>
3362<div class="table">
3363<a name="metaparse.reference.alphabetical.first_of.arguments"></a><p class="title"><b>Table 24.19. Arguments</b></p>
3364<div class="table-contents"><table class="table" summary="Arguments">
3365<colgroup>
3366<col>
3367<col>
3368</colgroup>
3369<thead><tr>
3370<th>
3371                  <p>
3372                    Name
3373                  </p>
3374                </th>
3375<th>
3376                  <p>
3377                    Type
3378                  </p>
3379                </th>
3380</tr></thead>
3381<tbody><tr>
3382<td>
3383                  <p>
3384                    <code class="computeroutput"><span class="identifier">Ps</span></code>
3385                  </p>
3386                </td>
3387<td>
3388                  <p>
3389                    <a class="link" href="reference.html#parser">parser</a>s
3390                  </p>
3391                </td>
3392</tr></tbody>
3393</table></div>
3394</div>
3395<br class="table-break"><h2>
3396<a name="metaparse.reference.alphabetical.first_of.h1"></a>
3397          <span class="phrase"><a name="metaparse.reference.alphabetical.first_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of.description">Description</a>
3398        </h2>
3399<p>
3400          <code class="computeroutput"><span class="identifier">first_of</span></code> applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
3401          parsers in sequence. It accepts an input when all parsers accept it. The
3402          result of parsing is the result of the first parser.
3403        </p>
3404<p>
3405          On compilers, which are not C++11-compliant, the maximum number of parsers
3406          <code class="computeroutput"><span class="identifier">first_of</span></code> accepts can be
3407          specified with the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span></code>
3408          macro. Its default value is <code class="computeroutput"><span class="number">5</span></code>.
3409        </p>
3410<h2>
3411<a name="metaparse.reference.alphabetical.first_of.h2"></a>
3412          <span class="phrase"><a name="metaparse.reference.alphabetical.first_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of.header">Header</a>
3413        </h2>
3414<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">metaparse</span><span class="special">/</span><span class="identifier">first_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3415</pre>
3416<h2>
3417<a name="metaparse.reference.alphabetical.first_of.h3"></a>
3418          <span class="phrase"><a name="metaparse.reference.alphabetical.first_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of.expression_semantics">Expression
3419          semantics</a>
3420        </h2>
3421<p>
3422          For any <code class="computeroutput"><span class="identifier">p1</span></code>, ... <code class="computeroutput"><span class="identifier">pn</span></code> parsers
3423        </p>
3424<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
3425</pre>
3426<p>
3427          is equivalent to
3428        </p>
3429<pre class="programlisting"><span class="identifier">nth_of_c</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
3430</pre>
3431<h2>
3432<a name="metaparse.reference.alphabetical.first_of.h4"></a>
3433          <span class="phrase"><a name="metaparse.reference.alphabetical.first_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.first_of.example">Example</a>
3434        </h2>
3435<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">metaparse</span><span class="special">/</span><span class="identifier">first_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3436<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3437<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3438<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3439<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3440<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3441<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3442
3443<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
3444
3445<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3446
3447<span class="keyword">using</span> <span class="identifier">int_with_semicolon</span> <span class="special">=</span> <span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">';'</span><span class="special">&gt;&gt;;</span>
3448
3449<span class="keyword">static_assert</span><span class="special">(</span>
3450  <span class="identifier">is_error</span><span class="special">&lt;</span>
3451    <span class="identifier">int_with_semicolon</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3452  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3453  <span class="string">"int without semicolon is rejected"</span>
3454<span class="special">);</span>
3455
3456<span class="keyword">static_assert</span><span class="special">(</span>
3457  <span class="identifier">get_result</span><span class="special">&lt;</span>
3458    <span class="identifier">int_with_semicolon</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13;"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3459  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3460  <span class="string">"the result is the result of the first parser"</span>
3461<span class="special">);</span>
3462</pre>
3463</div>
3464<div class="section">
3465<div class="titlepage"><div><div><h4 class="title">
3466<a name="metaparse.reference.alphabetical.foldl1"></a><a name="foldl1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1" title="foldl1">foldl1</a>
3467</h4></div></div></div>
3468<h2>
3469<a name="metaparse.reference.alphabetical.foldl1.h0"></a>
3470          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1.synopsis">Synopsis</a>
3471        </h2>
3472<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
3473<span class="keyword">struct</span> <span class="identifier">foldl1</span><span class="special">;</span>
3474</pre>
3475<p>
3476          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3477        </p>
3478<div class="table">
3479<a name="metaparse.reference.alphabetical.foldl1.arguments"></a><p class="title"><b>Table 24.20. Arguments</b></p>
3480<div class="table-contents"><table class="table" summary="Arguments">
3481<colgroup>
3482<col>
3483<col>
3484</colgroup>
3485<thead><tr>
3486<th>
3487                  <p>
3488                    Name
3489                  </p>
3490                </th>
3491<th>
3492                  <p>
3493                    Type
3494                  </p>
3495                </th>
3496</tr></thead>
3497<tbody>
3498<tr>
3499<td>
3500                  <p>
3501                    <code class="computeroutput"><span class="identifier">P</span></code>
3502                  </p>
3503                </td>
3504<td>
3505                  <p>
3506                    <a class="link" href="reference.html#parser">parser</a>
3507                  </p>
3508                </td>
3509</tr>
3510<tr>
3511<td>
3512                  <p>
3513                    <code class="computeroutput"><span class="identifier">State</span></code>
3514                  </p>
3515                </td>
3516<td>
3517                  <p>
3518                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
3519                    value</a>
3520                  </p>
3521                </td>
3522</tr>
3523<tr>
3524<td>
3525                  <p>
3526                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
3527                  </p>
3528                </td>
3529<td>
3530                  <p>
3531                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
3532                    taking two arguments
3533                  </p>
3534                </td>
3535</tr>
3536</tbody>
3537</table></div>
3538</div>
3539<br class="table-break"><h2>
3540<a name="metaparse.reference.alphabetical.foldl1.h1"></a>
3541          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1.description">Description</a>
3542        </h2>
3543<p>
3544          <code class="computeroutput"><span class="identifier">foldl1</span></code> applies <code class="computeroutput"><span class="identifier">P</span></code> on the input string repeatedly as long
3545          as <code class="computeroutput"><span class="identifier">P</span></code> accepts the input.
3546          The result of parsing is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">fold</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">State</span><span class="special">,</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span></code>, where <code class="computeroutput"><span class="identifier">Sequence</span></code>
3547          is the sequence of the results of the applications of <code class="computeroutput"><span class="identifier">P</span></code>.
3548        </p>
3549<p>
3550          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
3551          for the first time, <code class="computeroutput"><span class="identifier">foldl1</span></code>
3552          rejects it as well. At least one successful application of <code class="computeroutput"><span class="identifier">P</span></code> is required for <code class="computeroutput"><span class="identifier">foldl1</span></code>
3553          to accept the input.
3554        </p>
3555<h2>
3556<a name="metaparse.reference.alphabetical.foldl1.h2"></a>
3557          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1.header">Header</a>
3558        </h2>
3559<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">metaparse</span><span class="special">/</span><span class="identifier">foldl1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3560</pre>
3561<h2>
3562<a name="metaparse.reference.alphabetical.foldl1.h3"></a>
3563          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1.expression_semantics">Expression
3564          semantics</a>
3565        </h2>
3566<p>
3567          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
3568          metafunction class taking two arguments the following are equivalent:
3569        </p>
3570<pre class="programlisting"><span class="identifier">foldl1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;</span>
3571
3572<span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;,</span> <span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;&gt;</span>
3573</pre>
3574<h2>
3575<a name="metaparse.reference.alphabetical.foldl1.h4"></a>
3576          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl1.example">Example</a>
3577        </h2>
3578<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">metaparse</span><span class="special">/</span><span class="identifier">foldl1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3579<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3580<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3581<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3582<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3583<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3584<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3585
3586<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3587<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3588
3589<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3590
3591<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
3592<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
3593  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
3594
3595<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldl1</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
3596
3597<span class="keyword">static_assert</span><span class="special">(</span>
3598  <span class="identifier">get_result</span><span class="special">&lt;</span>
3599    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 13 3 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3600  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
3601  <span class="string">"ints should sum the numbers"</span>
3602<span class="special">);</span>
3603
3604<span class="keyword">static_assert</span><span class="special">(</span>
3605  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3606  <span class="string">"when no numbers are provided, it should be an error"</span>
3607<span class="special">);</span>
3608</pre>
3609</div>
3610<div class="section">
3611<div class="titlepage"><div><div><h4 class="title">
3612<a name="metaparse.reference.alphabetical.foldl_reject_incomplete"></a><a name="foldl_reject_incomplete"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete" title="foldl_reject_incomplete">foldl_reject_incomplete</a>
3613</h4></div></div></div>
3614<h2>
3615<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.h0"></a>
3616          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete.synopsis">Synopsis</a>
3617        </h2>
3618<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
3619<span class="keyword">struct</span> <span class="identifier">foldl_reject_incomplete</span><span class="special">;</span>
3620</pre>
3621<p>
3622          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3623        </p>
3624<div class="table">
3625<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.arguments"></a><p class="title"><b>Table 24.21. Arguments</b></p>
3626<div class="table-contents"><table class="table" summary="Arguments">
3627<colgroup>
3628<col>
3629<col>
3630</colgroup>
3631<thead><tr>
3632<th>
3633                  <p>
3634                    Name
3635                  </p>
3636                </th>
3637<th>
3638                  <p>
3639                    Type
3640                  </p>
3641                </th>
3642</tr></thead>
3643<tbody>
3644<tr>
3645<td>
3646                  <p>
3647                    <code class="computeroutput"><span class="identifier">P</span></code>
3648                  </p>
3649                </td>
3650<td>
3651                  <p>
3652                    <a class="link" href="reference.html#parser">parser</a>
3653                  </p>
3654                </td>
3655</tr>
3656<tr>
3657<td>
3658                  <p>
3659                    <code class="computeroutput"><span class="identifier">State</span></code>
3660                  </p>
3661                </td>
3662<td>
3663                  <p>
3664                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
3665                    value</a>
3666                  </p>
3667                </td>
3668</tr>
3669<tr>
3670<td>
3671                  <p>
3672                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
3673                  </p>
3674                </td>
3675<td>
3676                  <p>
3677                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
3678                    taking two arguments
3679                  </p>
3680                </td>
3681</tr>
3682</tbody>
3683</table></div>
3684</div>
3685<br class="table-break"><h2>
3686<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.h1"></a>
3687          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete.description">Description</a>
3688        </h2>
3689<p>
3690          The same as <a class="link" href="reference.html#foldl"><code class="computeroutput"><span class="identifier">foldl</span></code></a>,
3691          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
3692          input, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete</span></code>
3693          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
3694          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete</span></code>
3695          rejects the input with the same error message this last application of
3696          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
3697          <code class="computeroutput"><span class="identifier">foldl_reject_incomplete</span></code>
3698          accepts the input and gives the same result as <a class="link" href="reference.html#foldl"><code class="computeroutput"><span class="identifier">foldl</span></code></a>.
3699        </p>
3700<p>
3701          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldl_reject_incomplete</span></code>
3702          works by example:
3703        </p>
3704<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
3705<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
3706<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
3707<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
3708</pre>
3709<p>
3710          <span class="inlinemediaobject"><img src="../images/metaparse/foldl_reject_incomplete_diag1.png" width="70%"></span>
3711        </p>
3712<h2>
3713<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.h2"></a>
3714          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete.header">Header</a>
3715        </h2>
3716<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3717</pre>
3718<h2>
3719<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.h3"></a>
3720          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete.expression_semantics">Expression
3721          semantics</a>
3722        </h2>
3723<p>
3724          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
3725          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
3726          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
3727          source position
3728        </p>
3729<pre class="programlisting"><span class="identifier">foldl_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3730</pre>
3731<p>
3732          is equivalent to
3733        </p>
3734<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3735</pre>
3736<h2>
3737<a name="metaparse.reference.alphabetical.foldl_reject_incomplete.h4"></a>
3738          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete.example">Example</a>
3739        </h2>
3740<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3741<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3742<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3743<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3744<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3745<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3746<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3747<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3748<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3749
3750<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3751<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3752<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3753
3754<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3755
3756<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
3757<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
3758<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
3759<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
3760  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
3761
3762<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldl_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
3763
3764<span class="keyword">static_assert</span><span class="special">(</span>
3765  <span class="identifier">get_result</span><span class="special">&lt;</span>
3766    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3767  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
3768  <span class="string">"ints should sum the numbers"</span>
3769<span class="special">);</span>
3770
3771<span class="keyword">static_assert</span><span class="special">(</span>
3772  <span class="identifier">is_error</span><span class="special">&lt;</span>
3773    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3774  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3775  <span class="string">"when the last number is missing, it should be an error"</span>
3776<span class="special">);</span>
3777</pre>
3778</div>
3779<div class="section">
3780<div class="titlepage"><div><div><h4 class="title">
3781<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1"></a><a name="foldl_reject_incomplete1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1" title="foldl_reject_incomplete1">foldl_reject_incomplete1</a>
3782</h4></div></div></div>
3783<h2>
3784<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.h0"></a>
3785          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1.synopsis">Synopsis</a>
3786        </h2>
3787<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
3788<span class="keyword">struct</span> <span class="identifier">foldl_reject_incomplete1</span><span class="special">;</span>
3789</pre>
3790<p>
3791          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3792        </p>
3793<div class="table">
3794<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.arguments"></a><p class="title"><b>Table 24.22. Arguments</b></p>
3795<div class="table-contents"><table class="table" summary="Arguments">
3796<colgroup>
3797<col>
3798<col>
3799</colgroup>
3800<thead><tr>
3801<th>
3802                  <p>
3803                    Name
3804                  </p>
3805                </th>
3806<th>
3807                  <p>
3808                    Type
3809                  </p>
3810                </th>
3811</tr></thead>
3812<tbody>
3813<tr>
3814<td>
3815                  <p>
3816                    <code class="computeroutput"><span class="identifier">P</span></code>
3817                  </p>
3818                </td>
3819<td>
3820                  <p>
3821                    <a class="link" href="reference.html#parser">parser</a>
3822                  </p>
3823                </td>
3824</tr>
3825<tr>
3826<td>
3827                  <p>
3828                    <code class="computeroutput"><span class="identifier">State</span></code>
3829                  </p>
3830                </td>
3831<td>
3832                  <p>
3833                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
3834                    value</a>
3835                  </p>
3836                </td>
3837</tr>
3838<tr>
3839<td>
3840                  <p>
3841                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
3842                  </p>
3843                </td>
3844<td>
3845                  <p>
3846                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
3847                    taking two arguments
3848                  </p>
3849                </td>
3850</tr>
3851</tbody>
3852</table></div>
3853</div>
3854<br class="table-break"><h2>
3855<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.h1"></a>
3856          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1.description">Description</a>
3857        </h2>
3858<p>
3859          The same as <a class="link" href="reference.html#foldl1"><code class="computeroutput"><span class="identifier">foldl1</span></code></a>,
3860          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
3861          input, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete1</span></code>
3862          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
3863          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete1</span></code>
3864          rejects the input with the same error message this last application of
3865          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
3866          <code class="computeroutput"><span class="identifier">foldl_reject_incomplete1</span></code>
3867          accepts the input and gives the same result as <a class="link" href="reference.html#foldl1"><code class="computeroutput"><span class="identifier">foldl1</span></code></a>.
3868        </p>
3869<h2>
3870<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.h2"></a>
3871          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1.header">Header</a>
3872        </h2>
3873<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3874</pre>
3875<h2>
3876<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.h3"></a>
3877          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1.expression_semantics">Expression
3878          semantics</a>
3879        </h2>
3880<p>
3881          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
3882          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
3883          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
3884          source position
3885        </p>
3886<pre class="programlisting"><span class="identifier">foldl_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3887</pre>
3888<p>
3889          is equivalent to
3890        </p>
3891<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">foldl1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
3892</pre>
3893<h2>
3894<a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.h4"></a>
3895          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete1.example">Example</a>
3896        </h2>
3897<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3898<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3899<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3900<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3901<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3902<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3903<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3904<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3905<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3906
3907<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3908<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3909<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
3910
3911<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
3912
3913<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
3914<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
3915<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
3916<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
3917  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
3918
3919<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldl_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
3920
3921<span class="keyword">static_assert</span><span class="special">(</span>
3922  <span class="identifier">get_result</span><span class="special">&lt;</span>
3923    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3924  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
3925  <span class="string">"ints should sum the numbers"</span>
3926<span class="special">);</span>
3927
3928<span class="keyword">static_assert</span><span class="special">(</span>
3929  <span class="identifier">is_error</span><span class="special">&lt;</span>
3930    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
3931  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3932  <span class="string">"when the last number is missing, it should be an error"</span>
3933<span class="special">);</span>
3934
3935<span class="keyword">static_assert</span><span class="special">(</span>
3936  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
3937  <span class="string">"when no numbers are provided, it should be an error"</span>
3938<span class="special">);</span>
3939</pre>
3940</div>
3941<div class="section">
3942<div class="titlepage"><div><div><h4 class="title">
3943<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi"></a><a name="foldl_reject_incomplete_start_with_parser"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi" title="foldl_reject_incomplete_start_with_parser">foldl_reject_incomplete_start_with_parser</a>
3944</h4></div></div></div>
3945<h2>
3946<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.h0"></a>
3947          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.synopsis">Synopsis</a>
3948        </h2>
3949<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">StateP</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
3950<span class="keyword">struct</span> <span class="identifier">foldl_reject_incomplete_start_with_parser</span><span class="special">;</span>
3951</pre>
3952<p>
3953          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
3954        </p>
3955<div class="table">
3956<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.arguments"></a><p class="title"><b>Table 24.23. Arguments</b></p>
3957<div class="table-contents"><table class="table" summary="Arguments">
3958<colgroup>
3959<col>
3960<col>
3961</colgroup>
3962<thead><tr>
3963<th>
3964                  <p>
3965                    Name
3966                  </p>
3967                </th>
3968<th>
3969                  <p>
3970                    Type
3971                  </p>
3972                </th>
3973</tr></thead>
3974<tbody>
3975<tr>
3976<td>
3977                  <p>
3978                    <code class="computeroutput"><span class="identifier">P</span></code>
3979                  </p>
3980                </td>
3981<td>
3982                  <p>
3983                    <a class="link" href="reference.html#parser">parser</a>
3984                  </p>
3985                </td>
3986</tr>
3987<tr>
3988<td>
3989                  <p>
3990                    <code class="computeroutput"><span class="identifier">StateP</span></code>
3991                  </p>
3992                </td>
3993<td>
3994                  <p>
3995                    <a class="link" href="reference.html#parser">parser</a>
3996                  </p>
3997                </td>
3998</tr>
3999<tr>
4000<td>
4001                  <p>
4002                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
4003                  </p>
4004                </td>
4005<td>
4006                  <p>
4007                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4008                    taking two arguments
4009                  </p>
4010                </td>
4011</tr>
4012</tbody>
4013</table></div>
4014</div>
4015<br class="table-break"><h2>
4016<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.h1"></a>
4017          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.description">Description</a>
4018        </h2>
4019<p>
4020          The same as <a class="link" href="reference.html#foldl_start_with_parser"><code class="computeroutput"><span class="identifier">foldl_start_with_parser</span></code></a>,
4021          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
4022          input, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete_start_with_parser</span></code>
4023          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
4024          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">foldl_reject_incomplete_start_with_parser</span></code>
4025          rejects the input with the same error message this last application of
4026          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
4027          <code class="computeroutput"><span class="identifier">foldl_reject_incomplete_start_with_parser</span></code>
4028          accepts the input and gives the same result as <a class="link" href="reference.html#foldl_start_with_parser"><code class="computeroutput"><span class="identifier">foldl_start_with_parser</span></code></a>.
4029        </p>
4030<p>
4031          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldl_reject_incomplete_start_with_parser</span></code>
4032          works by example:
4033        </p>
4034<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4035<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4036<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4037<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4038</pre>
4039<p>
4040          <span class="inlinemediaobject"><img src="../images/metaparse/foldl_reject_incomplete_start_with_parser_diag1.png" width="70%"></span>
4041        </p>
4042<p>
4043          Further details can be found in the <a class="link" href="user_manual.html#introducing-foldl_reject_incomplete_start_with_parser">Introducing
4044          foldl_reject_incomplete_start_with_parser</a> section of the <a class="link" href="user_manual.html#manual">User
4045          Manual</a>.
4046        </p>
4047<h2>
4048<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.h2"></a>
4049          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.header">Header</a>
4050        </h2>
4051<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4052</pre>
4053<h2>
4054<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.h3"></a>
4055          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.expression_semantics">Expression
4056          semantics</a>
4057        </h2>
4058<p>
4059          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">pt</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4060          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
4061          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
4062          source position
4063        </p>
4064<pre class="programlisting"><span class="identifier">foldl_reject_incomplete_start_with_parser</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4065</pre>
4066<p>
4067          is equivalent to
4068        </p>
4069<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span>
4070  <span class="identifier">foldl_start_with_parser</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;,</span>
4071  <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span>
4072<span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4073</pre>
4074<h2>
4075<a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.h4"></a>
4076          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_reject_incomplete_start_wi.example">Example</a>
4077        </h2>
4078<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_reject_incomplete_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4079<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4080<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4081<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4082<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4083<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4084<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4085<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4086<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4087
4088<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4089<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4090
4091<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4092
4093<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4094<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4095<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4096<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4097  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4098
4099<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span>
4100  <span class="identifier">foldl_reject_incomplete_start_with_parser</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4101
4102<span class="keyword">static_assert</span><span class="special">(</span>
4103  <span class="identifier">get_result</span><span class="special">&lt;</span>
4104    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 + 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4105  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4106  <span class="string">"ints should sum the numbers"</span>
4107<span class="special">);</span>
4108
4109<span class="keyword">static_assert</span><span class="special">(</span>
4110  <span class="identifier">is_error</span><span class="special">&lt;</span>
4111    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 + 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4112  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4113  <span class="string">"when the last number is missing, it should be an error"</span>
4114<span class="special">);</span>
4115</pre>
4116</div>
4117<div class="section">
4118<div class="titlepage"><div><div><h4 class="title">
4119<a name="metaparse.reference.alphabetical.foldl_start_with_parser"></a><a name="foldl_start_with_parser"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser" title="foldl_start_with_parser">foldl_start_with_parser</a>
4120</h4></div></div></div>
4121<h2>
4122<a name="metaparse.reference.alphabetical.foldl_start_with_parser.h0"></a>
4123          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_start_with_parser.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser.synopsis">Synopsis</a>
4124        </h2>
4125<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">StateP</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
4126<span class="keyword">struct</span> <span class="identifier">foldl_start_with_parser</span><span class="special">;</span>
4127</pre>
4128<p>
4129          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4130        </p>
4131<div class="table">
4132<a name="metaparse.reference.alphabetical.foldl_start_with_parser.arguments"></a><p class="title"><b>Table 24.24. Arguments</b></p>
4133<div class="table-contents"><table class="table" summary="Arguments">
4134<colgroup>
4135<col>
4136<col>
4137</colgroup>
4138<thead><tr>
4139<th>
4140                  <p>
4141                    Name
4142                  </p>
4143                </th>
4144<th>
4145                  <p>
4146                    Type
4147                  </p>
4148                </th>
4149</tr></thead>
4150<tbody>
4151<tr>
4152<td>
4153                  <p>
4154                    <code class="computeroutput"><span class="identifier">P</span></code>
4155                  </p>
4156                </td>
4157<td>
4158                  <p>
4159                    <a class="link" href="reference.html#parser">parser</a>
4160                  </p>
4161                </td>
4162</tr>
4163<tr>
4164<td>
4165                  <p>
4166                    <code class="computeroutput"><span class="identifier">StateP</span></code>
4167                  </p>
4168                </td>
4169<td>
4170                  <p>
4171                    <a class="link" href="reference.html#parser">parser</a>
4172                  </p>
4173                </td>
4174</tr>
4175<tr>
4176<td>
4177                  <p>
4178                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
4179                  </p>
4180                </td>
4181<td>
4182                  <p>
4183                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4184                    taking two arguments
4185                  </p>
4186                </td>
4187</tr>
4188</tbody>
4189</table></div>
4190</div>
4191<br class="table-break"><h2>
4192<a name="metaparse.reference.alphabetical.foldl_start_with_parser.h1"></a>
4193          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_start_with_parser.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser.description">Description</a>
4194        </h2>
4195<p>
4196          The same as <a class="link" href="reference.html#foldl"><code class="computeroutput"><span class="identifier">foldl</span></code></a>,
4197          but before folding it applies a parser, <code class="computeroutput"><span class="identifier">StateP</span></code>
4198          on the input. If it fails, <code class="computeroutput"><span class="identifier">foldl_start_with_parser</span></code>
4199          fails. If it succeeds, <code class="computeroutput"><span class="identifier">foldl_start_with_parser</span></code>
4200          works as <code class="computeroutput"><span class="identifier">foldl</span></code> taking the
4201          result of <code class="computeroutput"><span class="identifier">StateP</span></code> as the
4202          initial state.
4203        </p>
4204<p>
4205          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldl_start_with_parser</span></code>
4206          works by example:
4207        </p>
4208<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4209<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4210<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4211<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4212</pre>
4213<p>
4214          <span class="inlinemediaobject"><img src="../images/metaparse/foldl_start_with_parser_diag1.png" width="70%"></span>
4215        </p>
4216<p>
4217          Further details can be found in the <a class="link" href="user_manual.html#introducing-foldl_start_with_parser">Introducing
4218          foldl_start_with_parser</a> section of the <a class="link" href="user_manual.html#manual">User
4219          Manual</a>.
4220        </p>
4221<h2>
4222<a name="metaparse.reference.alphabetical.foldl_start_with_parser.h2"></a>
4223          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_start_with_parser.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser.header">Header</a>
4224        </h2>
4225<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4226</pre>
4227<h2>
4228<a name="metaparse.reference.alphabetical.foldl_start_with_parser.h3"></a>
4229          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_start_with_parser.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser.expression_semantics">Expression
4230          semantics</a>
4231        </h2>
4232<p>
4233          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">pt</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4234          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
4235          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
4236          source position
4237        </p>
4238<pre class="programlisting"><span class="identifier">foldl_start_with_parser</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4239</pre>
4240<p>
4241          is equivalent to
4242        </p>
4243<pre class="programlisting"><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4244</pre>
4245<p>
4246          when the above expression returns a parsing error. It is
4247        </p>
4248<pre class="programlisting"><span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
4249  <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
4250  <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
4251<span class="special">&gt;</span>
4252</pre>
4253<p>
4254          otherwise.
4255        </p>
4256<h2>
4257<a name="metaparse.reference.alphabetical.foldl_start_with_parser.h4"></a>
4258          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl_start_with_parser.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl_start_with_parser.example">Example</a>
4259        </h2>
4260<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">metaparse</span><span class="special">/</span><span class="identifier">foldl_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4261<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4262<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4263<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4264<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4265<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4266<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4267<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4268<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4269
4270<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4271<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4272
4273<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4274
4275<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4276<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4277<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4278<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4279  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4280
4281<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldl_start_with_parser</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4282
4283<span class="keyword">static_assert</span><span class="special">(</span>
4284  <span class="identifier">get_result</span><span class="special">&lt;</span>
4285    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 + 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4286  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4287  <span class="string">"ints should sum the numbers"</span>
4288<span class="special">);</span>
4289
4290<span class="keyword">static_assert</span><span class="special">(</span>
4291  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4292  <span class="string">"when no numbers are provided, it should be an error"</span>
4293<span class="special">);</span>
4294</pre>
4295</div>
4296<div class="section">
4297<div class="titlepage"><div><div><h4 class="title">
4298<a name="metaparse.reference.alphabetical.foldl"></a><a name="foldl"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl" title="foldl">foldl</a>
4299</h4></div></div></div>
4300<h2>
4301<a name="metaparse.reference.alphabetical.foldl.h0"></a>
4302          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl.synopsis">Synopsis</a>
4303        </h2>
4304<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
4305<span class="keyword">struct</span> <span class="identifier">foldl</span><span class="special">;</span>
4306</pre>
4307<p>
4308          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4309        </p>
4310<div class="table">
4311<a name="metaparse.reference.alphabetical.foldl.arguments"></a><p class="title"><b>Table 24.25. Arguments</b></p>
4312<div class="table-contents"><table class="table" summary="Arguments">
4313<colgroup>
4314<col>
4315<col>
4316</colgroup>
4317<thead><tr>
4318<th>
4319                  <p>
4320                    Name
4321                  </p>
4322                </th>
4323<th>
4324                  <p>
4325                    Type
4326                  </p>
4327                </th>
4328</tr></thead>
4329<tbody>
4330<tr>
4331<td>
4332                  <p>
4333                    <code class="computeroutput"><span class="identifier">P</span></code>
4334                  </p>
4335                </td>
4336<td>
4337                  <p>
4338                    <a class="link" href="reference.html#parser">parser</a>
4339                  </p>
4340                </td>
4341</tr>
4342<tr>
4343<td>
4344                  <p>
4345                    <code class="computeroutput"><span class="identifier">State</span></code>
4346                  </p>
4347                </td>
4348<td>
4349                  <p>
4350                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
4351                    value</a>
4352                  </p>
4353                </td>
4354</tr>
4355<tr>
4356<td>
4357                  <p>
4358                    <code class="computeroutput"><span class="identifier">ForwardOp</span></code>
4359                  </p>
4360                </td>
4361<td>
4362                  <p>
4363                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4364                    taking two arguments
4365                  </p>
4366                </td>
4367</tr>
4368</tbody>
4369</table></div>
4370</div>
4371<br class="table-break"><h2>
4372<a name="metaparse.reference.alphabetical.foldl.h1"></a>
4373          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl.description">Description</a>
4374        </h2>
4375<p>
4376          <code class="computeroutput"><span class="identifier">foldl</span></code> applies <code class="computeroutput"><span class="identifier">P</span></code> on the input string repeatedly as long
4377          as <code class="computeroutput"><span class="identifier">P</span></code> accepts the input.
4378          The result of parsing is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">fold</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">State</span><span class="special">,</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span></code>, where <code class="computeroutput"><span class="identifier">Sequence</span></code>
4379          is the sequence of the results of the applications of <code class="computeroutput"><span class="identifier">P</span></code>.
4380        </p>
4381<p>
4382          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
4383          for the first time, <code class="computeroutput"><span class="identifier">foldl</span></code>
4384          still accepts the input and the result of parsing is <code class="computeroutput"><span class="identifier">State</span></code>.
4385        </p>
4386<p>
4387          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldl</span></code>
4388          works by example:
4389        </p>
4390<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4391<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4392</pre>
4393<p>
4394          <span class="inlinemediaobject"><img src="../images/metaparse/foldl_diag2.png" width="70%"></span>
4395        </p>
4396<p>
4397          Further details can be found in the <a class="link" href="user_manual.html#introducing-foldl">Introducing
4398          foldl</a> section of the <a class="link" href="user_manual.html#manual">User Manual</a>.
4399        </p>
4400<h2>
4401<a name="metaparse.reference.alphabetical.foldl.h2"></a>
4402          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl.header">Header</a>
4403        </h2>
4404<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">metaparse</span><span class="special">/</span><span class="identifier">foldl</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4405</pre>
4406<h2>
4407<a name="metaparse.reference.alphabetical.foldl.h3"></a>
4408          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl.expression_semantics">Expression
4409          semantics</a>
4410        </h2>
4411<p>
4412          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4413          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
4414          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
4415          source position
4416        </p>
4417<pre class="programlisting"><span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4418</pre>
4419<p>
4420          is equivalent to
4421        </p>
4422<pre class="programlisting"><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4423</pre>
4424<p>
4425          when <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> returns an error. It is
4426        </p>
4427<pre class="programlisting"><span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">f</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
4428  <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;,</span>
4429  <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;</span>
4430<span class="special">&gt;</span>
4431</pre>
4432<p>
4433          otherwise.
4434        </p>
4435<h2>
4436<a name="metaparse.reference.alphabetical.foldl.h4"></a>
4437          <span class="phrase"><a name="metaparse.reference.alphabetical.foldl.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldl.example">Example</a>
4438        </h2>
4439<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">metaparse</span><span class="special">/</span><span class="identifier">foldl</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4440<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4441<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4442<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4443<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4444<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4445
4446<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4447<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4448
4449<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4450
4451<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4452<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4453  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4454
4455<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldl</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4456
4457<span class="keyword">static_assert</span><span class="special">(</span>
4458  <span class="identifier">get_result</span><span class="special">&lt;</span>
4459    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 13 3 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4460  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4461  <span class="string">"ints should sum the numbers"</span>
4462<span class="special">);</span>
4463
4464<span class="keyword">static_assert</span><span class="special">(</span>
4465  <span class="identifier">get_result</span><span class="special">&lt;</span>
4466    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4467  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
4468  <span class="string">"the sum of no elements is 0"</span>
4469<span class="special">);</span>
4470</pre>
4471</div>
4472<div class="section">
4473<div class="titlepage"><div><div><h4 class="title">
4474<a name="metaparse.reference.alphabetical.foldr1"></a><a name="foldr1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1" title="foldr1">foldr1</a>
4475</h4></div></div></div>
4476<h2>
4477<a name="metaparse.reference.alphabetical.foldr1.h0"></a>
4478          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1.synopsis">Synopsis</a>
4479        </h2>
4480<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span>
4481<span class="keyword">struct</span> <span class="identifier">foldr1</span><span class="special">;</span>
4482</pre>
4483<p>
4484          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4485        </p>
4486<div class="table">
4487<a name="metaparse.reference.alphabetical.foldr1.arguments"></a><p class="title"><b>Table 24.26. Arguments</b></p>
4488<div class="table-contents"><table class="table" summary="Arguments">
4489<colgroup>
4490<col>
4491<col>
4492</colgroup>
4493<thead><tr>
4494<th>
4495                  <p>
4496                    Name
4497                  </p>
4498                </th>
4499<th>
4500                  <p>
4501                    Type
4502                  </p>
4503                </th>
4504</tr></thead>
4505<tbody>
4506<tr>
4507<td>
4508                  <p>
4509                    <code class="computeroutput"><span class="identifier">P</span></code>
4510                  </p>
4511                </td>
4512<td>
4513                  <p>
4514                    <a class="link" href="reference.html#parser">parser</a>
4515                  </p>
4516                </td>
4517</tr>
4518<tr>
4519<td>
4520                  <p>
4521                    <code class="computeroutput"><span class="identifier">State</span></code>
4522                  </p>
4523                </td>
4524<td>
4525                  <p>
4526                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
4527                    value</a>
4528                  </p>
4529                </td>
4530</tr>
4531<tr>
4532<td>
4533                  <p>
4534                    <code class="computeroutput"><span class="identifier">BackwardOp</span></code>
4535                  </p>
4536                </td>
4537<td>
4538                  <p>
4539                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4540                    taking two arguments
4541                  </p>
4542                </td>
4543</tr>
4544</tbody>
4545</table></div>
4546</div>
4547<br class="table-break"><h2>
4548<a name="metaparse.reference.alphabetical.foldr1.h1"></a>
4549          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1.description">Description</a>
4550        </h2>
4551<p>
4552          <code class="computeroutput"><span class="identifier">foldr1</span></code> applies <code class="computeroutput"><span class="identifier">P</span></code> on the input string repeatedly as long
4553          as <code class="computeroutput"><span class="identifier">P</span></code> accepts the input.
4554          The result of parsing is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">reverse_fold</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">State</span><span class="special">,</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span></code>, where <code class="computeroutput"><span class="identifier">Sequence</span></code>
4555          is the sequence of the results of the applications of <code class="computeroutput"><span class="identifier">P</span></code>.
4556        </p>
4557<p>
4558          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
4559          for the first time, <code class="computeroutput"><span class="identifier">foldr1</span></code>
4560          rejects it as well. At least one successful application of <code class="computeroutput"><span class="identifier">P</span></code> is required for <code class="computeroutput"><span class="identifier">foldr1</span></code>
4561          to accept the input.
4562        </p>
4563<h2>
4564<a name="metaparse.reference.alphabetical.foldr1.h2"></a>
4565          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1.header">Header</a>
4566        </h2>
4567<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">metaparse</span><span class="special">/</span><span class="identifier">foldr1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4568</pre>
4569<h2>
4570<a name="metaparse.reference.alphabetical.foldr1.h3"></a>
4571          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1.expression_semantics">Expression
4572          semantics</a>
4573        </h2>
4574<p>
4575          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4576          metafunction class taking two arguments the following are equivalent:
4577        </p>
4578<pre class="programlisting"><span class="identifier">foldr1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;</span>
4579
4580<span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;,</span> <span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;&gt;</span>
4581</pre>
4582<h2>
4583<a name="metaparse.reference.alphabetical.foldr1.h4"></a>
4584          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr1.example">Example</a>
4585        </h2>
4586<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">metaparse</span><span class="special">/</span><span class="identifier">foldr1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4587<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4588<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4589<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4590<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4591<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4592<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4593
4594<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4595<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4596
4597<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4598
4599<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4600<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4601  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4602
4603<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldr1</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4604
4605<span class="keyword">static_assert</span><span class="special">(</span>
4606  <span class="identifier">get_result</span><span class="special">&lt;</span>
4607    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 13 3 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4608  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4609  <span class="string">"ints should sum the numbers"</span>
4610<span class="special">);</span>
4611
4612<span class="keyword">static_assert</span><span class="special">(</span>
4613  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4614  <span class="string">"when no numbers are provided, it should be an error"</span>
4615<span class="special">);</span>
4616</pre>
4617</div>
4618<div class="section">
4619<div class="titlepage"><div><div><h4 class="title">
4620<a name="metaparse.reference.alphabetical.foldr_reject_incomplete"></a><a name="foldr_reject_incomplete"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete" title="foldr_reject_incomplete">foldr_reject_incomplete</a>
4621</h4></div></div></div>
4622<h2>
4623<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.h0"></a>
4624          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete.synopsis">Synopsis</a>
4625        </h2>
4626<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span>
4627<span class="keyword">struct</span> <span class="identifier">foldr_reject_incomplete</span><span class="special">;</span>
4628</pre>
4629<p>
4630          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4631        </p>
4632<div class="table">
4633<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.arguments"></a><p class="title"><b>Table 24.27. Arguments</b></p>
4634<div class="table-contents"><table class="table" summary="Arguments">
4635<colgroup>
4636<col>
4637<col>
4638</colgroup>
4639<thead><tr>
4640<th>
4641                  <p>
4642                    Name
4643                  </p>
4644                </th>
4645<th>
4646                  <p>
4647                    Type
4648                  </p>
4649                </th>
4650</tr></thead>
4651<tbody>
4652<tr>
4653<td>
4654                  <p>
4655                    <code class="computeroutput"><span class="identifier">P</span></code>
4656                  </p>
4657                </td>
4658<td>
4659                  <p>
4660                    <a class="link" href="reference.html#parser">parser</a>
4661                  </p>
4662                </td>
4663</tr>
4664<tr>
4665<td>
4666                  <p>
4667                    <code class="computeroutput"><span class="identifier">State</span></code>
4668                  </p>
4669                </td>
4670<td>
4671                  <p>
4672                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
4673                    value</a>
4674                  </p>
4675                </td>
4676</tr>
4677<tr>
4678<td>
4679                  <p>
4680                    <code class="computeroutput"><span class="identifier">BackwardOp</span></code>
4681                  </p>
4682                </td>
4683<td>
4684                  <p>
4685                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4686                    taking two arguments
4687                  </p>
4688                </td>
4689</tr>
4690</tbody>
4691</table></div>
4692</div>
4693<br class="table-break"><h2>
4694<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.h1"></a>
4695          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete.description">Description</a>
4696        </h2>
4697<p>
4698          The same as <a class="link" href="reference.html#foldr"><code class="computeroutput"><span class="identifier">foldr</span></code></a>,
4699          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
4700          input, <code class="computeroutput"><span class="identifier">foldr_reject_incomplete</span></code>
4701          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
4702          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">foldr_reject_incomplete</span></code>
4703          rejects the input with the same error message this last application of
4704          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
4705          <code class="computeroutput"><span class="identifier">foldr_reject_incomplete</span></code>
4706          accepts the input and gives the same result as <a class="link" href="reference.html#foldr"><code class="computeroutput"><span class="identifier">foldr</span></code></a>.
4707        </p>
4708<p>
4709          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldr_reject_incomplete</span></code>
4710          works by example:
4711        </p>
4712<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4713<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4714<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4715<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4716</pre>
4717<p>
4718          <span class="inlinemediaobject"><img src="../images/metaparse/foldr_reject_incomplete_diag1.png" width="70%"></span>
4719        </p>
4720<p>
4721          Note that <code class="computeroutput"><span class="identifier">foldr_reject_incomplete</span></code>
4722          folds from right to left and therefore does not start folding until it
4723          reaches the end of the sequence. Since at the end of the sequence it finds
4724          an error, folding does not happen at all.
4725        </p>
4726<h2>
4727<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.h2"></a>
4728          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete.header">Header</a>
4729        </h2>
4730<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4731</pre>
4732<h2>
4733<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.h3"></a>
4734          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete.expression_semantics">Expression
4735          semantics</a>
4736        </h2>
4737<p>
4738          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4739          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
4740          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
4741          source position
4742        </p>
4743<pre class="programlisting"><span class="identifier">foldr_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4744</pre>
4745<p>
4746          is equivalent to
4747        </p>
4748<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4749</pre>
4750<h2>
4751<a name="metaparse.reference.alphabetical.foldr_reject_incomplete.h4"></a>
4752          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete.example">Example</a>
4753        </h2>
4754<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4755<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4756<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4757<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4758<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4759<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4760<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4761<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4762<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4763
4764<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4765<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4766<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4767
4768<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4769
4770<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4771<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4772<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4773<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4774  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4775
4776<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldr_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4777
4778<span class="keyword">static_assert</span><span class="special">(</span>
4779  <span class="identifier">get_result</span><span class="special">&lt;</span>
4780    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4781  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4782  <span class="string">"ints should sum the numbers"</span>
4783<span class="special">);</span>
4784
4785<span class="keyword">static_assert</span><span class="special">(</span>
4786  <span class="identifier">is_error</span><span class="special">&lt;</span>
4787    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4788  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4789  <span class="string">"when the last number is missing, it should be an error"</span>
4790<span class="special">);</span>
4791</pre>
4792</div>
4793<div class="section">
4794<div class="titlepage"><div><div><h4 class="title">
4795<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1"></a><a name="foldr_reject_incomplete1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1" title="foldr_reject_incomplete1">foldr_reject_incomplete1</a>
4796</h4></div></div></div>
4797<h2>
4798<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.h0"></a>
4799          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1.synopsis">Synopsis</a>
4800        </h2>
4801<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span>
4802<span class="keyword">struct</span> <span class="identifier">foldr_reject_incomplete1</span><span class="special">;</span>
4803</pre>
4804<p>
4805          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4806        </p>
4807<div class="table">
4808<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.arguments"></a><p class="title"><b>Table 24.28. Arguments</b></p>
4809<div class="table-contents"><table class="table" summary="Arguments">
4810<colgroup>
4811<col>
4812<col>
4813</colgroup>
4814<thead><tr>
4815<th>
4816                  <p>
4817                    Name
4818                  </p>
4819                </th>
4820<th>
4821                  <p>
4822                    Type
4823                  </p>
4824                </th>
4825</tr></thead>
4826<tbody>
4827<tr>
4828<td>
4829                  <p>
4830                    <code class="computeroutput"><span class="identifier">P</span></code>
4831                  </p>
4832                </td>
4833<td>
4834                  <p>
4835                    <a class="link" href="reference.html#parser">parser</a>
4836                  </p>
4837                </td>
4838</tr>
4839<tr>
4840<td>
4841                  <p>
4842                    <code class="computeroutput"><span class="identifier">State</span></code>
4843                  </p>
4844                </td>
4845<td>
4846                  <p>
4847                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
4848                    value</a>
4849                  </p>
4850                </td>
4851</tr>
4852<tr>
4853<td>
4854                  <p>
4855                    <code class="computeroutput"><span class="identifier">BackwardOp</span></code>
4856                  </p>
4857                </td>
4858<td>
4859                  <p>
4860                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
4861                    taking two arguments
4862                  </p>
4863                </td>
4864</tr>
4865</tbody>
4866</table></div>
4867</div>
4868<br class="table-break"><h2>
4869<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.h1"></a>
4870          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1.description">Description</a>
4871        </h2>
4872<p>
4873          The same as <a class="link" href="reference.html#foldr1"><code class="computeroutput"><span class="identifier">foldr1</span></code></a>,
4874          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
4875          input, <code class="computeroutput"><span class="identifier">foldr_reject_incomplete1</span></code>
4876          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
4877          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">foldr_reject_incomplete1</span></code>
4878          rejects the input with the same error message this last application of
4879          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
4880          <code class="computeroutput"><span class="identifier">foldr_reject_incomplete1</span></code>
4881          accepts the input and gives the same result as <a class="link" href="reference.html#foldr1"><code class="computeroutput"><span class="identifier">foldr1</span></code></a>.
4882        </p>
4883<h2>
4884<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.h2"></a>
4885          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1.header">Header</a>
4886        </h2>
4887<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4888</pre>
4889<h2>
4890<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.h3"></a>
4891          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1.expression_semantics">Expression
4892          semantics</a>
4893        </h2>
4894<p>
4895          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
4896          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
4897          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
4898          source position
4899        </p>
4900<pre class="programlisting"><span class="identifier">foldr_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4901</pre>
4902<p>
4903          is equivalent to
4904        </p>
4905<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">foldr1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
4906</pre>
4907<h2>
4908<a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.h4"></a>
4909          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_reject_incomplete1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_reject_incomplete1.example">Example</a>
4910        </h2>
4911<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4912<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4913<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4914<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4915<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4916<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4917<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4918<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4919<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4920
4921<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4922<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4923<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
4924
4925<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
4926
4927<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
4928<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
4929<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
4930<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
4931  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
4932
4933<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldr_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
4934
4935<span class="keyword">static_assert</span><span class="special">(</span>
4936  <span class="identifier">get_result</span><span class="special">&lt;</span>
4937    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4938  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
4939  <span class="string">"ints should sum the numbers"</span>
4940<span class="special">);</span>
4941
4942<span class="keyword">static_assert</span><span class="special">(</span>
4943  <span class="identifier">is_error</span><span class="special">&lt;</span>
4944    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
4945  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4946  <span class="string">"when the last number is missing, it should be an error"</span>
4947<span class="special">);</span>
4948
4949<span class="keyword">static_assert</span><span class="special">(</span>
4950  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
4951  <span class="string">"when no numbers are provided, it should be an error"</span>
4952<span class="special">);</span>
4953</pre>
4954</div>
4955<div class="section">
4956<div class="titlepage"><div><div><h4 class="title">
4957<a name="metaparse.reference.alphabetical.foldr_start_with_parser"></a><a name="foldr_start_with_parser"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser" title="foldr_start_with_parser">foldr_start_with_parser</a>
4958</h4></div></div></div>
4959<h2>
4960<a name="metaparse.reference.alphabetical.foldr_start_with_parser.h0"></a>
4961          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_start_with_parser.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser.synopsis">Synopsis</a>
4962        </h2>
4963<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">StateP</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span>
4964<span class="keyword">struct</span> <span class="identifier">foldr_start_with_parser</span><span class="special">;</span>
4965</pre>
4966<p>
4967          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
4968        </p>
4969<div class="table">
4970<a name="metaparse.reference.alphabetical.foldr_start_with_parser.arguments"></a><p class="title"><b>Table 24.29. Arguments</b></p>
4971<div class="table-contents"><table class="table" summary="Arguments">
4972<colgroup>
4973<col>
4974<col>
4975</colgroup>
4976<thead><tr>
4977<th>
4978                  <p>
4979                    Name
4980                  </p>
4981                </th>
4982<th>
4983                  <p>
4984                    Type
4985                  </p>
4986                </th>
4987</tr></thead>
4988<tbody>
4989<tr>
4990<td>
4991                  <p>
4992                    <code class="computeroutput"><span class="identifier">P</span></code>
4993                  </p>
4994                </td>
4995<td>
4996                  <p>
4997                    <a class="link" href="reference.html#parser">parser</a>
4998                  </p>
4999                </td>
5000</tr>
5001<tr>
5002<td>
5003                  <p>
5004                    <code class="computeroutput"><span class="identifier">StateP</span></code>
5005                  </p>
5006                </td>
5007<td>
5008                  <p>
5009                    <a class="link" href="reference.html#parser">parser</a>
5010                  </p>
5011                </td>
5012</tr>
5013<tr>
5014<td>
5015                  <p>
5016                    <code class="computeroutput"><span class="identifier">BackwardOp</span></code>
5017                  </p>
5018                </td>
5019<td>
5020                  <p>
5021                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
5022                    taking two arguments
5023                  </p>
5024                </td>
5025</tr>
5026</tbody>
5027</table></div>
5028</div>
5029<br class="table-break"><h2>
5030<a name="metaparse.reference.alphabetical.foldr_start_with_parser.h1"></a>
5031          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_start_with_parser.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser.description">Description</a>
5032        </h2>
5033<p>
5034          The same as <a class="link" href="reference.html#foldr"><code class="computeroutput"><span class="identifier">foldr</span></code></a>,
5035          but after folding it applies a parser, <code class="computeroutput"><span class="identifier">StateP</span></code>
5036          on the input. If <code class="computeroutput"><span class="identifier">StateP</span></code>
5037          fails, <code class="computeroutput"><span class="identifier">foldr_start_with_parser</span></code>
5038          fails. If it succeeds, the result of parsing is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">reverse_fold</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">State</span><span class="special">,</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span></code>,
5039          where <code class="computeroutput"><span class="identifier">Sequence</span></code> is the sequence
5040          of the results of the applications of <code class="computeroutput"><span class="identifier">P</span></code>
5041          and <code class="computeroutput"><span class="identifier">State</span></code> is the result
5042          <code class="computeroutput"><span class="identifier">StateP</span></code> returned <span class="emphasis"><em>after</em></span>
5043          the repeated application of <code class="computeroutput"><span class="identifier">P</span></code>
5044          on the input.
5045        </p>
5046<p>
5047          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldr_start_with_parser</span></code>
5048          works by example:
5049        </p>
5050<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
5051<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
5052<span class="keyword">using</span> <span class="identifier">int_plus</span> <span class="special">=</span> <span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">plus_token</span><span class="special">&gt;;</span>
5053<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
5054</pre>
5055<p>
5056          <span class="inlinemediaobject"><img src="../images/metaparse/foldr_start_with_parser_diag1.png" width="70%"></span>
5057        </p>
5058<p>
5059          Further details can be found in the <a class="link" href="user_manual.html#introducing-foldr_start_with_parser">Introducing
5060          foldr_start_with_parser</a> section of the <a class="link" href="user_manual.html#manual">User
5061          Manual</a>.
5062        </p>
5063<h2>
5064<a name="metaparse.reference.alphabetical.foldr_start_with_parser.h2"></a>
5065          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_start_with_parser.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser.header">Header</a>
5066        </h2>
5067<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5068</pre>
5069<h2>
5070<a name="metaparse.reference.alphabetical.foldr_start_with_parser.h3"></a>
5071          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_start_with_parser.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser.expression_semantics">Expression
5072          semantics</a>
5073        </h2>
5074<p>
5075          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">pt</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
5076          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
5077          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
5078          source position let <code class="computeroutput"><span class="identifier">pos_</span></code>
5079          be the position where the repeated application of <code class="computeroutput"><span class="identifier">p</span></code>
5080          on <code class="computeroutput"><span class="identifier">s</span></code> fails for the first
5081          time. Let <code class="computeroutput"><span class="identifier">s_</span></code> be the postfix
5082          of <code class="computeroutput"><span class="identifier">s</span></code> starting at that position.
5083        </p>
5084<pre class="programlisting"><span class="identifier">foldr_start_with_parser</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">pt</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
5085</pre>
5086<p>
5087          is equivalent to
5088        </p>
5089<pre class="programlisting"><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">&gt;</span>
5090</pre>
5091<p>
5092          when the above expression returns a parsing error. It is
5093        </p>
5094<pre class="programlisting"><span class="identifier">return_</span><span class="special">&lt;</span>
5095  <span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
5096<span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
5097  <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
5098  <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5099<span class="special">&gt;</span>
5100</pre>
5101<p>
5102          otherwise.
5103        </p>
5104<h2>
5105<a name="metaparse.reference.alphabetical.foldr_start_with_parser.h4"></a>
5106          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr_start_with_parser.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr_start_with_parser.example">Example</a>
5107        </h2>
5108<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">metaparse</span><span class="special">/</span><span class="identifier">foldr_start_with_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5109<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5110<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">first_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5111<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5112<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5113<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5114<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5115<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5116<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5117
5118<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5119<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5120
5121<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5122
5123<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
5124<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
5125<span class="keyword">using</span> <span class="identifier">int_plus</span> <span class="special">=</span> <span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">plus_token</span><span class="special">&gt;;</span>
5126<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
5127  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
5128
5129<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldr_start_with_parser</span><span class="special">&lt;</span><span class="identifier">int_plus</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
5130
5131<span class="keyword">static_assert</span><span class="special">(</span>
5132  <span class="identifier">get_result</span><span class="special">&lt;</span>
5133    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 + 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
5134  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
5135  <span class="string">"ints should sum the numbers"</span>
5136<span class="special">);</span>
5137
5138<span class="keyword">static_assert</span><span class="special">(</span>
5139  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5140  <span class="string">"when no numbers are provided, it should be an error"</span>
5141<span class="special">);</span>
5142</pre>
5143</div>
5144<div class="section">
5145<div class="titlepage"><div><div><h4 class="title">
5146<a name="metaparse.reference.alphabetical.foldr"></a><a name="foldr"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr" title="foldr">foldr</a>
5147</h4></div></div></div>
5148<h2>
5149<a name="metaparse.reference.alphabetical.foldr.h0"></a>
5150          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr.synopsis">Synopsis</a>
5151        </h2>
5152<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span>
5153<span class="keyword">struct</span> <span class="identifier">foldr</span><span class="special">;</span>
5154</pre>
5155<p>
5156          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
5157        </p>
5158<div class="table">
5159<a name="metaparse.reference.alphabetical.foldr.arguments"></a><p class="title"><b>Table 24.30. Arguments</b></p>
5160<div class="table-contents"><table class="table" summary="Arguments">
5161<colgroup>
5162<col>
5163<col>
5164</colgroup>
5165<thead><tr>
5166<th>
5167                  <p>
5168                    Name
5169                  </p>
5170                </th>
5171<th>
5172                  <p>
5173                    Type
5174                  </p>
5175                </th>
5176</tr></thead>
5177<tbody>
5178<tr>
5179<td>
5180                  <p>
5181                    <code class="computeroutput"><span class="identifier">P</span></code>
5182                  </p>
5183                </td>
5184<td>
5185                  <p>
5186                    <a class="link" href="reference.html#parser">parser</a>
5187                  </p>
5188                </td>
5189</tr>
5190<tr>
5191<td>
5192                  <p>
5193                    <code class="computeroutput"><span class="identifier">State</span></code>
5194                  </p>
5195                </td>
5196<td>
5197                  <p>
5198                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
5199                    value</a>
5200                  </p>
5201                </td>
5202</tr>
5203<tr>
5204<td>
5205                  <p>
5206                    <code class="computeroutput"><span class="identifier">BackwardOp</span></code>
5207                  </p>
5208                </td>
5209<td>
5210                  <p>
5211                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
5212                    taking two arguments
5213                  </p>
5214                </td>
5215</tr>
5216</tbody>
5217</table></div>
5218</div>
5219<br class="table-break"><h2>
5220<a name="metaparse.reference.alphabetical.foldr.h1"></a>
5221          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr.description">Description</a>
5222        </h2>
5223<p>
5224          <code class="computeroutput"><span class="identifier">foldr</span></code> applies <code class="computeroutput"><span class="identifier">P</span></code> on the input string repeatedly as long
5225          as <code class="computeroutput"><span class="identifier">P</span></code> accepts the input.
5226          The result of parsing is equivalent to <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">reverse_fold</span><span class="special">&lt;</span><span class="identifier">Sequence</span><span class="special">,</span> <span class="identifier">State</span><span class="special">,</span> <span class="identifier">BackwardOp</span><span class="special">&gt;</span></code>, where <code class="computeroutput"><span class="identifier">Sequence</span></code>
5227          is the sequence of the results of the applications of <code class="computeroutput"><span class="identifier">P</span></code>.
5228        </p>
5229<p>
5230          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
5231          for the first time, <code class="computeroutput"><span class="identifier">foldr</span></code>
5232          still accepts the input and the result of parsing is <code class="computeroutput"><span class="identifier">State</span></code>.
5233        </p>
5234<p>
5235          Here is a diagram showing how <code class="computeroutput"><span class="identifier">foldr</span></code>
5236          works by example:
5237        </p>
5238<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
5239<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
5240</pre>
5241<p>
5242          <span class="inlinemediaobject"><img src="../images/metaparse/foldr_diag1.png" width="70%"></span>
5243        </p>
5244<p>
5245          Further details can be found in the <a class="link" href="user_manual.html#introducing-foldr">Introducing
5246          foldr</a> section of the <a class="link" href="user_manual.html#manual">User Manual</a>.
5247        </p>
5248<h2>
5249<a name="metaparse.reference.alphabetical.foldr.h2"></a>
5250          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr.header">Header</a>
5251        </h2>
5252<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">metaparse</span><span class="special">/</span><span class="identifier">foldr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5253</pre>
5254<h2>
5255<a name="metaparse.reference.alphabetical.foldr.h3"></a>
5256          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr.expression_semantics">Expression
5257          semantics</a>
5258        </h2>
5259<p>
5260          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> class, <code class="computeroutput"><span class="identifier">f</span></code>
5261          metafunction class taking two arguments, <code class="computeroutput"><span class="identifier">s</span></code>
5262          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
5263          source position
5264        </p>
5265<pre class="programlisting"><span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
5266</pre>
5267<p>
5268          is equivalent to
5269        </p>
5270<pre class="programlisting"><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
5271</pre>
5272<p>
5273          when <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> returns an error. It is
5274        </p>
5275<pre class="programlisting"><span class="identifier">f</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span>
5276  <span class="identifier">get_result</span><span class="special">&lt;</span>
5277    <span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
5278      <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;,</span>
5279      <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;</span>
5280    <span class="special">&gt;</span>
5281  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
5282  <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5283<span class="special">&gt;</span>
5284</pre>
5285<p>
5286          otherwise.
5287        </p>
5288<h2>
5289<a name="metaparse.reference.alphabetical.foldr.h4"></a>
5290          <span class="phrase"><a name="metaparse.reference.alphabetical.foldr.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.foldr.example">Example</a>
5291        </h2>
5292<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">metaparse</span><span class="special">/</span><span class="identifier">foldr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5293<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5294<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5295<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5296<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5297<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5298
5299<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5300<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5301
5302<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5303
5304<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
5305<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span>
5306  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
5307
5308<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">foldr</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;,</span> <span class="identifier">sum_op</span><span class="special">&gt;;</span>
5309
5310<span class="keyword">static_assert</span><span class="special">(</span>
5311  <span class="identifier">get_result</span><span class="special">&lt;</span>
5312    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11 13 3 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
5313  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">48</span><span class="special">,</span>
5314  <span class="string">"ints should sum the numbers"</span>
5315<span class="special">);</span>
5316
5317<span class="keyword">static_assert</span><span class="special">(</span>
5318  <span class="identifier">get_result</span><span class="special">&lt;</span>
5319    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
5320  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
5321  <span class="string">"the sum of no elements is 0"</span>
5322<span class="special">);</span>
5323</pre>
5324</div>
5325<div class="section">
5326<div class="titlepage"><div><div><h4 class="title">
5327<a name="metaparse.reference.alphabetical.get_col"></a><a name="get_col"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col" title="get_col">get_col</a>
5328</h4></div></div></div>
5329<h2>
5330<a name="metaparse.reference.alphabetical.get_col.h0"></a>
5331          <span class="phrase"><a name="metaparse.reference.alphabetical.get_col.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col.synopsis">Synopsis</a>
5332        </h2>
5333<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">&gt;</span>
5334<span class="keyword">struct</span> <span class="identifier">get_col</span><span class="special">;</span>
5335</pre>
5336<p>
5337          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5338        </p>
5339<div class="table">
5340<a name="metaparse.reference.alphabetical.get_col.arguments"></a><p class="title"><b>Table 24.31. Arguments</b></p>
5341<div class="table-contents"><table class="table" summary="Arguments">
5342<colgroup>
5343<col>
5344<col>
5345</colgroup>
5346<thead><tr>
5347<th>
5348                  <p>
5349                    Name
5350                  </p>
5351                </th>
5352<th>
5353                  <p>
5354                    Type
5355                  </p>
5356                </th>
5357</tr></thead>
5358<tbody><tr>
5359<td>
5360                  <p>
5361                    <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
5362                  </p>
5363                </td>
5364<td>
5365                  <p>
5366                    <a class="link" href="reference.html#source_position">source position</a>
5367                  </p>
5368                </td>
5369</tr></tbody>
5370</table></div>
5371</div>
5372<br class="table-break"><h2>
5373<a name="metaparse.reference.alphabetical.get_col.h1"></a>
5374          <span class="phrase"><a name="metaparse.reference.alphabetical.get_col.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col.description">Description</a>
5375        </h2>
5376<p>
5377          Returns the column of a source position.
5378        </p>
5379<h2>
5380<a name="metaparse.reference.alphabetical.get_col.h2"></a>
5381          <span class="phrase"><a name="metaparse.reference.alphabetical.get_col.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col.header">Header</a>
5382        </h2>
5383<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">metaparse</span><span class="special">/</span><span class="identifier">get_col</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5384</pre>
5385<h2>
5386<a name="metaparse.reference.alphabetical.get_col.h3"></a>
5387          <span class="phrase"><a name="metaparse.reference.alphabetical.get_col.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col.expression_semantics">Expression
5388          semantics</a>
5389        </h2>
5390<p>
5391          For any <code class="computeroutput"><span class="identifier">l</span></code>, <code class="computeroutput"><span class="identifier">c</span></code> compile-time wrapped integral values
5392          and <code class="computeroutput"><span class="identifier">ch</span></code> compile-time wrapped
5393          character the following are equivalent
5394        </p>
5395<pre class="programlisting"><span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">ch</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5396
5397<span class="identifier">c</span><span class="special">::</span><span class="identifier">type</span>
5398</pre>
5399<h2>
5400<a name="metaparse.reference.alphabetical.get_col.h4"></a>
5401          <span class="phrase"><a name="metaparse.reference.alphabetical.get_col.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_col.example">Example</a>
5402        </h2>
5403<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">metaparse</span><span class="special">/</span><span class="identifier">get_col</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5404<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5405
5406<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5407
5408<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5409
5410<span class="keyword">struct</span> <span class="identifier">returns_source_position</span>
5411<span class="special">{</span>
5412  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
5413    <span class="identifier">source_position</span><span class="special">&lt;</span>
5414      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5415      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5416      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
5417    <span class="special">&gt;;</span>
5418<span class="special">};</span>
5419
5420<span class="keyword">static_assert</span><span class="special">(</span>
5421  <span class="identifier">get_col</span><span class="special">&lt;</span>
5422    <span class="identifier">source_position</span><span class="special">&lt;</span>
5423      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5424      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5425      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
5426    <span class="special">&gt;</span>
5427  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
5428  <span class="string">"It should return the column of a source position"</span>
5429<span class="special">);</span>
5430
5431<span class="keyword">static_assert</span><span class="special">(</span>
5432  <span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">returns_source_position</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
5433  <span class="string">"It should support lazy evaluation"</span>
5434<span class="special">);</span>
5435</pre>
5436</div>
5437<div class="section">
5438<div class="titlepage"><div><div><h4 class="title">
5439<a name="metaparse.reference.alphabetical.get_line"></a><a name="get_line"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line" title="get_line">get_line</a>
5440</h4></div></div></div>
5441<h2>
5442<a name="metaparse.reference.alphabetical.get_line.h0"></a>
5443          <span class="phrase"><a name="metaparse.reference.alphabetical.get_line.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line.synopsis">Synopsis</a>
5444        </h2>
5445<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">&gt;</span>
5446<span class="keyword">struct</span> <span class="identifier">get_line</span><span class="special">;</span>
5447</pre>
5448<p>
5449          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5450        </p>
5451<div class="table">
5452<a name="metaparse.reference.alphabetical.get_line.arguments"></a><p class="title"><b>Table 24.32. Arguments</b></p>
5453<div class="table-contents"><table class="table" summary="Arguments">
5454<colgroup>
5455<col>
5456<col>
5457</colgroup>
5458<thead><tr>
5459<th>
5460                  <p>
5461                    Name
5462                  </p>
5463                </th>
5464<th>
5465                  <p>
5466                    Type
5467                  </p>
5468                </th>
5469</tr></thead>
5470<tbody><tr>
5471<td>
5472                  <p>
5473                    <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
5474                  </p>
5475                </td>
5476<td>
5477                  <p>
5478                    <a class="link" href="reference.html#source_position">source position</a>
5479                  </p>
5480                </td>
5481</tr></tbody>
5482</table></div>
5483</div>
5484<br class="table-break"><h2>
5485<a name="metaparse.reference.alphabetical.get_line.h1"></a>
5486          <span class="phrase"><a name="metaparse.reference.alphabetical.get_line.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line.description">Description</a>
5487        </h2>
5488<p>
5489          Returns the line of a source position.
5490        </p>
5491<h2>
5492<a name="metaparse.reference.alphabetical.get_line.h2"></a>
5493          <span class="phrase"><a name="metaparse.reference.alphabetical.get_line.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line.header">Header</a>
5494        </h2>
5495<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">metaparse</span><span class="special">/</span><span class="identifier">get_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5496</pre>
5497<h2>
5498<a name="metaparse.reference.alphabetical.get_line.h3"></a>
5499          <span class="phrase"><a name="metaparse.reference.alphabetical.get_line.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line.expression_semantics">Expression
5500          semantics</a>
5501        </h2>
5502<p>
5503          For any <code class="computeroutput"><span class="identifier">l</span></code>, <code class="computeroutput"><span class="identifier">c</span></code> compile-time wrapped integral values
5504          and <code class="computeroutput"><span class="identifier">ch</span></code> compile-time wrapped
5505          character the following are equivalent
5506        </p>
5507<pre class="programlisting"><span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">ch</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5508
5509<span class="identifier">l</span><span class="special">::</span><span class="identifier">type</span>
5510</pre>
5511<h2>
5512<a name="metaparse.reference.alphabetical.get_line.h4"></a>
5513          <span class="phrase"><a name="metaparse.reference.alphabetical.get_line.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_line.example">Example</a>
5514        </h2>
5515<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">metaparse</span><span class="special">/</span><span class="identifier">get_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5516<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5517
5518<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5519
5520<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5521
5522<span class="keyword">struct</span> <span class="identifier">returns_source_position</span>
5523<span class="special">{</span>
5524  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
5525    <span class="identifier">source_position</span><span class="special">&lt;</span>
5526      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5527      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5528      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
5529    <span class="special">&gt;;</span>
5530<span class="special">};</span>
5531
5532<span class="keyword">static_assert</span><span class="special">(</span>
5533  <span class="identifier">get_line</span><span class="special">&lt;</span>
5534    <span class="identifier">source_position</span><span class="special">&lt;</span>
5535      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5536      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5537      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;</span>
5538    <span class="special">&gt;</span>
5539  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">11</span><span class="special">,</span>
5540  <span class="string">"It should return the line of a source position"</span>
5541<span class="special">);</span>
5542
5543<span class="keyword">static_assert</span><span class="special">(</span>
5544  <span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">returns_source_position</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">11</span><span class="special">,</span>
5545  <span class="string">"It should support lazy evaluation"</span>
5546<span class="special">);</span>
5547</pre>
5548</div>
5549<div class="section">
5550<div class="titlepage"><div><div><h4 class="title">
5551<a name="metaparse.reference.alphabetical.get_message"></a><a name="get_message"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_message" title="get_message">get_message</a>
5552</h4></div></div></div>
5553<h2>
5554<a name="metaparse.reference.alphabetical.get_message.h0"></a>
5555          <span class="phrase"><a name="metaparse.reference.alphabetical.get_message.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_message.synopsis">Synopsis</a>
5556        </h2>
5557<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">E</span><span class="special">&gt;</span>
5558<span class="keyword">struct</span> <span class="identifier">get_message</span><span class="special">;</span>
5559</pre>
5560<p>
5561          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5562        </p>
5563<div class="table">
5564<a name="metaparse.reference.alphabetical.get_message.arguments"></a><p class="title"><b>Table 24.33. Arguments</b></p>
5565<div class="table-contents"><table class="table" summary="Arguments">
5566<colgroup>
5567<col>
5568<col>
5569</colgroup>
5570<thead><tr>
5571<th>
5572                  <p>
5573                    Name
5574                  </p>
5575                </th>
5576<th>
5577                  <p>
5578                    Type
5579                  </p>
5580                </th>
5581</tr></thead>
5582<tbody><tr>
5583<td>
5584                  <p>
5585                    <code class="computeroutput"><span class="identifier">E</span></code>
5586                  </p>
5587                </td>
5588<td>
5589                  <p>
5590                    <a class="link" href="reference.html#reject">reject</a> value
5591                  </p>
5592                </td>
5593</tr></tbody>
5594</table></div>
5595</div>
5596<br class="table-break"><h2>
5597<a name="metaparse.reference.alphabetical.get_message.h1"></a>
5598          <span class="phrase"><a name="metaparse.reference.alphabetical.get_message.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_message.description">Description</a>
5599        </h2>
5600<p>
5601          Returns the error message of a parsing failure.
5602        </p>
5603<h2>
5604<a name="metaparse.reference.alphabetical.get_message.h2"></a>
5605          <span class="phrase"><a name="metaparse.reference.alphabetical.get_message.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_message.header">Header</a>
5606        </h2>
5607<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">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5608</pre>
5609<h2>
5610<a name="metaparse.reference.alphabetical.get_message.h3"></a>
5611          <span class="phrase"><a name="metaparse.reference.alphabetical.get_message.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_message.example">Example</a>
5612        </h2>
5613<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">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5614<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5615<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5616<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5617
5618<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5619
5620<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5621
5622<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="string">"Sample error message"</span><span class="special">);</span>
5623
5624<span class="keyword">struct</span> <span class="identifier">returns_reject</span>
5625<span class="special">{</span>
5626  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;;</span>
5627<span class="special">};</span>
5628
5629<span class="keyword">static_assert</span><span class="special">(</span>
5630  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
5631    <span class="identifier">sample_error</span><span class="special">,</span>
5632    <span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5633  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5634  <span class="string">"It should return the message"</span>
5635<span class="special">);</span>
5636
5637<span class="keyword">static_assert</span><span class="special">(</span>
5638  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">returns_reject</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5639  <span class="string">"It should support lazy evaluation"</span>
5640<span class="special">);</span>
5641</pre>
5642</div>
5643<div class="section">
5644<div class="titlepage"><div><div><h4 class="title">
5645<a name="metaparse.reference.alphabetical.get_position"></a><a name="get_position"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_position" title="get_position">get_position</a>
5646</h4></div></div></div>
5647<h2>
5648<a name="metaparse.reference.alphabetical.get_position.h0"></a>
5649          <span class="phrase"><a name="metaparse.reference.alphabetical.get_position.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_position.synopsis">Synopsis</a>
5650        </h2>
5651<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
5652<span class="keyword">struct</span> <span class="identifier">get_position</span><span class="special">;</span>
5653</pre>
5654<p>
5655          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5656        </p>
5657<div class="table">
5658<a name="metaparse.reference.alphabetical.get_position.arguments"></a><p class="title"><b>Table 24.34. Arguments</b></p>
5659<div class="table-contents"><table class="table" summary="Arguments">
5660<colgroup>
5661<col>
5662<col>
5663</colgroup>
5664<thead><tr>
5665<th>
5666                  <p>
5667                    Name
5668                  </p>
5669                </th>
5670<th>
5671                  <p>
5672                    Type
5673                  </p>
5674                </th>
5675</tr></thead>
5676<tbody><tr>
5677<td>
5678                  <p>
5679                    <code class="computeroutput"><span class="identifier">D</span></code>
5680                  </p>
5681                </td>
5682<td>
5683                  <p>
5684                    <a class="link" href="reference.html#accept">accept</a> or <a class="link" href="reference.html#reject">reject</a>
5685                    value
5686                  </p>
5687                </td>
5688</tr></tbody>
5689</table></div>
5690</div>
5691<br class="table-break"><h2>
5692<a name="metaparse.reference.alphabetical.get_position.h1"></a>
5693          <span class="phrase"><a name="metaparse.reference.alphabetical.get_position.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_position.description">Description</a>
5694        </h2>
5695<p>
5696          Returns the source position information of a parsing result.
5697        </p>
5698<h2>
5699<a name="metaparse.reference.alphabetical.get_position.h2"></a>
5700          <span class="phrase"><a name="metaparse.reference.alphabetical.get_position.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_position.header">Header</a>
5701        </h2>
5702<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">metaparse</span><span class="special">/</span><span class="identifier">get_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5703</pre>
5704<h2>
5705<a name="metaparse.reference.alphabetical.get_position.h3"></a>
5706          <span class="phrase"><a name="metaparse.reference.alphabetical.get_position.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_position.example">Example</a>
5707        </h2>
5708<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">metaparse</span><span class="special">/</span><span class="identifier">get_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5709<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5710<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5711<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5712<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5713<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5714
5715<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5716
5717<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5718
5719<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="string">"Sample error message"</span><span class="special">);</span>
5720
5721<span class="keyword">struct</span> <span class="identifier">returns_reject</span>
5722<span class="special">{</span>
5723  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;;</span>
5724<span class="special">};</span>
5725
5726<span class="keyword">static_assert</span><span class="special">(</span>
5727  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
5728    <span class="identifier">start</span><span class="special">,</span>
5729    <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5730  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5731  <span class="string">"It should return the position of a reject"</span>
5732<span class="special">);</span>
5733
5734<span class="keyword">static_assert</span><span class="special">(</span>
5735  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
5736    <span class="identifier">start</span><span class="special">,</span>
5737    <span class="identifier">get_position</span><span class="special">&lt;</span>
5738      <span class="identifier">accept</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
5739    <span class="special">&gt;::</span><span class="identifier">type</span>
5740  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5741  <span class="string">"It should return the position of an accept"</span>
5742<span class="special">);</span>
5743
5744<span class="keyword">static_assert</span><span class="special">(</span>
5745  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">start</span><span class="special">,</span> <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">returns_reject</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5746  <span class="string">"It should support lazy evaluation"</span>
5747<span class="special">);</span>
5748</pre>
5749</div>
5750<div class="section">
5751<div class="titlepage"><div><div><h4 class="title">
5752<a name="metaparse.reference.alphabetical.get_prev_char"></a><a name="get_prev_char"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char" title="get_prev_char">get_prev_char</a>
5753</h4></div></div></div>
5754<h2>
5755<a name="metaparse.reference.alphabetical.get_prev_char.h0"></a>
5756          <span class="phrase"><a name="metaparse.reference.alphabetical.get_prev_char.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char.synopsis">Synopsis</a>
5757        </h2>
5758<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">&gt;</span>
5759<span class="keyword">struct</span> <span class="identifier">get_prev_char</span><span class="special">;</span>
5760</pre>
5761<p>
5762          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5763        </p>
5764<div class="table">
5765<a name="metaparse.reference.alphabetical.get_prev_char.arguments"></a><p class="title"><b>Table 24.35. Arguments</b></p>
5766<div class="table-contents"><table class="table" summary="Arguments">
5767<colgroup>
5768<col>
5769<col>
5770</colgroup>
5771<thead><tr>
5772<th>
5773                  <p>
5774                    Name
5775                  </p>
5776                </th>
5777<th>
5778                  <p>
5779                    Type
5780                  </p>
5781                </th>
5782</tr></thead>
5783<tbody><tr>
5784<td>
5785                  <p>
5786                    <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
5787                  </p>
5788                </td>
5789<td>
5790                  <p>
5791                    <a class="link" href="reference.html#source_position">source position</a>
5792                  </p>
5793                </td>
5794</tr></tbody>
5795</table></div>
5796</div>
5797<br class="table-break"><h2>
5798<a name="metaparse.reference.alphabetical.get_prev_char.h1"></a>
5799          <span class="phrase"><a name="metaparse.reference.alphabetical.get_prev_char.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char.description">Description</a>
5800        </h2>
5801<p>
5802          Returns the last character the source position was updated with. The value
5803          it returns for <a class="link" href="reference.html#start"><code class="computeroutput"><span class="identifier">start</span></code></a>
5804          is unspecified.
5805        </p>
5806<h2>
5807<a name="metaparse.reference.alphabetical.get_prev_char.h2"></a>
5808          <span class="phrase"><a name="metaparse.reference.alphabetical.get_prev_char.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char.header">Header</a>
5809        </h2>
5810<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">metaparse</span><span class="special">/</span><span class="identifier">get_prev_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5811</pre>
5812<h2>
5813<a name="metaparse.reference.alphabetical.get_prev_char.h3"></a>
5814          <span class="phrase"><a name="metaparse.reference.alphabetical.get_prev_char.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char.expression_semantics">Expression
5815          semantics</a>
5816        </h2>
5817<p>
5818          For any <code class="computeroutput"><span class="identifier">l</span></code>, <code class="computeroutput"><span class="identifier">c</span></code> compile-time wrapped integral values
5819          and <code class="computeroutput"><span class="identifier">ch</span></code> compile-time wrapped
5820          character the following are equivalent
5821        </p>
5822<pre class="programlisting"><span class="identifier">get_prev_char</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">ch</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
5823
5824<span class="identifier">ch</span><span class="special">::</span><span class="identifier">type</span>
5825</pre>
5826<h2>
5827<a name="metaparse.reference.alphabetical.get_prev_char.h4"></a>
5828          <span class="phrase"><a name="metaparse.reference.alphabetical.get_prev_char.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_prev_char.example">Example</a>
5829        </h2>
5830<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">metaparse</span><span class="special">/</span><span class="identifier">get_prev_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5831<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5832
5833<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5834
5835<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5836
5837<span class="keyword">struct</span> <span class="identifier">returns_source_position</span>
5838<span class="special">{</span>
5839  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
5840    <span class="identifier">source_position</span><span class="special">&lt;</span>
5841      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5842      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5843      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;</span>
5844    <span class="special">&gt;;</span>
5845<span class="special">};</span>
5846
5847<span class="keyword">static_assert</span><span class="special">(</span>
5848  <span class="identifier">get_prev_char</span><span class="special">&lt;</span>
5849    <span class="identifier">source_position</span><span class="special">&lt;</span>
5850      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
5851      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5852      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;</span>
5853    <span class="special">&gt;</span>
5854  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
5855  <span class="string">"It should return the prev. char of a source position"</span>
5856<span class="special">);</span>
5857
5858<span class="keyword">static_assert</span><span class="special">(</span>
5859  <span class="identifier">get_prev_char</span><span class="special">&lt;</span><span class="identifier">returns_source_position</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
5860  <span class="string">"It should support lazy evaluation"</span>
5861<span class="special">);</span>
5862</pre>
5863</div>
5864<div class="section">
5865<div class="titlepage"><div><div><h4 class="title">
5866<a name="metaparse.reference.alphabetical.get_remaining"></a><a name="get_remaining"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_remaining" title="get_remaining">get_remaining</a>
5867</h4></div></div></div>
5868<h2>
5869<a name="metaparse.reference.alphabetical.get_remaining.h0"></a>
5870          <span class="phrase"><a name="metaparse.reference.alphabetical.get_remaining.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_remaining.synopsis">Synopsis</a>
5871        </h2>
5872<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
5873<span class="keyword">struct</span> <span class="identifier">get_remaining</span><span class="special">;</span>
5874</pre>
5875<p>
5876          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5877        </p>
5878<div class="table">
5879<a name="metaparse.reference.alphabetical.get_remaining.arguments"></a><p class="title"><b>Table 24.36. Arguments</b></p>
5880<div class="table-contents"><table class="table" summary="Arguments">
5881<colgroup>
5882<col>
5883<col>
5884</colgroup>
5885<thead><tr>
5886<th>
5887                  <p>
5888                    Name
5889                  </p>
5890                </th>
5891<th>
5892                  <p>
5893                    Type
5894                  </p>
5895                </th>
5896</tr></thead>
5897<tbody><tr>
5898<td>
5899                  <p>
5900                    <code class="computeroutput"><span class="identifier">D</span></code>
5901                  </p>
5902                </td>
5903<td>
5904                  <p>
5905                    <a class="link" href="reference.html#accept">accept</a> value
5906                  </p>
5907                </td>
5908</tr></tbody>
5909</table></div>
5910</div>
5911<br class="table-break"><h2>
5912<a name="metaparse.reference.alphabetical.get_remaining.h1"></a>
5913          <span class="phrase"><a name="metaparse.reference.alphabetical.get_remaining.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_remaining.description">Description</a>
5914        </h2>
5915<p>
5916          Returns the remaining string information of a parsing result.
5917        </p>
5918<h2>
5919<a name="metaparse.reference.alphabetical.get_remaining.h2"></a>
5920          <span class="phrase"><a name="metaparse.reference.alphabetical.get_remaining.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_remaining.header">Header</a>
5921        </h2>
5922<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">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5923</pre>
5924<h2>
5925<a name="metaparse.reference.alphabetical.get_remaining.h3"></a>
5926          <span class="phrase"><a name="metaparse.reference.alphabetical.get_remaining.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_remaining.example">Example</a>
5927        </h2>
5928<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">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5929<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5930<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5931<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
5932
5933<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
5934
5935<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
5936
5937<span class="keyword">struct</span> <span class="identifier">returns_accept</span>
5938<span class="special">{</span>
5939  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
5940    <span class="identifier">accept</span><span class="special">&lt;</span>
5941      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5942      <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
5943      <span class="identifier">start</span>
5944    <span class="special">&gt;;</span>
5945<span class="special">};</span>
5946
5947<span class="keyword">static_assert</span><span class="special">(</span>
5948  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
5949    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
5950    <span class="identifier">get_remaining</span><span class="special">&lt;</span>
5951      <span class="identifier">accept</span><span class="special">&lt;</span>
5952        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
5953        <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
5954        <span class="identifier">start</span>
5955      <span class="special">&gt;</span>
5956    <span class="special">&gt;::</span><span class="identifier">type</span>
5957  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5958  <span class="string">"It should return the remaining input"</span>
5959<span class="special">);</span>
5960
5961<span class="keyword">static_assert</span><span class="special">(</span>
5962  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
5963    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
5964    <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">returns_accept</span><span class="special">&gt;::</span><span class="identifier">type</span>
5965  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
5966  <span class="string">"It should support lazy evaluation"</span>
5967<span class="special">);</span>
5968</pre>
5969</div>
5970<div class="section">
5971<div class="titlepage"><div><div><h4 class="title">
5972<a name="metaparse.reference.alphabetical.get_result"></a><a name="get_result"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.get_result" title="get_result">get_result</a>
5973</h4></div></div></div>
5974<h2>
5975<a name="metaparse.reference.alphabetical.get_result.h0"></a>
5976          <span class="phrase"><a name="metaparse.reference.alphabetical.get_result.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_result.synopsis">Synopsis</a>
5977        </h2>
5978<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
5979<span class="keyword">struct</span> <span class="identifier">get_result</span><span class="special">;</span>
5980</pre>
5981<p>
5982          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
5983        </p>
5984<div class="table">
5985<a name="metaparse.reference.alphabetical.get_result.arguments"></a><p class="title"><b>Table 24.37. Arguments</b></p>
5986<div class="table-contents"><table class="table" summary="Arguments">
5987<colgroup>
5988<col>
5989<col>
5990</colgroup>
5991<thead><tr>
5992<th>
5993                  <p>
5994                    Name
5995                  </p>
5996                </th>
5997<th>
5998                  <p>
5999                    Type
6000                  </p>
6001                </th>
6002</tr></thead>
6003<tbody><tr>
6004<td>
6005                  <p>
6006                    <code class="computeroutput"><span class="identifier">D</span></code>
6007                  </p>
6008                </td>
6009<td>
6010                  <p>
6011                    <a class="link" href="reference.html#accept">accept</a> value
6012                  </p>
6013                </td>
6014</tr></tbody>
6015</table></div>
6016</div>
6017<br class="table-break"><h2>
6018<a name="metaparse.reference.alphabetical.get_result.h1"></a>
6019          <span class="phrase"><a name="metaparse.reference.alphabetical.get_result.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_result.description">Description</a>
6020        </h2>
6021<p>
6022          Returns the result information of a parsing result.
6023        </p>
6024<h2>
6025<a name="metaparse.reference.alphabetical.get_result.h2"></a>
6026          <span class="phrase"><a name="metaparse.reference.alphabetical.get_result.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_result.header">Header</a>
6027        </h2>
6028<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">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6029</pre>
6030<h2>
6031<a name="metaparse.reference.alphabetical.get_result.h3"></a>
6032          <span class="phrase"><a name="metaparse.reference.alphabetical.get_result.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.get_result.example">Example</a>
6033        </h2>
6034<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">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6035<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6036<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6037<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6038
6039<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6040
6041<span class="keyword">struct</span> <span class="identifier">returns_accept</span>
6042<span class="special">{</span>
6043  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
6044    <span class="identifier">accept</span><span class="special">&lt;</span>
6045      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
6046      <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
6047      <span class="identifier">start</span>
6048    <span class="special">&gt;;</span>
6049<span class="special">};</span>
6050
6051<span class="keyword">static_assert</span><span class="special">(</span>
6052  <span class="identifier">get_result</span><span class="special">&lt;</span>
6053    <span class="identifier">accept</span><span class="special">&lt;</span>
6054      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
6055      <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
6056      <span class="identifier">start</span>
6057    <span class="special">&gt;</span>
6058  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
6059  <span class="string">"It should return the result of parsing"</span>
6060<span class="special">);</span>
6061
6062<span class="keyword">static_assert</span><span class="special">(</span>
6063  <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">returns_accept</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
6064  <span class="string">"It should support lazy evaluation"</span>
6065<span class="special">);</span>
6066</pre>
6067</div>
6068<div class="section">
6069<div class="titlepage"><div><div><h4 class="title">
6070<a name="metaparse.reference.alphabetical.grammar"></a><a name="grammar"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.grammar" title="grammar">grammar</a>
6071</h4></div></div></div>
6072<h2>
6073<a name="metaparse.reference.alphabetical.grammar.h0"></a>
6074          <span class="phrase"><a name="metaparse.reference.alphabetical.grammar.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.grammar.synopsis">Synopsis</a>
6075        </h2>
6076<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">StartSymbol</span> <span class="special">=</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"S"</span><span class="special">)&gt;</span>
6077<span class="keyword">struct</span> <span class="identifier">grammar</span>
6078<span class="special">{</span>
6079  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">S</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Pos</span><span class="special">&gt;</span>
6080  <span class="keyword">struct</span> <span class="identifier">apply</span><span class="special">;</span>
6081
6082  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Name</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
6083  <span class="keyword">struct</span> <span class="identifier">import</span><span class="special">;</span>
6084
6085  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">S</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Action</span> <span class="special">=</span> <span class="comment">/* unspecified */</span><span class="special">&gt;</span>
6086  <span class="keyword">struct</span> <span class="identifier">rule</span><span class="special">;</span>
6087<span class="special">};</span>
6088</pre>
6089<h2>
6090<a name="metaparse.reference.alphabetical.grammar.h1"></a>
6091          <span class="phrase"><a name="metaparse.reference.alphabetical.grammar.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.grammar.description">Description</a>
6092        </h2>
6093<div class="note"><table border="0" summary="Note">
6094<tr>
6095<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
6096<th align="left">Note</th>
6097</tr>
6098<tr><td align="left" valign="top"><p>
6099            Note that using this adds a significant overhead to your builds. When
6100            someone uses your parser, the compiler will have to build your grammar
6101            parser, use it to parse your grammar and build your parser and then it
6102            can parse the input the user would like to parse with your parser. You
6103            might consider using the parser combinators the library provides.
6104          </p></td></tr>
6105</table></div>
6106<p>
6107          Parser combinator for constructing parsers based on an embedded DSL similar
6108          to EBNF. It can be used the following way:
6109        </p>
6110<pre class="programlisting"><span class="identifier">grammar</span><span class="special">&lt;&gt;</span>
6111  <span class="comment">// definitions</span>
6112</pre>
6113<p>
6114          where a definition can be a rule or an import command.
6115        </p>
6116<p>
6117          Rules look like on of the following:
6118        </p>
6119<pre class="programlisting"><span class="special">::</span><span class="identifier">rule</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ::= def"</span><span class="special">)&gt;</span>
6120<span class="special">::</span><span class="identifier">rule</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ::= def"</span><span class="special">),</span> <span class="identifier">semantic_action</span><span class="special">&gt;</span>
6121</pre>
6122<p>
6123          <code class="computeroutput"><span class="identifier">name</span></code> consists of letters,
6124          digits and the <code class="computeroutput"><span class="identifier">_</span></code> character.
6125          It is the name of the symbol being defined. <code class="computeroutput"><span class="identifier">def</span></code>
6126          describes the rule. It can be
6127        </p>
6128<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6129<li class="listitem">
6130              the name of a symbol
6131            </li>
6132<li class="listitem">
6133              a terminal, which is a character between single quotes. <code class="computeroutput"><span class="special">\</span></code> can be used for escaping. The following
6134              are accepted: <code class="computeroutput"><span class="special">\</span><span class="identifier">n</span></code>,
6135              <code class="computeroutput"><span class="special">\</span><span class="identifier">r</span></code>,
6136              <code class="computeroutput"><span class="special">\</span><span class="identifier">t</span></code>,
6137              <code class="computeroutput"><span class="special">\\</span></code>, <code class="computeroutput"><span class="special">\</span><span class="error">'</span></code>
6138            </li>
6139<li class="listitem">
6140              a sequence of definitions
6141            </li>
6142<li class="listitem">
6143              a definition followed by the <code class="computeroutput"><span class="special">*</span></code>
6144              character, which means repetition accepting 0 match
6145            </li>
6146<li class="listitem">
6147              a definition followed by the <code class="computeroutput"><span class="special">+</span></code>
6148              character, which means repetition expecting at least one match
6149            </li>
6150<li class="listitem">
6151              a definition in brackets
6152            </li>
6153</ul></div>
6154<p>
6155          Rules take an optional <code class="computeroutput"><span class="identifier">semantic_action</span></code>
6156          argument. It is a placeholder expression taking one argument. When this
6157          is given, this is used to transform the result of the rule.
6158        </p>
6159<p>
6160          Imports can be used to turn an arbitrary parser into a symbol available
6161          for the rules. Import definitions look like the following:
6162        </p>
6163<pre class="programlisting"><span class="special">::</span><span class="identifier">import</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">),</span> <span class="identifier">parser</span><span class="special">&gt;</span>
6164</pre>
6165<p>
6166          <code class="computeroutput"><span class="identifier">name</span></code> is the name of the
6167          symbol, <code class="computeroutput"><span class="identifier">parser</span></code> is the parser
6168          to bind the name to.
6169        </p>
6170<p>
6171          The start symbol of the grammar is specified by the template argument of
6172          the <code class="computeroutput"><span class="identifier">grammar</span></code> template. This
6173          is optional, the default value is <code class="computeroutput"><span class="identifier">S</span></code>.
6174        </p>
6175<p>
6176          Note that the current implementation "inlines" the referenced
6177          symbols while parsing the grammar and recursion is not supported because
6178          of this.
6179        </p>
6180<h2>
6181<a name="metaparse.reference.alphabetical.grammar.h2"></a>
6182          <span class="phrase"><a name="metaparse.reference.alphabetical.grammar.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.grammar.header">Header</a>
6183        </h2>
6184<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">metaparse</span><span class="special">/</span><span class="identifier">grammar</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6185</pre>
6186<h2>
6187<a name="metaparse.reference.alphabetical.grammar.h3"></a>
6188          <span class="phrase"><a name="metaparse.reference.alphabetical.grammar.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.grammar.example">Example</a>
6189        </h2>
6190<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span> <span class="number">64</span>
6191
6192<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">grammar</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6193<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6194<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6195<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">entire_input</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6196<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">build_parser</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6197<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6198
6199<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">front</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6200<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">back</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6201<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">plus</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6202<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">fold</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6203<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6204
6205<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">token</span><span class="special">;</span>
6206<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">int_</span><span class="special">;</span>
6207<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">build_parser</span><span class="special">;</span>
6208<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">entire_input</span><span class="special">;</span>
6209<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">grammar</span><span class="special">;</span>
6210
6211<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">;</span>
6212<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">back</span><span class="special">;</span>
6213<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">;</span>
6214<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">fold</span><span class="special">;</span>
6215<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">;</span>
6216<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">;</span>
6217<span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">;</span>
6218
6219<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">B</span><span class="special">&gt;</span>
6220<span class="keyword">struct</span> <span class="identifier">lazy_plus</span> <span class="special">:</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">A</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">B</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span> <span class="special">{};</span>
6221
6222<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Sequence</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">State</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ForwardOp</span><span class="special">&gt;</span>
6223<span class="keyword">struct</span> <span class="identifier">lazy_fold</span> <span class="special">:</span>
6224  <span class="identifier">fold</span><span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Sequence</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">State</span><span class="special">::</span><span class="identifier">type</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ForwardOp</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span>
6225<span class="special">{};</span>
6226
6227<span class="keyword">using</span> <span class="identifier">plus_action</span> <span class="special">=</span>
6228  <span class="identifier">lazy_fold</span><span class="special">&lt;</span><span class="identifier">back</span><span class="special">&lt;</span><span class="identifier">_1</span><span class="special">&gt;,</span> <span class="identifier">front</span><span class="special">&lt;</span><span class="identifier">_1</span><span class="special">&gt;,</span> <span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">lazy_plus</span><span class="special">&lt;</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">back</span><span class="special">&lt;</span><span class="identifier">_2</span><span class="special">&gt;&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;;</span>
6229
6230<span class="keyword">using</span> <span class="identifier">plus_grammar</span> <span class="special">=</span>
6231  <span class="identifier">grammar</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"plus_exp"</span><span class="special">)&gt;</span>
6232    <span class="special">::</span><span class="identifier">import</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"int_token"</span><span class="special">),</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
6233
6234    <span class="special">::</span><span class="identifier">rule</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"ws ::= (' ' | '\n' | '\r' | '\t')*"</span><span class="special">)&gt;::</span><span class="identifier">type</span>
6235    <span class="special">::</span><span class="identifier">rule</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"plus_token ::= '+' ws"</span><span class="special">),</span> <span class="identifier">front</span><span class="special">&lt;</span><span class="identifier">_1</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
6236    <span class="special">::</span><span class="identifier">rule</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"plus_exp ::= int_token (plus_token int_token)*"</span><span class="special">),</span> <span class="identifier">plus_action</span><span class="special">&gt;::</span><span class="identifier">type</span>
6237  <span class="special">;</span>
6238
6239<span class="keyword">using</span> <span class="identifier">plus_parser</span> <span class="special">=</span> <span class="identifier">build_parser</span><span class="special">&lt;</span><span class="identifier">entire_input</span><span class="special">&lt;</span><span class="identifier">plus_grammar</span><span class="special">&gt;&gt;;</span>
6240
6241<span class="keyword">static_assert</span><span class="special">(</span>
6242  <span class="identifier">plus_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 + 2 + 3 + 4"</span><span class="special">)&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">10</span><span class="special">,</span>
6243  <span class="string">"Arithmetic expression should be evaluated"</span>
6244<span class="special">);</span>
6245</pre>
6246</div>
6247<div class="section">
6248<div class="titlepage"><div><div><h4 class="title">
6249<a name="metaparse.reference.alphabetical.if"></a><a name="if_"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.if" title="if_">if_</a>
6250</h4></div></div></div>
6251<h2>
6252<a name="metaparse.reference.alphabetical.if.h0"></a>
6253          <span class="phrase"><a name="metaparse.reference.alphabetical.if.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.if.synopsis">Synopsis</a>
6254        </h2>
6255<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
6256<span class="keyword">struct</span> <span class="identifier">if_</span><span class="special">;</span>
6257</pre>
6258<p>
6259          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
6260        </p>
6261<div class="table">
6262<a name="metaparse.reference.alphabetical.if.arguments"></a><p class="title"><b>Table 24.38. Arguments</b></p>
6263<div class="table-contents"><table class="table" summary="Arguments">
6264<colgroup>
6265<col>
6266<col>
6267</colgroup>
6268<thead><tr>
6269<th>
6270                  <p>
6271                    Name
6272                  </p>
6273                </th>
6274<th>
6275                  <p>
6276                    Type
6277                  </p>
6278                </th>
6279</tr></thead>
6280<tbody>
6281<tr>
6282<td>
6283                  <p>
6284                    <code class="computeroutput"><span class="identifier">P</span></code>
6285                  </p>
6286                </td>
6287<td>
6288                  <p>
6289                    <a class="link" href="reference.html#parser">parser</a>
6290                  </p>
6291                </td>
6292</tr>
6293<tr>
6294<td>
6295                  <p>
6296                    <code class="computeroutput"><span class="identifier">T</span></code>
6297                  </p>
6298                </td>
6299<td>
6300                  <p>
6301                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
6302                    value</a>
6303                  </p>
6304                </td>
6305</tr>
6306<tr>
6307<td>
6308                  <p>
6309                    <code class="computeroutput"><span class="identifier">F</span></code>
6310                  </p>
6311                </td>
6312<td>
6313                  <p>
6314                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
6315                    value</a>
6316                  </p>
6317                </td>
6318</tr>
6319</tbody>
6320</table></div>
6321</div>
6322<br class="table-break"><h2>
6323<a name="metaparse.reference.alphabetical.if.h1"></a>
6324          <span class="phrase"><a name="metaparse.reference.alphabetical.if.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.if.description">Description</a>
6325        </h2>
6326<p>
6327          <code class="computeroutput"><span class="identifier">if_</span></code> always accepts the
6328          input string. The result of parsing is <code class="computeroutput"><span class="identifier">T</span></code>,
6329          when <code class="computeroutput"><span class="identifier">P</span></code> accepts the input
6330          and <code class="computeroutput"><span class="identifier">F</span></code> otherwise.
6331        </p>
6332<h2>
6333<a name="metaparse.reference.alphabetical.if.h2"></a>
6334          <span class="phrase"><a name="metaparse.reference.alphabetical.if.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.if.header">Header</a>
6335        </h2>
6336<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">metaparse</span><span class="special">/</span><span class="identifier">if_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6337</pre>
6338<h2>
6339<a name="metaparse.reference.alphabetical.if.h3"></a>
6340          <span class="phrase"><a name="metaparse.reference.alphabetical.if.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.if.expression_semantics">Expression
6341          semantics</a>
6342        </h2>
6343<p>
6344          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">f</span></code>
6345          classes the following are equivalent:
6346        </p>
6347<pre class="programlisting"><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;</span>
6348
6349<span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">&gt;&gt;,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">&gt;&gt;</span>
6350</pre>
6351<h2>
6352<a name="metaparse.reference.alphabetical.if.h4"></a>
6353          <span class="phrase"><a name="metaparse.reference.alphabetical.if.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.if.example">Example</a>
6354        </h2>
6355<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">metaparse</span><span class="special">/</span><span class="identifier">if_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6356<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6357<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6358<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6359<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6360
6361<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
6362
6363<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6364
6365<span class="keyword">using</span> <span class="identifier">int11</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;;</span>
6366<span class="keyword">using</span> <span class="identifier">int13</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;;</span>
6367
6368<span class="keyword">static_assert</span><span class="special">(</span>
6369  <span class="identifier">get_result</span><span class="special">&lt;</span>
6370    <span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">int11</span><span class="special">,</span> <span class="identifier">int13</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1234"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
6371  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">11</span><span class="special">,</span>
6372  <span class="string">"When the int_ parser succeeds, the result of parsing should be 11"</span>
6373<span class="special">);</span>
6374
6375<span class="keyword">static_assert</span><span class="special">(</span>
6376  <span class="identifier">get_result</span><span class="special">&lt;</span>
6377    <span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">int11</span><span class="special">,</span> <span class="identifier">int13</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
6378  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
6379  <span class="string">"When the int_ parser fails, the result of parsing should be 13"</span>
6380<span class="special">);</span>
6381</pre>
6382</div>
6383<div class="section">
6384<div class="titlepage"><div><div><h4 class="title">
6385<a name="metaparse.reference.alphabetical.index_out_of_range"></a><a name="index_out_of_range"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.index_out_of_range" title="index_out_of_range">index_out_of_range</a>
6386</h4></div></div></div>
6387<h2>
6388<a name="metaparse.reference.alphabetical.index_out_of_range.h0"></a>
6389          <span class="phrase"><a name="metaparse.reference.alphabetical.index_out_of_range.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.index_out_of_range.synopsis">Synopsis</a>
6390        </h2>
6391<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
6392<span class="special">{</span>
6393  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">To</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">N</span><span class="special">&gt;</span>
6394  <span class="keyword">struct</span> <span class="identifier">index_out_of_range</span><span class="special">;</span>
6395<span class="special">}</span>
6396</pre>
6397<p>
6398          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
6399        </p>
6400<div class="table">
6401<a name="metaparse.reference.alphabetical.index_out_of_range.arguments"></a><p class="title"><b>Table 24.39. Arguments</b></p>
6402<div class="table-contents"><table class="table" summary="Arguments">
6403<colgroup>
6404<col>
6405<col>
6406</colgroup>
6407<thead><tr>
6408<th>
6409                  <p>
6410                    Name
6411                  </p>
6412                </th>
6413<th>
6414                  <p>
6415                    Type
6416                  </p>
6417                </th>
6418</tr></thead>
6419<tbody>
6420<tr>
6421<td>
6422                  <p>
6423                    <code class="computeroutput"><span class="identifier">From</span></code>
6424                  </p>
6425                </td>
6426<td>
6427                  <p>
6428                    <code class="computeroutput"><span class="keyword">int</span></code> value. The lower
6429                    bound of the range.
6430                  </p>
6431                </td>
6432</tr>
6433<tr>
6434<td>
6435                  <p>
6436                    <code class="computeroutput"><span class="identifier">To</span></code>
6437                  </p>
6438                </td>
6439<td>
6440                  <p>
6441                    <code class="computeroutput"><span class="keyword">int</span></code> value. The upper
6442                    bound of the range.
6443                  </p>
6444                </td>
6445</tr>
6446<tr>
6447<td>
6448                  <p>
6449                    <code class="computeroutput"><span class="identifier">N</span></code>
6450                  </p>
6451                </td>
6452<td>
6453                  <p>
6454                    <code class="computeroutput"><span class="keyword">int</span></code> value. The value
6455                    outside of the range.
6456                  </p>
6457                </td>
6458</tr>
6459</tbody>
6460</table></div>
6461</div>
6462<br class="table-break"><h2>
6463<a name="metaparse.reference.alphabetical.index_out_of_range.h1"></a>
6464          <span class="phrase"><a name="metaparse.reference.alphabetical.index_out_of_range.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.index_out_of_range.description">Description</a>
6465        </h2>
6466<p>
6467          Template class representing an over or under indexing error. <code class="computeroutput"><span class="identifier">From</span></code> and <code class="computeroutput"><span class="identifier">To</span></code>
6468          represent the range and <code class="computeroutput"><span class="identifier">N</span></code>
6469          is the value outside of the range.
6470        </p>
6471<h2>
6472<a name="metaparse.reference.alphabetical.index_out_of_range.h2"></a>
6473          <span class="phrase"><a name="metaparse.reference.alphabetical.index_out_of_range.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.index_out_of_range.header">Header</a>
6474        </h2>
6475<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">index_out_of_range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6476</pre>
6477</div>
6478<div class="section">
6479<div class="titlepage"><div><div><h4 class="title">
6480<a name="metaparse.reference.alphabetical.in_range_c"></a><a name="in_range_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c" title="in_range_c">in_range_c</a>
6481</h4></div></div></div>
6482<h2>
6483<a name="metaparse.reference.alphabetical.in_range_c.h0"></a>
6484          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c.synopsis">Synopsis</a>
6485        </h2>
6486<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
6487<span class="special">{</span>
6488  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">LowerBound</span><span class="special">,</span> <span class="identifier">T</span> <span class="identifier">UpperBound</span><span class="special">&gt;</span>
6489  <span class="keyword">struct</span> <span class="identifier">in_range_c</span>
6490  <span class="special">{</span>
6491    <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">&gt;</span>
6492    <span class="keyword">struct</span> <span class="identifier">apply</span><span class="special">;</span>
6493  <span class="special">};</span>
6494<span class="special">}</span>
6495</pre>
6496<p>
6497          This is a <a class="link" href="reference.html#metafunction_class">template metafunction class</a>.
6498        </p>
6499<div class="table">
6500<a name="metaparse.reference.alphabetical.in_range_c.arguments"></a><p class="title"><b>Table 24.40. Arguments</b></p>
6501<div class="table-contents"><table class="table" summary="Arguments">
6502<colgroup>
6503<col>
6504<col>
6505</colgroup>
6506<thead><tr>
6507<th>
6508                  <p>
6509                    Name
6510                  </p>
6511                </th>
6512<th>
6513                  <p>
6514                    Type
6515                  </p>
6516                </th>
6517</tr></thead>
6518<tbody>
6519<tr>
6520<td>
6521                  <p>
6522                    <code class="computeroutput"><span class="identifier">T</span></code>
6523                  </p>
6524                </td>
6525<td>
6526                  <p>
6527                    integral type
6528                  </p>
6529                </td>
6530</tr>
6531<tr>
6532<td>
6533                  <p>
6534                    <code class="computeroutput"><span class="identifier">LowerBound</span></code>
6535                  </p>
6536                </td>
6537<td>
6538                  <p>
6539                    value of type <code class="computeroutput"><span class="identifier">T</span></code>
6540                  </p>
6541                </td>
6542</tr>
6543<tr>
6544<td>
6545                  <p>
6546                    <code class="computeroutput"><span class="identifier">UpperBound</span></code>
6547                  </p>
6548                </td>
6549<td>
6550                  <p>
6551                    value of type <code class="computeroutput"><span class="identifier">T</span></code>
6552                  </p>
6553                </td>
6554</tr>
6555<tr>
6556<td>
6557                  <p>
6558                    <code class="computeroutput"><span class="identifier">U</span></code>
6559                  </p>
6560                </td>
6561<td>
6562                  <p>
6563                    <a class="link" href="reference.html#boxed_value">boxed integral value</a>
6564                  </p>
6565                </td>
6566</tr>
6567</tbody>
6568</table></div>
6569</div>
6570<br class="table-break"><h2>
6571<a name="metaparse.reference.alphabetical.in_range_c.h1"></a>
6572          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c.description">Description</a>
6573        </h2>
6574<p>
6575          Metafunction class verifying that <code class="computeroutput"><span class="identifier">U</span></code>
6576          is in the <code class="computeroutput"><span class="special">[</span><span class="identifier">LowerBound</span><span class="special">..</span><span class="identifier">UpperBound</span><span class="special">]</span></code> range or not.
6577        </p>
6578<h2>
6579<a name="metaparse.reference.alphabetical.in_range_c.h2"></a>
6580          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c.header">Header</a>
6581        </h2>
6582<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">in_range_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6583</pre>
6584<h2>
6585<a name="metaparse.reference.alphabetical.in_range_c.h3"></a>
6586          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c.expression_semantics">Expression
6587          semantics</a>
6588        </h2>
6589<p>
6590          For any <code class="computeroutput"><span class="identifier">T</span></code> integral type,
6591          <code class="computeroutput"><span class="identifier">A</span></code>, <code class="computeroutput"><span class="identifier">B</span></code>
6592          values of type <code class="computeroutput"><span class="identifier">T</span></code> and <code class="computeroutput"><span class="identifier">C</span></code> wrapped value the following are equivalent:
6593        </p>
6594<pre class="programlisting"><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span>
6595
6596<span class="identifier">A</span> <span class="special">&lt;=</span> <span class="identifier">C</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&amp;&amp;</span> <span class="identifier">C</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">&lt;=</span> <span class="identifier">B</span>
6597</pre>
6598<h2>
6599<a name="metaparse.reference.alphabetical.in_range_c.h4"></a>
6600          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range_c.example">Example</a>
6601        </h2>
6602<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">in_range_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6603
6604<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
6605
6606<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6607
6608<span class="keyword">static_assert</span><span class="special">(</span>
6609  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
6610    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">10</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6611  <span class="string">"A value below the lower bound should not be in the range"</span>
6612<span class="special">);</span>
6613
6614<span class="keyword">static_assert</span><span class="special">(</span>
6615  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
6616    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">14</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6617  <span class="string">"A value above the upper bound should not be in the range"</span>
6618<span class="special">);</span>
6619
6620<span class="keyword">static_assert</span><span class="special">(</span>
6621  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
6622    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6623  <span class="string">"The lower bound should be in the range"</span>
6624<span class="special">);</span>
6625
6626<span class="keyword">static_assert</span><span class="special">(</span>
6627  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
6628    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6629  <span class="string">"The upper bound should be in the range"</span>
6630<span class="special">);</span>
6631
6632<span class="keyword">static_assert</span><span class="special">(</span>
6633  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span>
6634    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">12</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6635  <span class="string">"A value between the bounds should be in the range"</span>
6636<span class="special">);</span>
6637</pre>
6638</div>
6639<div class="section">
6640<div class="titlepage"><div><div><h4 class="title">
6641<a name="metaparse.reference.alphabetical.in_range"></a><a name="in_range"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range" title="in_range">in_range</a>
6642</h4></div></div></div>
6643<h2>
6644<a name="metaparse.reference.alphabetical.in_range.h0"></a>
6645          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range.synopsis">Synopsis</a>
6646        </h2>
6647<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
6648<span class="special">{</span>
6649  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">LowerBound</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">UpperBound</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Item</span><span class="special">&gt;</span>
6650  <span class="keyword">struct</span> <span class="identifier">in_range</span><span class="special">;</span>
6651<span class="special">}</span>
6652</pre>
6653<p>
6654          This is a <a class="link" href="reference.html#metafunction">template metafunction</a> supporting
6655          <a class="link" href="reference.html#currying">currying</a>.
6656        </p>
6657<div class="table">
6658<a name="metaparse.reference.alphabetical.in_range.arguments"></a><p class="title"><b>Table 24.41. Arguments</b></p>
6659<div class="table-contents"><table class="table" summary="Arguments">
6660<colgroup>
6661<col>
6662<col>
6663</colgroup>
6664<thead><tr>
6665<th>
6666                  <p>
6667                    Name
6668                  </p>
6669                </th>
6670<th>
6671                  <p>
6672                    Type
6673                  </p>
6674                </th>
6675</tr></thead>
6676<tbody>
6677<tr>
6678<td>
6679                  <p>
6680                    <code class="computeroutput"><span class="identifier">LowerBound</span></code>
6681                  </p>
6682                </td>
6683<td>
6684                  <p>
6685                    <a class="link" href="reference.html#boxed_value">boxed integral value</a>
6686                  </p>
6687                </td>
6688</tr>
6689<tr>
6690<td>
6691                  <p>
6692                    <code class="computeroutput"><span class="identifier">UpperBound</span></code>
6693                  </p>
6694                </td>
6695<td>
6696                  <p>
6697                    <a class="link" href="reference.html#boxed_value">boxed integral value</a>
6698                  </p>
6699                </td>
6700</tr>
6701<tr>
6702<td>
6703                  <p>
6704                    <code class="computeroutput"><span class="identifier">Item</span></code>
6705                  </p>
6706                </td>
6707<td>
6708                  <p>
6709                    <a class="link" href="reference.html#boxed_value">boxed integral value</a>
6710                  </p>
6711                </td>
6712</tr>
6713</tbody>
6714</table></div>
6715</div>
6716<br class="table-break"><h2>
6717<a name="metaparse.reference.alphabetical.in_range.h1"></a>
6718          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range.description">Description</a>
6719        </h2>
6720<p>
6721          It returns a boxed boolean value. The value is <code class="computeroutput"><span class="keyword">true</span></code>
6722          when <code class="computeroutput"><span class="identifier">Item</span></code> is in the range
6723          <code class="computeroutput"><span class="special">[</span><span class="identifier">LowerBound</span><span class="special">..</span><span class="identifier">UpperBound</span><span class="special">]</span></code> and <code class="computeroutput"><span class="keyword">false</span></code>
6724          otherwise. <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">less_equal</span></code> is used for comparison.
6725        </p>
6726<h2>
6727<a name="metaparse.reference.alphabetical.in_range.h2"></a>
6728          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range.header">Header</a>
6729        </h2>
6730<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">in_range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6731</pre>
6732<h2>
6733<a name="metaparse.reference.alphabetical.in_range.h3"></a>
6734          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range.expression_semantics">Expression
6735          semantics</a>
6736        </h2>
6737<p>
6738          For any <code class="computeroutput"><span class="identifier">L</span></code>, <code class="computeroutput"><span class="identifier">U</span></code> and <code class="computeroutput"><span class="identifier">T</span></code>
6739          classes the following are equivalent:
6740        </p>
6741<pre class="programlisting"><span class="identifier">in_range</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span>
6742
6743<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">less_equal</span><span class="special">&lt;</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">T</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span>
6744  <span class="special">&amp;&amp;</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">less_equal</span><span class="special">&lt;</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span>
6745</pre>
6746<h2>
6747<a name="metaparse.reference.alphabetical.in_range.h4"></a>
6748          <span class="phrase"><a name="metaparse.reference.alphabetical.in_range.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.in_range.example">Example</a>
6749        </h2>
6750<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">in_range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6751
6752<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6753
6754<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6755
6756<span class="keyword">static_assert</span><span class="special">(</span>
6757  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span>
6758    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span>
6759    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;,</span>
6760    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">10</span><span class="special">&gt;</span>
6761  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6762  <span class="string">"A value below the lower bound should not be in the range"</span>
6763<span class="special">);</span>
6764
6765<span class="keyword">static_assert</span><span class="special">(</span>
6766  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span>
6767    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span>
6768    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;,</span>
6769    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">14</span><span class="special">&gt;</span>
6770  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6771  <span class="string">"A value above the upper bound should not be in the range"</span>
6772<span class="special">);</span>
6773
6774<span class="keyword">static_assert</span><span class="special">(</span>
6775  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span>
6776    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span>
6777    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;,</span>
6778    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;</span>
6779  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6780  <span class="string">"The lower bound should be in the range"</span>
6781<span class="special">);</span>
6782
6783<span class="keyword">static_assert</span><span class="special">(</span>
6784  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span>
6785    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span>
6786    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;,</span>
6787    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;</span>
6788  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6789  <span class="string">"The upper bound should be in the range"</span>
6790<span class="special">);</span>
6791
6792<span class="keyword">static_assert</span><span class="special">(</span>
6793  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span>
6794    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;,</span>
6795    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;,</span>
6796    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">12</span><span class="special">&gt;</span>
6797  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6798  <span class="string">"A value between the bounds should be in the range"</span>
6799<span class="special">);</span>
6800
6801<span class="keyword">static_assert</span><span class="special">(</span>
6802  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;&gt;</span>
6803    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">11</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
6804    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">13</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
6805    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">12</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
6806    <span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6807  <span class="string">"It should support currying"</span>
6808<span class="special">);</span>
6809</pre>
6810</div>
6811<div class="section">
6812<div class="titlepage"><div><div><h4 class="title">
6813<a name="metaparse.reference.alphabetical.int"></a><a name="int_"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.int" title="int_">int_</a>
6814</h4></div></div></div>
6815<h2>
6816<a name="metaparse.reference.alphabetical.int.h0"></a>
6817          <span class="phrase"><a name="metaparse.reference.alphabetical.int.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int.synopsis">Synopsis</a>
6818        </h2>
6819<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">int_</span><span class="special">;</span>
6820</pre>
6821<p>
6822          This is a <a class="link" href="reference.html#parser">parser</a>.
6823        </p>
6824<h2>
6825<a name="metaparse.reference.alphabetical.int.h1"></a>
6826          <span class="phrase"><a name="metaparse.reference.alphabetical.int.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int.description">Description</a>
6827        </h2>
6828<p>
6829          It accepts a non-empty sequence of characters in the range <code class="computeroutput"><span class="number">0</span><span class="special">-</span><span class="number">9</span></code>.
6830          The result of the parser is the decimal value represented by the accepted
6831          character sequence.
6832        </p>
6833<h2>
6834<a name="metaparse.reference.alphabetical.int.h2"></a>
6835          <span class="phrase"><a name="metaparse.reference.alphabetical.int.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int.header">Header</a>
6836        </h2>
6837<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">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6838</pre>
6839<h2>
6840<a name="metaparse.reference.alphabetical.int.h3"></a>
6841          <span class="phrase"><a name="metaparse.reference.alphabetical.int.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int.expression_semantics">Expression
6842          semantics</a>
6843        </h2>
6844<p>
6845          The following are equivalent:
6846        </p>
6847<pre class="programlisting"><span class="identifier">int_</span>
6848
6849<span class="identifier">foldl1</span><span class="special">&lt;</span>
6850  <span class="identifier">digit_val</span><span class="special">,</span>
6851  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;,</span>
6852  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span>
6853    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span>
6854      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">times</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">10</span><span class="special">&gt;&gt;,</span>
6855      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span>
6856    <span class="special">&gt;</span>
6857  <span class="special">&gt;::</span><span class="identifier">type</span>
6858<span class="special">&gt;</span>
6859</pre>
6860<h2>
6861<a name="metaparse.reference.alphabetical.int.h4"></a>
6862          <span class="phrase"><a name="metaparse.reference.alphabetical.int.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int.example">Example</a>
6863        </h2>
6864<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">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6865<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6866<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6867<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6868<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6869
6870<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6871
6872<span class="keyword">static_assert</span><span class="special">(</span>
6873  <span class="identifier">get_result</span><span class="special">&lt;</span>
6874    <span class="identifier">int_</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
6875  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
6876  <span class="string">"It should parse an integer value"</span>
6877<span class="special">);</span>
6878
6879<span class="keyword">static_assert</span><span class="special">(</span>
6880  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"six"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
6881  <span class="string">"It should reject the input if it is not a number"</span>
6882<span class="special">);</span>
6883</pre>
6884</div>
6885<div class="section">
6886<div class="titlepage"><div><div><h4 class="title">
6887<a name="metaparse.reference.alphabetical.int_to_digit_c"></a><a name="int_to_digit_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c" title="int_to_digit_c">int_to_digit_c</a>
6888</h4></div></div></div>
6889<h2>
6890<a name="metaparse.reference.alphabetical.int_to_digit_c.h0"></a>
6891          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c.synopsis">Synopsis</a>
6892        </h2>
6893<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
6894<span class="special">{</span>
6895  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">C</span><span class="special">&gt;</span>
6896  <span class="keyword">struct</span> <span class="identifier">int_to_digit_c</span><span class="special">;</span>
6897<span class="special">}</span>
6898</pre>
6899<p>
6900          This is a template class similar to a <a class="link" href="reference.html#metafunction">template
6901          metafunction</a> but taking an <code class="computeroutput"><span class="keyword">int</span></code>
6902          value as argument.
6903        </p>
6904<div class="table">
6905<a name="metaparse.reference.alphabetical.int_to_digit_c.arguments"></a><p class="title"><b>Table 24.42. Arguments</b></p>
6906<div class="table-contents"><table class="table" summary="Arguments">
6907<colgroup>
6908<col>
6909<col>
6910</colgroup>
6911<thead><tr>
6912<th>
6913                  <p>
6914                    Name
6915                  </p>
6916                </th>
6917<th>
6918                  <p>
6919                    Type
6920                  </p>
6921                </th>
6922</tr></thead>
6923<tbody><tr>
6924<td>
6925                  <p>
6926                    <code class="computeroutput"><span class="identifier">C</span></code>
6927                  </p>
6928                </td>
6929<td>
6930                  <p>
6931                    <code class="computeroutput"><span class="keyword">int</span></code> value in the
6932                    range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">-</span><span class="number">9</span><span class="special">]</span></code>
6933                  </p>
6934                </td>
6935</tr></tbody>
6936</table></div>
6937</div>
6938<br class="table-break"><h2>
6939<a name="metaparse.reference.alphabetical.int_to_digit_c.h1"></a>
6940          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c.description">Description</a>
6941        </h2>
6942<p>
6943          Converts an integer value in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">-</span><span class="number">9</span><span class="special">]</span></code> to a character representing that decimal
6944          value.
6945        </p>
6946<h2>
6947<a name="metaparse.reference.alphabetical.int_to_digit_c.h2"></a>
6948          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c.header">Header</a>
6949        </h2>
6950<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">int_to_digit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6951</pre>
6952<h2>
6953<a name="metaparse.reference.alphabetical.int_to_digit_c.h3"></a>
6954          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c.expression_semantics">Expression
6955          semantics</a>
6956        </h2>
6957<p>
6958          The following pairs of expressions are equivalent
6959        </p>
6960<pre class="programlisting"><span class="identifier">int_to_digit_c</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;::</span><span class="identifier">type</span>
6961<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;</span>
6962
6963<span class="identifier">int_to_digit</span><span class="special">&lt;</span><span class="number">9</span><span class="special">&gt;::</span><span class="identifier">type</span>
6964<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'9'</span><span class="special">&gt;</span>
6965</pre>
6966<h2>
6967<a name="metaparse.reference.alphabetical.int_to_digit_c.h4"></a>
6968          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit_c.example">Example</a>
6969        </h2>
6970<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">int_to_digit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
6971
6972<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
6973
6974<span class="keyword">static_assert</span><span class="special">(</span>
6975  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit_c</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
6976  <span class="string">"it should convert an integer value to the corresponding character"</span>
6977<span class="special">);</span>
6978
6979<span class="keyword">static_assert</span><span class="special">(</span>
6980  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit_c</span><span class="special">&lt;</span><span class="number">3</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'3'</span><span class="special">,</span>
6981  <span class="string">"it should convert an integer to the corresponding character"</span>
6982<span class="special">);</span>
6983
6984<span class="keyword">static_assert</span><span class="special">(</span>
6985  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit_c</span><span class="special">&lt;</span><span class="number">9</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'9'</span><span class="special">,</span>
6986  <span class="string">"it should convert an integer value to the corresponding character"</span>
6987<span class="special">);</span>
6988</pre>
6989</div>
6990<div class="section">
6991<div class="titlepage"><div><div><h4 class="title">
6992<a name="metaparse.reference.alphabetical.int_to_digit"></a><a name="int_to_digit"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit" title="int_to_digit">int_to_digit</a>
6993</h4></div></div></div>
6994<h2>
6995<a name="metaparse.reference.alphabetical.int_to_digit.h0"></a>
6996          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit.synopsis">Synopsis</a>
6997        </h2>
6998<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
6999<span class="special">{</span>
7000  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">&gt;</span>
7001  <span class="keyword">struct</span> <span class="identifier">int_to_digit</span><span class="special">;</span>
7002<span class="special">}</span>
7003</pre>
7004<p>
7005          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7006          that supports <a class="link" href="reference.html#currying">currying</a>.
7007        </p>
7008<div class="table">
7009<a name="metaparse.reference.alphabetical.int_to_digit.arguments"></a><p class="title"><b>Table 24.43. Arguments</b></p>
7010<div class="table-contents"><table class="table" summary="Arguments">
7011<colgroup>
7012<col>
7013<col>
7014</colgroup>
7015<thead><tr>
7016<th>
7017                  <p>
7018                    Name
7019                  </p>
7020                </th>
7021<th>
7022                  <p>
7023                    Type
7024                  </p>
7025                </th>
7026</tr></thead>
7027<tbody><tr>
7028<td>
7029                  <p>
7030                    <code class="computeroutput"><span class="identifier">D</span></code>
7031                  </p>
7032                </td>
7033<td>
7034                  <p>
7035                    <a class="link" href="reference.html#boxed_value">boxed</a> integer value
7036                  </p>
7037                </td>
7038</tr></tbody>
7039</table></div>
7040</div>
7041<br class="table-break"><h2>
7042<a name="metaparse.reference.alphabetical.int_to_digit.h1"></a>
7043          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit.description">Description</a>
7044        </h2>
7045<p>
7046          Converts a boxed integer value in the range <code class="computeroutput"><span class="special">[</span><span class="number">0</span><span class="special">-</span><span class="number">9</span><span class="special">]</span></code> to a character representing that decimal
7047          value.
7048        </p>
7049<h2>
7050<a name="metaparse.reference.alphabetical.int_to_digit.h2"></a>
7051          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit.header">Header</a>
7052        </h2>
7053<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">int_to_digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7054</pre>
7055<h2>
7056<a name="metaparse.reference.alphabetical.int_to_digit.h3"></a>
7057          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit.expression_semantics">Expression
7058          semantics</a>
7059        </h2>
7060<p>
7061          The following pairs of expressions are equivalent
7062        </p>
7063<pre class="programlisting"><span class="identifier">int_to_digit</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7064<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;</span>
7065
7066<span class="identifier">int_to_digit</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">9</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7067<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'9'</span><span class="special">&gt;</span>
7068</pre>
7069<h2>
7070<a name="metaparse.reference.alphabetical.int_to_digit.h4"></a>
7071          <span class="phrase"><a name="metaparse.reference.alphabetical.int_to_digit.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.int_to_digit.example">Example</a>
7072        </h2>
7073<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">int_to_digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7074
7075<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7076
7077<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7078
7079<span class="keyword">struct</span> <span class="identifier">nullary_metafunction_returning_4</span>
7080<span class="special">{</span>
7081  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">4</span><span class="special">&gt;;</span>
7082<span class="special">};</span>
7083
7084<span class="keyword">static_assert</span><span class="special">(</span>
7085  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
7086  <span class="string">"it should convert an integer value to the corresponding character"</span>
7087<span class="special">);</span>
7088
7089<span class="keyword">static_assert</span><span class="special">(</span>
7090  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
7091    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">7</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'7'</span><span class="special">,</span>
7092  <span class="string">"it should support currying"</span>
7093<span class="special">);</span>
7094
7095<span class="keyword">static_assert</span><span class="special">(</span>
7096  <span class="identifier">util</span><span class="special">::</span><span class="identifier">int_to_digit</span><span class="special">&lt;</span><span class="identifier">nullary_metafunction_returning_4</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'4'</span><span class="special">,</span>
7097  <span class="string">"it should support lazy evaluation"</span>
7098<span class="special">);</span>
7099</pre>
7100</div>
7101<div class="section">
7102<div class="titlepage"><div><div><h4 class="title">
7103<a name="metaparse.reference.alphabetical.is_digit"></a><a name="is_digit"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit" title="is_digit">is_digit</a>
7104</h4></div></div></div>
7105<h2>
7106<a name="metaparse.reference.alphabetical.is_digit.h0"></a>
7107          <span class="phrase"><a name="metaparse.reference.alphabetical.is_digit.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit.synopsis">Synopsis</a>
7108        </h2>
7109<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7110<span class="special">{</span>
7111  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7112  <span class="keyword">struct</span> <span class="identifier">is_digit</span><span class="special">;</span>
7113<span class="special">}</span>
7114</pre>
7115<p>
7116          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7117          that supports <a class="link" href="reference.html#currying">currying</a>.
7118        </p>
7119<div class="table">
7120<a name="metaparse.reference.alphabetical.is_digit.arguments"></a><p class="title"><b>Table 24.44. Arguments</b></p>
7121<div class="table-contents"><table class="table" summary="Arguments">
7122<colgroup>
7123<col>
7124<col>
7125</colgroup>
7126<thead><tr>
7127<th>
7128                  <p>
7129                    Name
7130                  </p>
7131                </th>
7132<th>
7133                  <p>
7134                    Type
7135                  </p>
7136                </th>
7137</tr></thead>
7138<tbody><tr>
7139<td>
7140                  <p>
7141                    <code class="computeroutput"><span class="identifier">C</span></code>
7142                  </p>
7143                </td>
7144<td>
7145                  <p>
7146                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
7147                  </p>
7148                </td>
7149</tr></tbody>
7150</table></div>
7151</div>
7152<br class="table-break"><h2>
7153<a name="metaparse.reference.alphabetical.is_digit.h1"></a>
7154          <span class="phrase"><a name="metaparse.reference.alphabetical.is_digit.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit.description">Description</a>
7155        </h2>
7156<p>
7157          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is a digit
7158          value or not. Returns a boxed boolean value.
7159        </p>
7160<h2>
7161<a name="metaparse.reference.alphabetical.is_digit.h2"></a>
7162          <span class="phrase"><a name="metaparse.reference.alphabetical.is_digit.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit.header">Header</a>
7163        </h2>
7164<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7165</pre>
7166<h2>
7167<a name="metaparse.reference.alphabetical.is_digit.h3"></a>
7168          <span class="phrase"><a name="metaparse.reference.alphabetical.is_digit.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit.expression_semantics">Expression
7169          semantics</a>
7170        </h2>
7171<p>
7172          The following expressions are equivalent:
7173        </p>
7174<pre class="programlisting"><span class="identifier">is_digit</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7175<span class="identifier">is_digit</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7176<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7177</pre>
7178<p>
7179          The following expressions are also equivalent:
7180        </p>
7181<pre class="programlisting"><span class="identifier">is_digit</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span>
7182<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
7183</pre>
7184<h2>
7185<a name="metaparse.reference.alphabetical.is_digit.h4"></a>
7186          <span class="phrase"><a name="metaparse.reference.alphabetical.is_digit.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_digit.example">Example</a>
7187        </h2>
7188<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7189
7190<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7191
7192<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7193
7194<span class="keyword">struct</span> <span class="identifier">returns_char</span>
7195<span class="special">{</span>
7196  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;;</span>
7197<span class="special">};</span>
7198
7199<span class="keyword">static_assert</span><span class="special">(</span>
7200  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7201  <span class="string">"digit character should be a digit"</span>
7202<span class="special">);</span>
7203
7204<span class="keyword">static_assert</span><span class="special">(</span>
7205  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7206  <span class="string">"letter should not be a digit"</span>
7207<span class="special">);</span>
7208
7209<span class="keyword">static_assert</span><span class="special">(</span>
7210  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7211  <span class="string">"it should support currying"</span>
7212<span class="special">);</span>
7213
7214<span class="keyword">static_assert</span><span class="special">(</span>
7215  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_digit</span><span class="special">&lt;</span><span class="identifier">returns_char</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7216  <span class="string">"it should support lazy evaluation"</span>
7217<span class="special">);</span>
7218</pre>
7219</div>
7220<div class="section">
7221<div class="titlepage"><div><div><h4 class="title">
7222<a name="metaparse.reference.alphabetical.is_error"></a><a name="is_error"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error" title="is_error">is_error</a>
7223</h4></div></div></div>
7224<h2>
7225<a name="metaparse.reference.alphabetical.is_error.h0"></a>
7226          <span class="phrase"><a name="metaparse.reference.alphabetical.is_error.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error.synopsis">Synopsis</a>
7227        </h2>
7228<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7229<span class="keyword">struct</span> <span class="identifier">is_error</span><span class="special">;</span>
7230</pre>
7231<p>
7232          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7233          that supports <a class="link" href="reference.html#currying">currying</a>.
7234        </p>
7235<div class="table">
7236<a name="metaparse.reference.alphabetical.is_error.arguments"></a><p class="title"><b>Table 24.45. Arguments</b></p>
7237<div class="table-contents"><table class="table" summary="Arguments">
7238<colgroup>
7239<col>
7240<col>
7241</colgroup>
7242<thead><tr>
7243<th>
7244                  <p>
7245                    Name
7246                  </p>
7247                </th>
7248<th>
7249                  <p>
7250                    Type
7251                  </p>
7252                </th>
7253</tr></thead>
7254<tbody><tr>
7255<td>
7256                  <p>
7257                    <code class="computeroutput"><span class="identifier">C</span></code>
7258                  </p>
7259                </td>
7260<td>
7261                  <p>
7262                    <a class="link" href="reference.html#accept">accept</a> or <a class="link" href="reference.html#reject">reject</a>
7263                    value
7264                  </p>
7265                </td>
7266</tr></tbody>
7267</table></div>
7268</div>
7269<br class="table-break"><h2>
7270<a name="metaparse.reference.alphabetical.is_error.h1"></a>
7271          <span class="phrase"><a name="metaparse.reference.alphabetical.is_error.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error.description">Description</a>
7272        </h2>
7273<p>
7274          Determines if <code class="computeroutput"><span class="identifier">C</span></code> is a parsing
7275          error or not. Returns a <a class="link" href="reference.html#boxed_value">boxed</a> boolean
7276          value.
7277        </p>
7278<h2>
7279<a name="metaparse.reference.alphabetical.is_error.h2"></a>
7280          <span class="phrase"><a name="metaparse.reference.alphabetical.is_error.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error.header">Header</a>
7281        </h2>
7282<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">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7283</pre>
7284<h2>
7285<a name="metaparse.reference.alphabetical.is_error.h3"></a>
7286          <span class="phrase"><a name="metaparse.reference.alphabetical.is_error.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error.expression_semantics">Expression
7287          semantics</a>
7288        </h2>
7289<p>
7290          For any <code class="computeroutput"><span class="identifier">e</span></code> parsing error
7291          <code class="computeroutput"><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span></code> is a wrapped compile-time <code class="computeroutput"><span class="keyword">true</span></code> value, for any other <code class="computeroutput"><span class="identifier">c</span></code> class <code class="computeroutput"><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
7292          is a wrapped compile-time <code class="computeroutput"><span class="keyword">false</span></code>
7293          value.
7294        </p>
7295<h2>
7296<a name="metaparse.reference.alphabetical.is_error.h4"></a>
7297          <span class="phrase"><a name="metaparse.reference.alphabetical.is_error.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_error.example">Example</a>
7298        </h2>
7299<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">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7300<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7301<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7302<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7303<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7304<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7305
7306<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7307
7308<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7309
7310<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="string">"Sample error message"</span><span class="special">);</span>
7311
7312<span class="keyword">struct</span> <span class="identifier">returns_reject</span>
7313<span class="special">{</span>
7314  <span class="keyword">typedef</span> <span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;</span> <span class="identifier">type</span><span class="special">;</span>
7315<span class="special">};</span>
7316
7317<span class="keyword">static_assert</span><span class="special">(</span>
7318  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
7319    <span class="identifier">accept</span><span class="special">&lt;</span>
7320      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
7321      <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
7322      <span class="identifier">start</span>
7323    <span class="special">&gt;</span>
7324  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7325  <span class="string">"an accept should not be an error"</span>
7326<span class="special">);</span>
7327
7328<span class="keyword">static_assert</span><span class="special">(</span>
7329  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7330  <span class="string">"an reject should be an error"</span>
7331<span class="special">);</span>
7332
7333<span class="keyword">static_assert</span><span class="special">(</span>
7334  <span class="identifier">is_error</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7335  <span class="string">"it should support currying"</span>
7336<span class="special">);</span>
7337
7338<span class="keyword">static_assert</span><span class="special">(</span>
7339  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">returns_reject</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7340  <span class="string">"it should support lazy evaluation"</span>
7341<span class="special">);</span>
7342</pre>
7343</div>
7344<div class="section">
7345<div class="titlepage"><div><div><h4 class="title">
7346<a name="metaparse.reference.alphabetical.is_lcase_letter"></a><a name="is_lcase_letter"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter" title="is_lcase_letter">is_lcase_letter</a>
7347</h4></div></div></div>
7348<h2>
7349<a name="metaparse.reference.alphabetical.is_lcase_letter.h0"></a>
7350          <span class="phrase"><a name="metaparse.reference.alphabetical.is_lcase_letter.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter.synopsis">Synopsis</a>
7351        </h2>
7352<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7353<span class="special">{</span>
7354  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7355  <span class="keyword">struct</span> <span class="identifier">is_lcase_letter</span><span class="special">;</span>
7356<span class="special">}</span>
7357</pre>
7358<p>
7359          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7360          that supports <a class="link" href="reference.html#currying">currying</a>.
7361        </p>
7362<div class="table">
7363<a name="metaparse.reference.alphabetical.is_lcase_letter.arguments"></a><p class="title"><b>Table 24.46. Arguments</b></p>
7364<div class="table-contents"><table class="table" summary="Arguments">
7365<colgroup>
7366<col>
7367<col>
7368</colgroup>
7369<thead><tr>
7370<th>
7371                  <p>
7372                    Name
7373                  </p>
7374                </th>
7375<th>
7376                  <p>
7377                    Type
7378                  </p>
7379                </th>
7380</tr></thead>
7381<tbody><tr>
7382<td>
7383                  <p>
7384                    <code class="computeroutput"><span class="identifier">C</span></code>
7385                  </p>
7386                </td>
7387<td>
7388                  <p>
7389                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
7390                  </p>
7391                </td>
7392</tr></tbody>
7393</table></div>
7394</div>
7395<br class="table-break"><h2>
7396<a name="metaparse.reference.alphabetical.is_lcase_letter.h1"></a>
7397          <span class="phrase"><a name="metaparse.reference.alphabetical.is_lcase_letter.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter.description">Description</a>
7398        </h2>
7399<p>
7400          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is a lower
7401          case letter. Returns a boxed boolean value.
7402        </p>
7403<h2>
7404<a name="metaparse.reference.alphabetical.is_lcase_letter.h2"></a>
7405          <span class="phrase"><a name="metaparse.reference.alphabetical.is_lcase_letter.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter.header">Header</a>
7406        </h2>
7407<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_lcase_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7408</pre>
7409<h2>
7410<a name="metaparse.reference.alphabetical.is_lcase_letter.h3"></a>
7411          <span class="phrase"><a name="metaparse.reference.alphabetical.is_lcase_letter.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter.expression_semantics">Expression
7412          semantics</a>
7413        </h2>
7414<p>
7415          The following expressions are equivalent:
7416        </p>
7417<pre class="programlisting"><span class="identifier">is_lcase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7418<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7419
7420<span class="identifier">is_lcase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'z'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7421<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7422
7423<span class="identifier">is_lcase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span>
7424<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
7425</pre>
7426<h2>
7427<a name="metaparse.reference.alphabetical.is_lcase_letter.h4"></a>
7428          <span class="phrase"><a name="metaparse.reference.alphabetical.is_lcase_letter.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_lcase_letter.example">Example</a>
7429        </h2>
7430<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_lcase_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7431
7432<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7433
7434<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7435
7436<span class="keyword">struct</span> <span class="identifier">returns_char</span>
7437<span class="special">{</span>
7438  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;;</span>
7439<span class="special">};</span>
7440
7441<span class="keyword">static_assert</span><span class="special">(</span>
7442  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_lcase_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7443  <span class="string">"a should be a lower case letter"</span>
7444<span class="special">);</span>
7445
7446<span class="keyword">static_assert</span><span class="special">(</span>
7447  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_lcase_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7448  <span class="string">"A should not be a lower case letter"</span>
7449<span class="special">);</span>
7450
7451<span class="keyword">static_assert</span><span class="special">(</span>
7452  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_lcase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
7453    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7454  <span class="string">"it should support currying"</span>
7455<span class="special">);</span>
7456
7457<span class="keyword">static_assert</span><span class="special">(</span>
7458  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_lcase_letter</span><span class="special">&lt;</span><span class="identifier">returns_char</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7459  <span class="string">"it should support lazy evaluation"</span>
7460<span class="special">);</span>
7461</pre>
7462</div>
7463<div class="section">
7464<div class="titlepage"><div><div><h4 class="title">
7465<a name="metaparse.reference.alphabetical.is_letter"></a><a name="is_letter"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter" title="is_letter">is_letter</a>
7466</h4></div></div></div>
7467<h2>
7468<a name="metaparse.reference.alphabetical.is_letter.h0"></a>
7469          <span class="phrase"><a name="metaparse.reference.alphabetical.is_letter.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter.synopsis">Synopsis</a>
7470        </h2>
7471<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7472<span class="special">{</span>
7473  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7474  <span class="keyword">struct</span> <span class="identifier">is_letter</span><span class="special">;</span>
7475<span class="special">}</span>
7476</pre>
7477<p>
7478          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7479          that supports <a class="link" href="reference.html#currying">currying</a>.
7480        </p>
7481<div class="table">
7482<a name="metaparse.reference.alphabetical.is_letter.arguments"></a><p class="title"><b>Table 24.47. Arguments</b></p>
7483<div class="table-contents"><table class="table" summary="Arguments">
7484<colgroup>
7485<col>
7486<col>
7487</colgroup>
7488<thead><tr>
7489<th>
7490                  <p>
7491                    Name
7492                  </p>
7493                </th>
7494<th>
7495                  <p>
7496                    Type
7497                  </p>
7498                </th>
7499</tr></thead>
7500<tbody><tr>
7501<td>
7502                  <p>
7503                    <code class="computeroutput"><span class="identifier">C</span></code>
7504                  </p>
7505                </td>
7506<td>
7507                  <p>
7508                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
7509                  </p>
7510                </td>
7511</tr></tbody>
7512</table></div>
7513</div>
7514<br class="table-break"><h2>
7515<a name="metaparse.reference.alphabetical.is_letter.h1"></a>
7516          <span class="phrase"><a name="metaparse.reference.alphabetical.is_letter.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter.description">Description</a>
7517        </h2>
7518<p>
7519          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is a letter.
7520          Returns a boxed boolean value.
7521        </p>
7522<h2>
7523<a name="metaparse.reference.alphabetical.is_letter.h2"></a>
7524          <span class="phrase"><a name="metaparse.reference.alphabetical.is_letter.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter.header">Header</a>
7525        </h2>
7526<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7527</pre>
7528<h2>
7529<a name="metaparse.reference.alphabetical.is_letter.h3"></a>
7530          <span class="phrase"><a name="metaparse.reference.alphabetical.is_letter.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter.expression_semantics">Expression
7531          semantics</a>
7532        </h2>
7533<p>
7534          The following expressions are equivalent:
7535        </p>
7536<pre class="programlisting"><span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7537<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7538
7539<span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'z'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7540<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7541
7542<span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7543<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7544
7545<span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'Z'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7546<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7547
7548<span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span>
7549<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
7550</pre>
7551<h2>
7552<a name="metaparse.reference.alphabetical.is_letter.h4"></a>
7553          <span class="phrase"><a name="metaparse.reference.alphabetical.is_letter.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_letter.example">Example</a>
7554        </h2>
7555<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7556
7557<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7558
7559<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7560
7561<span class="keyword">struct</span> <span class="identifier">returns_char</span>
7562<span class="special">{</span>
7563  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;;</span>
7564<span class="special">};</span>
7565
7566<span class="keyword">static_assert</span><span class="special">(</span>
7567  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7568  <span class="string">"A should be a letter"</span>
7569<span class="special">);</span>
7570
7571<span class="keyword">static_assert</span><span class="special">(</span>
7572  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7573  <span class="string">"a number should not be a letter"</span>
7574<span class="special">);</span>
7575
7576<span class="keyword">static_assert</span><span class="special">(</span>
7577  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
7578    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7579  <span class="string">"it should support currying"</span>
7580<span class="special">);</span>
7581
7582<span class="keyword">static_assert</span><span class="special">(</span>
7583  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_letter</span><span class="special">&lt;</span><span class="identifier">returns_char</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7584  <span class="string">"it should support lazy evaluation"</span>
7585<span class="special">);</span>
7586</pre>
7587</div>
7588<div class="section">
7589<div class="titlepage"><div><div><h4 class="title">
7590<a name="metaparse.reference.alphabetical.is_ucase_letter"></a><a name="is_ucase_letter"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter" title="is_ucase_letter">is_ucase_letter</a>
7591</h4></div></div></div>
7592<h2>
7593<a name="metaparse.reference.alphabetical.is_ucase_letter.h0"></a>
7594          <span class="phrase"><a name="metaparse.reference.alphabetical.is_ucase_letter.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter.synopsis">Synopsis</a>
7595        </h2>
7596<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7597<span class="special">{</span>
7598  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7599  <span class="keyword">struct</span> <span class="identifier">is_ucase_letter</span><span class="special">;</span>
7600<span class="special">}</span>
7601</pre>
7602<p>
7603          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7604          that supports <a class="link" href="reference.html#currying">currying</a>.
7605        </p>
7606<div class="table">
7607<a name="metaparse.reference.alphabetical.is_ucase_letter.arguments"></a><p class="title"><b>Table 24.48. Arguments</b></p>
7608<div class="table-contents"><table class="table" summary="Arguments">
7609<colgroup>
7610<col>
7611<col>
7612</colgroup>
7613<thead><tr>
7614<th>
7615                  <p>
7616                    Name
7617                  </p>
7618                </th>
7619<th>
7620                  <p>
7621                    Type
7622                  </p>
7623                </th>
7624</tr></thead>
7625<tbody><tr>
7626<td>
7627                  <p>
7628                    <code class="computeroutput"><span class="identifier">C</span></code>
7629                  </p>
7630                </td>
7631<td>
7632                  <p>
7633                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
7634                  </p>
7635                </td>
7636</tr></tbody>
7637</table></div>
7638</div>
7639<br class="table-break"><h2>
7640<a name="metaparse.reference.alphabetical.is_ucase_letter.h1"></a>
7641          <span class="phrase"><a name="metaparse.reference.alphabetical.is_ucase_letter.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter.description">Description</a>
7642        </h2>
7643<p>
7644          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is an upper
7645          case letter. Returns a boxed boolean value.
7646        </p>
7647<h2>
7648<a name="metaparse.reference.alphabetical.is_ucase_letter.h2"></a>
7649          <span class="phrase"><a name="metaparse.reference.alphabetical.is_ucase_letter.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter.header">Header</a>
7650        </h2>
7651<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_ucase_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7652</pre>
7653<h2>
7654<a name="metaparse.reference.alphabetical.is_ucase_letter.h3"></a>
7655          <span class="phrase"><a name="metaparse.reference.alphabetical.is_ucase_letter.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter.expression_semantics">Expression
7656          semantics</a>
7657        </h2>
7658<p>
7659          The following expressions are equivalent:
7660        </p>
7661<pre class="programlisting"><span class="identifier">is_ucase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7662<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7663
7664<span class="identifier">is_ucase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'Z'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
7665<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7666
7667<span class="identifier">is_ucase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span>
7668<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
7669</pre>
7670<h2>
7671<a name="metaparse.reference.alphabetical.is_ucase_letter.h4"></a>
7672          <span class="phrase"><a name="metaparse.reference.alphabetical.is_ucase_letter.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_ucase_letter.example">Example</a>
7673        </h2>
7674<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_ucase_letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7675
7676<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7677
7678<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7679
7680<span class="keyword">struct</span> <span class="identifier">returns_char</span>
7681<span class="special">{</span>
7682  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;;</span>
7683<span class="special">};</span>
7684
7685<span class="keyword">static_assert</span><span class="special">(</span>
7686  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_ucase_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7687  <span class="string">"A should be an upper case letter"</span>
7688<span class="special">);</span>
7689
7690<span class="keyword">static_assert</span><span class="special">(</span>
7691  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_ucase_letter</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7692  <span class="string">"a should not be an upper case letter"</span>
7693<span class="special">);</span>
7694
7695<span class="keyword">static_assert</span><span class="special">(</span>
7696  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_ucase_letter</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
7697    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7698  <span class="string">"it should support currying"</span>
7699<span class="special">);</span>
7700
7701<span class="keyword">static_assert</span><span class="special">(</span>
7702  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_ucase_letter</span><span class="special">&lt;</span><span class="identifier">returns_char</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7703  <span class="string">"it should support lazy evaluation"</span>
7704<span class="special">);</span>
7705</pre>
7706</div>
7707<div class="section">
7708<div class="titlepage"><div><div><h4 class="title">
7709<a name="metaparse.reference.alphabetical.is_whitespace_c"></a><a name="is_whitespace_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c" title="is_whitespace_c">is_whitespace_c</a>
7710</h4></div></div></div>
7711<h2>
7712<a name="metaparse.reference.alphabetical.is_whitespace_c.h0"></a>
7713          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c.synopsis">Synopsis</a>
7714        </h2>
7715<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7716<span class="special">{</span>
7717  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">&gt;</span>
7718  <span class="keyword">struct</span> <span class="identifier">is_whitespace_c</span><span class="special">;</span>
7719<span class="special">}</span>
7720</pre>
7721<p>
7722          This is a template class similar to a <a class="link" href="reference.html#metafunction">template
7723          metafunction</a> but taking a <code class="computeroutput"><span class="keyword">char</span></code>
7724          value as argument.
7725        </p>
7726<div class="table">
7727<a name="metaparse.reference.alphabetical.is_whitespace_c.arguments"></a><p class="title"><b>Table 24.49. Arguments</b></p>
7728<div class="table-contents"><table class="table" summary="Arguments">
7729<colgroup>
7730<col>
7731<col>
7732</colgroup>
7733<thead><tr>
7734<th>
7735                  <p>
7736                    Name
7737                  </p>
7738                </th>
7739<th>
7740                  <p>
7741                    Type
7742                  </p>
7743                </th>
7744</tr></thead>
7745<tbody><tr>
7746<td>
7747                  <p>
7748                    <code class="computeroutput"><span class="identifier">D</span></code>
7749                  </p>
7750                </td>
7751<td>
7752                  <p>
7753                    <code class="computeroutput"><span class="keyword">char</span></code> value
7754                  </p>
7755                </td>
7756</tr></tbody>
7757</table></div>
7758</div>
7759<br class="table-break"><h2>
7760<a name="metaparse.reference.alphabetical.is_whitespace_c.h1"></a>
7761          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c.description">Description</a>
7762        </h2>
7763<p>
7764          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is a whitespace
7765          character. Returns a boxed boolean value.
7766        </p>
7767<h2>
7768<a name="metaparse.reference.alphabetical.is_whitespace_c.h2"></a>
7769          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c.header">Header</a>
7770        </h2>
7771<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_whitespace_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7772</pre>
7773<h2>
7774<a name="metaparse.reference.alphabetical.is_whitespace_c.h3"></a>
7775          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c.expression_semantics">Expression
7776          semantics</a>
7777        </h2>
7778<p>
7779          The following expressions are equivalent:
7780        </p>
7781<pre class="programlisting"><span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">' '</span><span class="special">&gt;::</span><span class="identifier">type</span>
7782<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7783
7784<span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">'\t'</span><span class="special">&gt;::</span><span class="identifier">type</span>
7785<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7786
7787<span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">'\r'</span><span class="special">&gt;::</span><span class="identifier">type</span>
7788<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7789
7790<span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">'\n'</span><span class="special">&gt;::</span><span class="identifier">type</span>
7791<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span>
7792</pre>
7793<p>
7794          For any <code class="computeroutput"><span class="identifier">c</span></code> character other
7795          than the above listed ones the following are equivalent:
7796        </p>
7797<pre class="programlisting"><span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">type</span>
7798<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">false_</span>
7799</pre>
7800<h2>
7801<a name="metaparse.reference.alphabetical.is_whitespace_c.h4"></a>
7802          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace_c.example">Example</a>
7803        </h2>
7804<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_whitespace_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7805
7806<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7807
7808<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7809
7810<span class="keyword">static_assert</span><span class="special">(</span>
7811  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">' '</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7812  <span class="string">"a space should be a whitespace character"</span>
7813<span class="special">);</span>
7814
7815<span class="keyword">static_assert</span><span class="special">(</span>
7816  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7817  <span class="string">"a number should not be a whitespace character"</span>
7818<span class="special">);</span>
7819</pre>
7820</div>
7821<div class="section">
7822<div class="titlepage"><div><div><h4 class="title">
7823<a name="metaparse.reference.alphabetical.is_whitespace"></a><a name="is_whitespace"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace" title="is_whitespace">is_whitespace</a>
7824</h4></div></div></div>
7825<h2>
7826<a name="metaparse.reference.alphabetical.is_whitespace.h0"></a>
7827          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace.synopsis">Synopsis</a>
7828        </h2>
7829<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">util</span>
7830<span class="special">{</span>
7831  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
7832  <span class="keyword">struct</span> <span class="identifier">is_whitespace</span><span class="special">;</span>
7833<span class="special">}</span>
7834</pre>
7835<p>
7836          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>
7837          that supports <a class="link" href="reference.html#currying">currying</a>.
7838        </p>
7839<div class="table">
7840<a name="metaparse.reference.alphabetical.is_whitespace.arguments"></a><p class="title"><b>Table 24.50. Arguments</b></p>
7841<div class="table-contents"><table class="table" summary="Arguments">
7842<colgroup>
7843<col>
7844<col>
7845</colgroup>
7846<thead><tr>
7847<th>
7848                  <p>
7849                    Name
7850                  </p>
7851                </th>
7852<th>
7853                  <p>
7854                    Type
7855                  </p>
7856                </th>
7857</tr></thead>
7858<tbody><tr>
7859<td>
7860                  <p>
7861                    <code class="computeroutput"><span class="identifier">C</span></code>
7862                  </p>
7863                </td>
7864<td>
7865                  <p>
7866                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
7867                  </p>
7868                </td>
7869</tr></tbody>
7870</table></div>
7871</div>
7872<br class="table-break"><h2>
7873<a name="metaparse.reference.alphabetical.is_whitespace.h1"></a>
7874          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace.description">Description</a>
7875        </h2>
7876<p>
7877          Checks if <code class="computeroutput"><span class="identifier">C</span></code> is a whitespace
7878          character. Returns a boxed boolean value.
7879        </p>
7880<h2>
7881<a name="metaparse.reference.alphabetical.is_whitespace.h2"></a>
7882          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace.header">Header</a>
7883        </h2>
7884<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_whitespace</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7885</pre>
7886<h2>
7887<a name="metaparse.reference.alphabetical.is_whitespace.h3"></a>
7888          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace.expression_semantics">Expression
7889          semantics</a>
7890        </h2>
7891<p>
7892          For any <code class="computeroutput"><span class="identifier">C</span></code> nullary template
7893          metafunction returning a wrapped character value the following are equivalent:
7894        </p>
7895<pre class="programlisting"><span class="identifier">is_whitespace</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span>
7896<span class="identifier">is_whitespace</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">&gt;::</span><span class="identifier">type</span>
7897<span class="identifier">is_whitespace_c</span><span class="special">&lt;</span><span class="identifier">C</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;::</span><span class="identifier">type</span>
7898</pre>
7899<h2>
7900<a name="metaparse.reference.alphabetical.is_whitespace.h4"></a>
7901          <span class="phrase"><a name="metaparse.reference.alphabetical.is_whitespace.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.is_whitespace.example">Example</a>
7902        </h2>
7903<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">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">is_whitespace</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
7904
7905<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
7906
7907<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
7908
7909<span class="keyword">struct</span> <span class="identifier">returns_char</span>
7910<span class="special">{</span>
7911  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">' '</span><span class="special">&gt;;</span>
7912<span class="special">};</span>
7913
7914<span class="keyword">static_assert</span><span class="special">(</span>
7915  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">' '</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7916  <span class="string">"a space should be a whitespace character"</span>
7917<span class="special">);</span>
7918
7919<span class="keyword">static_assert</span><span class="special">(</span>
7920  <span class="special">!</span><span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7921  <span class="string">"a number should not be a whitespace character"</span>
7922<span class="special">);</span>
7923
7924<span class="keyword">static_assert</span><span class="special">(</span>
7925  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace</span><span class="special">&lt;&gt;::</span><span class="identifier">type</span>
7926    <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\t'</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7927  <span class="string">"it should support currying"</span>
7928<span class="special">);</span>
7929
7930<span class="keyword">static_assert</span><span class="special">(</span>
7931  <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace</span><span class="special">&lt;</span><span class="identifier">returns_char</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
7932  <span class="string">"it should support lazy evaluation"</span>
7933<span class="special">);</span>
7934</pre>
7935</div>
7936<div class="section">
7937<div class="titlepage"><div><div><h4 class="title">
7938<a name="metaparse.reference.alphabetical.iterate_c"></a><a name="iterate_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c" title="iterate_c">iterate_c</a>
7939</h4></div></div></div>
7940<h2>
7941<a name="metaparse.reference.alphabetical.iterate_c.h0"></a>
7942          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c.synopsis">Synopsis</a>
7943        </h2>
7944<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">N</span><span class="special">&gt;</span>
7945<span class="keyword">struct</span> <span class="identifier">iterate_c</span><span class="special">;</span>
7946</pre>
7947<p>
7948          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
7949        </p>
7950<div class="table">
7951<a name="metaparse.reference.alphabetical.iterate_c.arguments"></a><p class="title"><b>Table 24.51. Arguments</b></p>
7952<div class="table-contents"><table class="table" summary="Arguments">
7953<colgroup>
7954<col>
7955<col>
7956</colgroup>
7957<thead><tr>
7958<th>
7959                  <p>
7960                    Name
7961                  </p>
7962                </th>
7963<th>
7964                  <p>
7965                    Type
7966                  </p>
7967                </th>
7968</tr></thead>
7969<tbody>
7970<tr>
7971<td>
7972                  <p>
7973                    <code class="computeroutput"><span class="identifier">P</span></code>
7974                  </p>
7975                </td>
7976<td>
7977                  <p>
7978                    <a class="link" href="reference.html#parser">parser</a>
7979                  </p>
7980                </td>
7981</tr>
7982<tr>
7983<td>
7984                  <p>
7985                    <code class="computeroutput"><span class="identifier">N</span></code>
7986                  </p>
7987                </td>
7988<td>
7989                  <p>
7990                    non-negative integer value
7991                  </p>
7992                </td>
7993</tr>
7994</tbody>
7995</table></div>
7996</div>
7997<br class="table-break"><h2>
7998<a name="metaparse.reference.alphabetical.iterate_c.h1"></a>
7999          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c.description">Description</a>
8000        </h2>
8001<p>
8002          It applies <code class="computeroutput"><span class="identifier">P</span></code> on the input
8003          string <code class="computeroutput"><span class="identifier">N</span></code> times. The result
8004          of parsing is a sequence of the results of the individual applications
8005          of <code class="computeroutput"><span class="identifier">P</span></code>. <code class="computeroutput"><span class="identifier">P</span></code>
8006          has to accept the input <code class="computeroutput"><span class="identifier">N</span></code>
8007          times for <code class="computeroutput"><span class="identifier">iterate_c</span></code> to
8008          accept it.
8009        </p>
8010<h2>
8011<a name="metaparse.reference.alphabetical.iterate_c.h2"></a>
8012          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c.header">Header</a>
8013        </h2>
8014<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">metaparse</span><span class="special">/</span><span class="identifier">iterate_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8015</pre>
8016<h2>
8017<a name="metaparse.reference.alphabetical.iterate_c.h3"></a>
8018          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c.expression_semantics">Expression
8019          semantics</a>
8020        </h2>
8021<p>
8022          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">n</span></code> integer value the following are equivalent:
8023        </p>
8024<pre class="programlisting"><span class="identifier">iterate_c</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">&gt;</span>
8025
8026<span class="identifier">sequence</span><span class="special">&lt;</span>
8027  <span class="identifier">p</span><span class="special">,</span> <span class="comment">// 1.</span>
8028  <span class="identifier">p</span><span class="special">,</span> <span class="comment">// 2.</span>
8029  <span class="comment">// ...</span>
8030  <span class="identifier">p</span>  <span class="comment">// n.</span>
8031<span class="special">&gt;</span>
8032</pre>
8033<h2>
8034<a name="metaparse.reference.alphabetical.iterate_c.h4"></a>
8035          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate_c.example">Example</a>
8036        </h2>
8037<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">metaparse</span><span class="special">/</span><span class="identifier">iterate_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8038<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8039<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8040<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8041<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8042<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8043
8044<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8045<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8046<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8047
8048<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8049
8050<span class="keyword">static_assert</span><span class="special">(</span>
8051  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
8052    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
8053      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'1'</span><span class="special">&gt;,</span>
8054      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'2'</span><span class="special">&gt;,</span>
8055      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'3'</span><span class="special">&gt;</span>
8056    <span class="special">&gt;,</span>
8057    <span class="identifier">get_result</span><span class="special">&lt;</span>
8058      <span class="identifier">iterate_c</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"123"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8059    <span class="special">&gt;::</span><span class="identifier">type</span>
8060  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8061  <span class="string">"the result should be the sequence of the individual applications of digit"</span>
8062<span class="special">);</span>
8063
8064<span class="keyword">static_assert</span><span class="special">(</span>
8065  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
8066    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
8067      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'1'</span><span class="special">&gt;,</span>
8068      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'2'</span><span class="special">&gt;,</span>
8069      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'3'</span><span class="special">&gt;</span>
8070    <span class="special">&gt;,</span>
8071    <span class="identifier">get_result</span><span class="special">&lt;</span>
8072      <span class="identifier">iterate_c</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1234"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8073    <span class="special">&gt;::</span><span class="identifier">type</span>
8074  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8075  <span class="string">"only three iterations should be made"</span>
8076<span class="special">);</span>
8077
8078<span class="keyword">static_assert</span><span class="special">(</span>
8079  <span class="identifier">is_error</span><span class="special">&lt;</span>
8080    <span class="identifier">iterate_c</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"12"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8081  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8082  <span class="string">"it should fail when digit can not be applied three times"</span>
8083<span class="special">);</span>
8084</pre>
8085</div>
8086<div class="section">
8087<div class="titlepage"><div><div><h4 class="title">
8088<a name="metaparse.reference.alphabetical.iterate"></a><a name="iterate"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate" title="iterate">iterate</a>
8089</h4></div></div></div>
8090<h2>
8091<a name="metaparse.reference.alphabetical.iterate.h0"></a>
8092          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate.synopsis">Synopsis</a>
8093        </h2>
8094<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">N</span><span class="special">&gt;</span>
8095<span class="keyword">struct</span> <span class="identifier">iterate</span><span class="special">;</span>
8096</pre>
8097<p>
8098          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
8099        </p>
8100<div class="table">
8101<a name="metaparse.reference.alphabetical.iterate.arguments"></a><p class="title"><b>Table 24.52. Arguments</b></p>
8102<div class="table-contents"><table class="table" summary="Arguments">
8103<colgroup>
8104<col>
8105<col>
8106</colgroup>
8107<thead><tr>
8108<th>
8109                  <p>
8110                    Name
8111                  </p>
8112                </th>
8113<th>
8114                  <p>
8115                    Type
8116                  </p>
8117                </th>
8118</tr></thead>
8119<tbody>
8120<tr>
8121<td>
8122                  <p>
8123                    <code class="computeroutput"><span class="identifier">P</span></code>
8124                  </p>
8125                </td>
8126<td>
8127                  <p>
8128                    <a class="link" href="reference.html#parser">parser</a>
8129                  </p>
8130                </td>
8131</tr>
8132<tr>
8133<td>
8134                  <p>
8135                    <code class="computeroutput"><span class="identifier">N</span></code>
8136                  </p>
8137                </td>
8138<td>
8139                  <p>
8140                    <a class="link" href="reference.html#boxed_value">boxed</a> non-negative integer
8141                    value
8142                  </p>
8143                </td>
8144</tr>
8145</tbody>
8146</table></div>
8147</div>
8148<br class="table-break"><h2>
8149<a name="metaparse.reference.alphabetical.iterate.h1"></a>
8150          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate.description">Description</a>
8151        </h2>
8152<p>
8153          It applies <code class="computeroutput"><span class="identifier">P</span></code> on the input
8154          string <code class="computeroutput"><span class="identifier">N</span></code> times. The result
8155          of parsing is a sequence of the results of the individual applications
8156          of <code class="computeroutput"><span class="identifier">P</span></code>. <code class="computeroutput"><span class="identifier">P</span></code>
8157          has to accept the input <code class="computeroutput"><span class="identifier">N</span></code>
8158          times for <code class="computeroutput"><span class="identifier">iterate</span></code> to accept
8159          it.
8160        </p>
8161<h2>
8162<a name="metaparse.reference.alphabetical.iterate.h2"></a>
8163          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate.header">Header</a>
8164        </h2>
8165<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">metaparse</span><span class="special">/</span><span class="identifier">iterate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8166</pre>
8167<h2>
8168<a name="metaparse.reference.alphabetical.iterate.h3"></a>
8169          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate.expression_semantics">Expression
8170          semantics</a>
8171        </h2>
8172<p>
8173          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">n</span></code> wrapped integer the following are equivalent:
8174        </p>
8175<pre class="programlisting"><span class="identifier">iterate</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">&gt;</span>
8176
8177<span class="identifier">iterate_c</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span>
8178</pre>
8179<h2>
8180<a name="metaparse.reference.alphabetical.iterate.h4"></a>
8181          <span class="phrase"><a name="metaparse.reference.alphabetical.iterate.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.iterate.example">Example</a>
8182        </h2>
8183<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">metaparse</span><span class="special">/</span><span class="identifier">iterate</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8184<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8185<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8186<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8187<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8188<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8189
8190<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8191<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8192<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8193
8194<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8195
8196<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8197
8198<span class="keyword">static_assert</span><span class="special">(</span>
8199  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
8200    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
8201      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'1'</span><span class="special">&gt;,</span>
8202      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'2'</span><span class="special">&gt;,</span>
8203      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'3'</span><span class="special">&gt;</span>
8204    <span class="special">&gt;,</span>
8205    <span class="identifier">get_result</span><span class="special">&lt;</span>
8206      <span class="identifier">iterate</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
8207        <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"123"</span><span class="special">),</span>
8208        <span class="identifier">start</span>
8209      <span class="special">&gt;</span>
8210    <span class="special">&gt;::</span><span class="identifier">type</span>
8211  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8212  <span class="string">"the result should be the sequence of the individual applications of digit"</span>
8213<span class="special">);</span>
8214
8215<span class="keyword">static_assert</span><span class="special">(</span>
8216  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
8217    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
8218      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'1'</span><span class="special">&gt;,</span>
8219      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'2'</span><span class="special">&gt;,</span>
8220      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'3'</span><span class="special">&gt;</span>
8221    <span class="special">&gt;,</span>
8222    <span class="identifier">get_result</span><span class="special">&lt;</span>
8223      <span class="identifier">iterate</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
8224        <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1234"</span><span class="special">),</span>
8225        <span class="identifier">start</span>
8226      <span class="special">&gt;</span>
8227    <span class="special">&gt;::</span><span class="identifier">type</span>
8228  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8229  <span class="string">"only three iterations should be made"</span>
8230<span class="special">);</span>
8231
8232<span class="keyword">static_assert</span><span class="special">(</span>
8233  <span class="identifier">is_error</span><span class="special">&lt;</span>
8234    <span class="identifier">iterate</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">&gt;&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span>
8235      <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"12"</span><span class="special">),</span>
8236      <span class="identifier">start</span>
8237    <span class="special">&gt;</span>
8238  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8239  <span class="string">"it should fail when digit can not be applied three times"</span>
8240<span class="special">);</span>
8241</pre>
8242</div>
8243<div class="section">
8244<div class="titlepage"><div><div><h4 class="title">
8245<a name="metaparse.reference.alphabetical.keyword"></a><a name="keyword"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword" title="keyword">keyword</a>
8246</h4></div></div></div>
8247<h2>
8248<a name="metaparse.reference.alphabetical.keyword.h0"></a>
8249          <span class="phrase"><a name="metaparse.reference.alphabetical.keyword.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword.synopsis">Synopsis</a>
8250        </h2>
8251<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">S</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">ResultType</span> <span class="special">=</span> <span class="comment">/* unspecified */</span><span class="special">&gt;</span>
8252<span class="keyword">struct</span> <span class="identifier">keyword</span><span class="special">;</span>
8253</pre>
8254<p>
8255          This is a <a class="link" href="reference.html#parser">parser</a>.
8256        </p>
8257<div class="table">
8258<a name="metaparse.reference.alphabetical.keyword.arguments"></a><p class="title"><b>Table 24.53. Arguments</b></p>
8259<div class="table-contents"><table class="table" summary="Arguments">
8260<colgroup>
8261<col>
8262<col>
8263</colgroup>
8264<thead><tr>
8265<th>
8266                  <p>
8267                    Name
8268                  </p>
8269                </th>
8270<th>
8271                  <p>
8272                    Type
8273                  </p>
8274                </th>
8275</tr></thead>
8276<tbody>
8277<tr>
8278<td>
8279                  <p>
8280                    <code class="computeroutput"><span class="identifier">S</span></code>
8281                  </p>
8282                </td>
8283<td>
8284                  <p>
8285                    <a class="link" href="reference.html#string">string</a>
8286                  </p>
8287                </td>
8288</tr>
8289<tr>
8290<td>
8291                  <p>
8292                    <code class="computeroutput"><span class="identifier">ResultType</span></code>
8293                  </p>
8294                </td>
8295<td>
8296                  <p>
8297                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
8298                    value</a>
8299                  </p>
8300                </td>
8301</tr>
8302</tbody>
8303</table></div>
8304</div>
8305<br class="table-break"><h2>
8306<a name="metaparse.reference.alphabetical.keyword.h1"></a>
8307          <span class="phrase"><a name="metaparse.reference.alphabetical.keyword.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword.description">Description</a>
8308        </h2>
8309<p>
8310          Parser accepting the keyword <code class="computeroutput"><span class="identifier">S</span></code>.
8311          The result of parsing is <code class="computeroutput"><span class="identifier">ResultType</span></code>,
8312          which is optional; when not given, the result of successful parsing is
8313          undefined.
8314        </p>
8315<h2>
8316<a name="metaparse.reference.alphabetical.keyword.h2"></a>
8317          <span class="phrase"><a name="metaparse.reference.alphabetical.keyword.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword.header">Header</a>
8318        </h2>
8319<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">metaparse</span><span class="special">/</span><span class="identifier">keyword</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8320</pre>
8321<h2>
8322<a name="metaparse.reference.alphabetical.keyword.h3"></a>
8323          <span class="phrase"><a name="metaparse.reference.alphabetical.keyword.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword.expression_semantics">Expression
8324          semantics</a>
8325        </h2>
8326<p>
8327          For any <code class="computeroutput"><span class="identifier">r</span></code> class and <code class="computeroutput"><span class="identifier">s</span></code> compile-time string that is built from
8328          the characters <code class="computeroutput"><span class="identifier">c1</span></code> ...
8329          <code class="computeroutput"><span class="identifier">cn</span></code> the following are equivalent:
8330        </p>
8331<pre class="programlisting"><span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">r</span><span class="special">&gt;</span>
8332
8333<span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">&gt;,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">cn</span><span class="special">&gt;,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">r</span><span class="special">&gt;&gt;</span>
8334</pre>
8335<h2>
8336<a name="metaparse.reference.alphabetical.keyword.h4"></a>
8337          <span class="phrase"><a name="metaparse.reference.alphabetical.keyword.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.keyword.example">Example</a>
8338        </h2>
8339<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">metaparse</span><span class="special">/</span><span class="identifier">keyword</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8340<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8341<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8342<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8343<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8344
8345<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8346
8347<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8348
8349<span class="keyword">static_assert</span><span class="special">(</span>
8350  <span class="identifier">get_result</span><span class="special">&lt;</span>
8351    <span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"for"</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;</span>
8352      <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"for"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8353  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
8354  <span class="string">"the result of parsing the keyword is keyword's second argument"</span>
8355<span class="special">);</span>
8356
8357<span class="keyword">static_assert</span><span class="special">(</span>
8358  <span class="identifier">is_error</span><span class="special">&lt;</span>
8359    <span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"for"</span><span class="special">),</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;</span>
8360      <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"if"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8361  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8362  <span class="string">"a word other than the keyword is an error"</span>
8363<span class="special">);</span>
8364</pre>
8365</div>
8366<div class="section">
8367<div class="titlepage"><div><div><h4 class="title">
8368<a name="metaparse.reference.alphabetical.last_of"></a><a name="last_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of" title="last_of">last_of</a>
8369</h4></div></div></div>
8370<h2>
8371<a name="metaparse.reference.alphabetical.last_of.h0"></a>
8372          <span class="phrase"><a name="metaparse.reference.alphabetical.last_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of.synopsis">Synopsis</a>
8373        </h2>
8374<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
8375<span class="keyword">struct</span> <span class="identifier">last_of</span><span class="special">;</span>
8376</pre>
8377<p>
8378          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
8379        </p>
8380<div class="table">
8381<a name="metaparse.reference.alphabetical.last_of.arguments"></a><p class="title"><b>Table 24.54. Arguments</b></p>
8382<div class="table-contents"><table class="table" summary="Arguments">
8383<colgroup>
8384<col>
8385<col>
8386</colgroup>
8387<thead><tr>
8388<th>
8389                  <p>
8390                    Name
8391                  </p>
8392                </th>
8393<th>
8394                  <p>
8395                    Type
8396                  </p>
8397                </th>
8398</tr></thead>
8399<tbody><tr>
8400<td>
8401                  <p>
8402                    <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
8403                  </p>
8404                </td>
8405<td>
8406                  <p>
8407                    <a class="link" href="reference.html#parser">parser</a>s
8408                  </p>
8409                </td>
8410</tr></tbody>
8411</table></div>
8412</div>
8413<br class="table-break"><h2>
8414<a name="metaparse.reference.alphabetical.last_of.h1"></a>
8415          <span class="phrase"><a name="metaparse.reference.alphabetical.last_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of.description">Description</a>
8416        </h2>
8417<p>
8418          <code class="computeroutput"><span class="identifier">last_of</span></code> applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
8419          parsers in sequence. It accepts an input when all parsers accept it. The
8420          result of parsing is the result of the last parser.
8421        </p>
8422<p>
8423          On compilers, which are not C++11-compliant, the maximum number of parsers
8424          <code class="computeroutput"><span class="identifier">last_of</span></code> accepts can be
8425          specified with the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span></code>
8426          macro. Its default value is <code class="computeroutput"><span class="number">5</span></code>.
8427        </p>
8428<h2>
8429<a name="metaparse.reference.alphabetical.last_of.h2"></a>
8430          <span class="phrase"><a name="metaparse.reference.alphabetical.last_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of.header">Header</a>
8431        </h2>
8432<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">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8433</pre>
8434<h2>
8435<a name="metaparse.reference.alphabetical.last_of.h3"></a>
8436          <span class="phrase"><a name="metaparse.reference.alphabetical.last_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of.expression_semantics">Expression
8437          semantics</a>
8438        </h2>
8439<p>
8440          For any <code class="computeroutput"><span class="identifier">p1</span></code>, ... <code class="computeroutput"><span class="identifier">pn</span></code> parsers
8441        </p>
8442<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
8443</pre>
8444<p>
8445          is equivalent to
8446        </p>
8447<pre class="programlisting"><span class="identifier">nth_of_c</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
8448</pre>
8449<h2>
8450<a name="metaparse.reference.alphabetical.last_of.h4"></a>
8451          <span class="phrase"><a name="metaparse.reference.alphabetical.last_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.last_of.example">Example</a>
8452        </h2>
8453<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">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8454<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8455<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8456<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8457<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8458<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8459<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8460
8461<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8462
8463<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8464
8465<span class="keyword">using</span> <span class="identifier">comma_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">','</span><span class="special">&gt;,</span> <span class="identifier">int_</span><span class="special">&gt;;</span>
8466
8467<span class="keyword">static_assert</span><span class="special">(</span>
8468  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">comma_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8469  <span class="string">"int without comma is rejected"</span>
8470<span class="special">);</span>
8471
8472<span class="keyword">static_assert</span><span class="special">(</span>
8473  <span class="identifier">get_result</span><span class="special">&lt;</span>
8474    <span class="identifier">comma_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">",13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8475  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8476  <span class="string">"the result is the result of the last parser"</span>
8477<span class="special">);</span>
8478</pre>
8479</div>
8480<div class="section">
8481<div class="titlepage"><div><div><h4 class="title">
8482<a name="metaparse.reference.alphabetical.lazy_template_metafunction"></a><a name="lazy_metafunction"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.lazy_template_metafunction" title="Lazy template metafunction">Lazy
8483        template metafunction</a>
8484</h4></div></div></div>
8485<p>
8486          A <span class="emphasis"><em>lazy template metafunction</em></span> is a <a class="link" href="reference.html#metafunction">template
8487          metafunction</a> that accepts <a class="link" href="reference.html#nullary_metafunction">nullary
8488          metafunction</a>s as arguments, that need to be evaluated first to get
8489          the value of the argument.
8490        </p>
8491<p>
8492          For example here is a <code class="computeroutput"><span class="identifier">plus</span></code>
8493          metafunction for <code class="computeroutput"><span class="keyword">int</span></code> values:
8494        </p>
8495<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">B</span><span class="special">&gt;</span>
8496<span class="keyword">struct</span> <span class="identifier">plus</span> <span class="special">:</span>
8497  <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">A</span><span class="special">::</span><span class="identifier">value</span> <span class="special">+</span> <span class="identifier">B</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span>
8498<span class="special">{};</span>
8499</pre>
8500<p>
8501          This metafunction takes two <a class="link" href="reference.html#boxed_value">boxed</a> numbers
8502          as arguments, unboxes them, adds their values and boxed the result again.
8503        </p>
8504<p>
8505          It works when it is called with boxed numbers. For example:
8506        </p>
8507<pre class="programlisting"><span class="keyword">static_assert</span><span class="special">(</span>
8508  <span class="identifier">plus</span><span class="special">&lt;</span>
8509    <span class="identifier">std</span><span class="special">::</span><span class="identifier">intgeral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;,</span>
8510    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;</span>
8511  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">4</span><span class="special">,</span>
8512  <span class="string">"This should work"</span>
8513<span class="special">);</span>
8514</pre>
8515<p>
8516          However, when it is called with a nullary metafunction returning the boxed
8517          value, it breaks:
8518        </p>
8519<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">nullary_metafunction_returning_2</span>
8520<span class="special">{</span>
8521  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;;</span>
8522<span class="special">};</span>
8523
8524<span class="comment">// Fails to compile</span>
8525<span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">nullary_metafunction_returning_2</span><span class="special">,</span> <span class="identifier">nullary_metafunction_returning_2</span><span class="special">&gt;::</span><span class="identifier">type</span>
8526</pre>
8527<p>
8528          So <code class="computeroutput"><span class="identifier">plus</span></code> is <span class="emphasis"><em>not</em></span>
8529          a lazy template metafunction. To make it lazy, it has to evaluate its arguments
8530          before using them:
8531        </p>
8532<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">A</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">B</span><span class="special">&gt;</span>
8533<span class="keyword">struct</span> <span class="identifier">lazy_plus</span> <span class="special">:</span>
8534  <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">A</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">+</span> <span class="identifier">B</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span>
8535<span class="special">{};</span>
8536</pre>
8537<p>
8538          Note that it uses <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span></code> and <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span></code>
8539          instead of <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="identifier">value</span></code> and <code class="computeroutput"><span class="identifier">B</span><span class="special">::</span><span class="identifier">value</span></code>.
8540          It works when it is called with nullary metafunctions as well:
8541        </p>
8542<pre class="programlisting"><span class="keyword">static_assert</span><span class="special">(</span>
8543  <span class="identifier">plus</span><span class="special">&lt;</span>
8544    <span class="identifier">nullary_metafunction_returning_2</span><span class="special">,</span>
8545    <span class="identifier">nullary_metafunction_returning_2</span>
8546  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">4</span><span class="special">,</span>
8547  <span class="string">"This should work"</span>
8548<span class="special">);</span>
8549</pre>
8550<p>
8551          Because it works with nullary metafunctions as arguments, it is a lazy
8552          template metafunction.
8553        </p>
8554</div>
8555<div class="section">
8556<div class="titlepage"><div><div><h4 class="title">
8557<a name="metaparse.reference.alphabetical.letter_expected"></a><a name="letter_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.letter_expected" title="letter_expected">letter_expected</a>
8558</h4></div></div></div>
8559<h2>
8560<a name="metaparse.reference.alphabetical.letter_expected.h0"></a>
8561          <span class="phrase"><a name="metaparse.reference.alphabetical.letter_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter_expected.synopsis">Synopsis</a>
8562        </h2>
8563<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
8564<span class="special">{</span>
8565  <span class="keyword">struct</span> <span class="identifier">letter_expected</span><span class="special">;</span>
8566<span class="special">}</span>
8567</pre>
8568<p>
8569          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
8570        </p>
8571<h2>
8572<a name="metaparse.reference.alphabetical.letter_expected.h1"></a>
8573          <span class="phrase"><a name="metaparse.reference.alphabetical.letter_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter_expected.description">Description</a>
8574        </h2>
8575<p>
8576          Class representing the error that a letter character was expected at a
8577          specific location.
8578        </p>
8579<h2>
8580<a name="metaparse.reference.alphabetical.letter_expected.h2"></a>
8581          <span class="phrase"><a name="metaparse.reference.alphabetical.letter_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter_expected.header">Header</a>
8582        </h2>
8583<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">letter_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8584</pre>
8585</div>
8586<div class="section">
8587<div class="titlepage"><div><div><h4 class="title">
8588<a name="metaparse.reference.alphabetical.letter"></a><a name="letter"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.letter" title="letter">letter</a>
8589</h4></div></div></div>
8590<h2>
8591<a name="metaparse.reference.alphabetical.letter.h0"></a>
8592          <span class="phrase"><a name="metaparse.reference.alphabetical.letter.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter.synopsis">Synopsis</a>
8593        </h2>
8594<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">letter</span><span class="special">;</span>
8595</pre>
8596<p>
8597          This is a <a class="link" href="reference.html#parser">parser</a>.
8598        </p>
8599<h2>
8600<a name="metaparse.reference.alphabetical.letter.h1"></a>
8601          <span class="phrase"><a name="metaparse.reference.alphabetical.letter.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter.description">Description</a>
8602        </h2>
8603<p>
8604          Parser accepting one character in the range <code class="computeroutput"><span class="identifier">a</span><span class="special">-</span><span class="identifier">z</span></code> or
8605          <code class="computeroutput"><span class="identifier">A</span><span class="special">-</span><span class="identifier">Z</span></code>. The result of the parser is the accepted
8606          character.
8607        </p>
8608<h2>
8609<a name="metaparse.reference.alphabetical.letter.h2"></a>
8610          <span class="phrase"><a name="metaparse.reference.alphabetical.letter.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter.header">Header</a>
8611        </h2>
8612<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">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8613</pre>
8614<h2>
8615<a name="metaparse.reference.alphabetical.letter.h3"></a>
8616          <span class="phrase"><a name="metaparse.reference.alphabetical.letter.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter.expression_semantics">Expression
8617          semantics</a>
8618        </h2>
8619<p>
8620          The following are equivalent:
8621        </p>
8622<pre class="programlisting"><span class="identifier">letter</span>
8623
8624<span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_letter</span><span class="special">&lt;&gt;,</span> <span class="identifier">error</span><span class="special">::</span><span class="identifier">letter_expected</span><span class="special">&gt;</span>
8625</pre>
8626<h2>
8627<a name="metaparse.reference.alphabetical.letter.h4"></a>
8628          <span class="phrase"><a name="metaparse.reference.alphabetical.letter.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.letter.example">Example</a>
8629        </h2>
8630<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">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8631<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8632<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8633<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8634<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8635
8636<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8637
8638<span class="keyword">static_assert</span><span class="special">(</span>
8639  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"a"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8640  <span class="string">"letter should accept a letter"</span>
8641<span class="special">);</span>
8642
8643<span class="keyword">static_assert</span><span class="special">(</span>
8644  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8645  <span class="string">"letter should reject a digit"</span>
8646<span class="special">);</span>
8647
8648<span class="keyword">static_assert</span><span class="special">(</span>
8649  <span class="identifier">get_result</span><span class="special">&lt;</span>
8650    <span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"z"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8651  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'z'</span><span class="special">,</span>
8652  <span class="string">"the result of parsing should be the character value"</span>
8653<span class="special">);</span>
8654</pre>
8655</div>
8656<div class="section">
8657<div class="titlepage"><div><div><h4 class="title">
8658<a name="metaparse.reference.alphabetical.lit_c"></a><a name="lit_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c" title="lit_c">lit_c</a>
8659</h4></div></div></div>
8660<h2>
8661<a name="metaparse.reference.alphabetical.lit_c.h0"></a>
8662          <span class="phrase"><a name="metaparse.reference.alphabetical.lit_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c.synopsis">Synopsis</a>
8663        </h2>
8664<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">&gt;</span>
8665<span class="keyword">struct</span> <span class="identifier">lit</span><span class="special">;</span>
8666</pre>
8667<p>
8668          This is a <a class="link" href="reference.html#parser">parser</a>.
8669        </p>
8670<div class="table">
8671<a name="metaparse.reference.alphabetical.lit_c.arguments"></a><p class="title"><b>Table 24.55. Arguments</b></p>
8672<div class="table-contents"><table class="table" summary="Arguments">
8673<colgroup>
8674<col>
8675<col>
8676</colgroup>
8677<thead><tr>
8678<th>
8679                  <p>
8680                    Name
8681                  </p>
8682                </th>
8683<th>
8684                  <p>
8685                    Type
8686                  </p>
8687                </th>
8688</tr></thead>
8689<tbody><tr>
8690<td>
8691                  <p>
8692                    <code class="computeroutput"><span class="identifier">C</span></code>
8693                  </p>
8694                </td>
8695<td>
8696                  <p>
8697                    <code class="computeroutput"><span class="keyword">char</span></code> value
8698                  </p>
8699                </td>
8700</tr></tbody>
8701</table></div>
8702</div>
8703<br class="table-break"><h2>
8704<a name="metaparse.reference.alphabetical.lit_c.h1"></a>
8705          <span class="phrase"><a name="metaparse.reference.alphabetical.lit_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c.description">Description</a>
8706        </h2>
8707<p>
8708          Parser accepting only the <code class="computeroutput"><span class="identifier">C</span></code>
8709          character. The result of parsing is the accepted character.
8710        </p>
8711<h2>
8712<a name="metaparse.reference.alphabetical.lit_c.h2"></a>
8713          <span class="phrase"><a name="metaparse.reference.alphabetical.lit_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c.header">Header</a>
8714        </h2>
8715<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">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8716</pre>
8717<h2>
8718<a name="metaparse.reference.alphabetical.lit_c.h3"></a>
8719          <span class="phrase"><a name="metaparse.reference.alphabetical.lit_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c.expression_semantics">Expression
8720          semantics</a>
8721        </h2>
8722<p>
8723          For any <code class="computeroutput"><span class="identifier">c</span></code> character the
8724          following are equivalent:
8725        </p>
8726<pre class="programlisting"><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;</span>
8727
8728<span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;&gt;</span>
8729</pre>
8730<h2>
8731<a name="metaparse.reference.alphabetical.lit_c.h4"></a>
8732          <span class="phrase"><a name="metaparse.reference.alphabetical.lit_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit_c.example">Example</a>
8733        </h2>
8734<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">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8735<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8736<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8737<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8738<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8739
8740<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8741
8742<span class="keyword">static_assert</span><span class="special">(</span>
8743  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'x'</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"a"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8744  <span class="string">"a different character should be an error"</span>
8745<span class="special">);</span>
8746
8747<span class="keyword">static_assert</span><span class="special">(</span>
8748  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'x'</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8749  <span class="string">"empty input should be an error"</span>
8750<span class="special">);</span>
8751
8752<span class="keyword">static_assert</span><span class="special">(</span>
8753  <span class="identifier">get_result</span><span class="special">&lt;</span>
8754    <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'x'</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8755  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
8756  <span class="string">"result of parsing should be the accepted character"</span>
8757<span class="special">);</span>
8758</pre>
8759</div>
8760<div class="section">
8761<div class="titlepage"><div><div><h4 class="title">
8762<a name="metaparse.reference.alphabetical.literal_expected"></a><a name="literal_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.literal_expected" title="literal_expected">literal_expected</a>
8763</h4></div></div></div>
8764<h2>
8765<a name="metaparse.reference.alphabetical.literal_expected.h0"></a>
8766          <span class="phrase"><a name="metaparse.reference.alphabetical.literal_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.literal_expected.synopsis">Synopsis</a>
8767        </h2>
8768<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
8769<span class="special">{</span>
8770  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">&gt;</span>
8771  <span class="keyword">struct</span> <span class="identifier">literal_expected</span><span class="special">;</span>
8772<span class="special">}</span>
8773</pre>
8774<p>
8775          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
8776        </p>
8777<div class="table">
8778<a name="metaparse.reference.alphabetical.literal_expected.arguments"></a><p class="title"><b>Table 24.56. Arguments</b></p>
8779<div class="table-contents"><table class="table" summary="Arguments">
8780<colgroup>
8781<col>
8782<col>
8783</colgroup>
8784<thead><tr>
8785<th>
8786                  <p>
8787                    Name
8788                  </p>
8789                </th>
8790<th>
8791                  <p>
8792                    Type
8793                  </p>
8794                </th>
8795</tr></thead>
8796<tbody><tr>
8797<td>
8798                  <p>
8799                    <code class="computeroutput"><span class="identifier">C</span></code>
8800                  </p>
8801                </td>
8802<td>
8803                  <p>
8804                    <code class="computeroutput"><span class="keyword">char</span></code> value
8805                  </p>
8806                </td>
8807</tr></tbody>
8808</table></div>
8809</div>
8810<br class="table-break"><h2>
8811<a name="metaparse.reference.alphabetical.literal_expected.h1"></a>
8812          <span class="phrase"><a name="metaparse.reference.alphabetical.literal_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.literal_expected.description">Description</a>
8813        </h2>
8814<p>
8815          Template class representing the error that a specific literal was expected.
8816          <code class="computeroutput"><span class="identifier">C</span></code> is the literal that was
8817          expected but not found.
8818        </p>
8819<h2>
8820<a name="metaparse.reference.alphabetical.literal_expected.h2"></a>
8821          <span class="phrase"><a name="metaparse.reference.alphabetical.literal_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.literal_expected.header">Header</a>
8822        </h2>
8823<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">literal_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8824</pre>
8825</div>
8826<div class="section">
8827<div class="titlepage"><div><div><h4 class="title">
8828<a name="metaparse.reference.alphabetical.lit"></a><a name="lit"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.lit" title="lit">lit</a>
8829</h4></div></div></div>
8830<h2>
8831<a name="metaparse.reference.alphabetical.lit.h0"></a>
8832          <span class="phrase"><a name="metaparse.reference.alphabetical.lit.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit.synopsis">Synopsis</a>
8833        </h2>
8834<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
8835<span class="keyword">struct</span> <span class="identifier">lit</span><span class="special">;</span>
8836</pre>
8837<p>
8838          This is a <a class="link" href="reference.html#parser">parser</a>.
8839        </p>
8840<div class="table">
8841<a name="metaparse.reference.alphabetical.lit.arguments"></a><p class="title"><b>Table 24.57. Arguments</b></p>
8842<div class="table-contents"><table class="table" summary="Arguments">
8843<colgroup>
8844<col>
8845<col>
8846</colgroup>
8847<thead><tr>
8848<th>
8849                  <p>
8850                    Name
8851                  </p>
8852                </th>
8853<th>
8854                  <p>
8855                    Type
8856                  </p>
8857                </th>
8858</tr></thead>
8859<tbody><tr>
8860<td>
8861                  <p>
8862                    <code class="computeroutput"><span class="identifier">C</span></code>
8863                  </p>
8864                </td>
8865<td>
8866                  <p>
8867                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
8868                  </p>
8869                </td>
8870</tr></tbody>
8871</table></div>
8872</div>
8873<br class="table-break"><h2>
8874<a name="metaparse.reference.alphabetical.lit.h1"></a>
8875          <span class="phrase"><a name="metaparse.reference.alphabetical.lit.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit.description">Description</a>
8876        </h2>
8877<p>
8878          Parser accepting only the <code class="computeroutput"><span class="identifier">C</span></code>
8879          character. The result of parsing is the accepted character.
8880        </p>
8881<h2>
8882<a name="metaparse.reference.alphabetical.lit.h2"></a>
8883          <span class="phrase"><a name="metaparse.reference.alphabetical.lit.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit.header">Header</a>
8884        </h2>
8885<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">metaparse</span><span class="special">/</span><span class="identifier">lit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8886</pre>
8887<h2>
8888<a name="metaparse.reference.alphabetical.lit.h3"></a>
8889          <span class="phrase"><a name="metaparse.reference.alphabetical.lit.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit.expression_semantics">Expression
8890          semantics</a>
8891        </h2>
8892<p>
8893          For any <code class="computeroutput"><span class="identifier">c</span></code> boxed character
8894          the following are equivalent:
8895        </p>
8896<pre class="programlisting"><span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;</span>
8897
8898<span class="identifier">accept_when</span><span class="special">&lt;</span>
8899  <span class="identifier">one_char</span><span class="special">,</span>
8900  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
8901  <span class="identifier">error</span><span class="special">::</span><span class="identifier">literal_expected</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span>
8902<span class="special">&gt;</span>
8903</pre>
8904<h2>
8905<a name="metaparse.reference.alphabetical.lit.h4"></a>
8906          <span class="phrase"><a name="metaparse.reference.alphabetical.lit.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.lit.example">Example</a>
8907        </h2>
8908<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">metaparse</span><span class="special">/</span><span class="identifier">lit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8909<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8910<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8911<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8912<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
8913
8914<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
8915
8916<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
8917
8918<span class="keyword">static_assert</span><span class="special">(</span>
8919  <span class="identifier">is_error</span><span class="special">&lt;</span>
8920    <span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;&gt;</span>
8921      <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"a"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8922  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8923  <span class="string">"a different character should be an error"</span>
8924<span class="special">);</span>
8925
8926<span class="keyword">static_assert</span><span class="special">(</span>
8927  <span class="identifier">is_error</span><span class="special">&lt;</span>
8928    <span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;&gt;</span>
8929      <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8930  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
8931  <span class="string">"empty input should be an error"</span>
8932<span class="special">);</span>
8933
8934<span class="keyword">static_assert</span><span class="special">(</span>
8935  <span class="identifier">get_result</span><span class="special">&lt;</span>
8936    <span class="identifier">lit</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;&gt;</span>
8937      <span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
8938  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
8939  <span class="string">"result of parsing should be the accepted character"</span>
8940<span class="special">);</span>
8941</pre>
8942</div>
8943<div class="section">
8944<div class="titlepage"><div><div><h4 class="title">
8945<a name="metaparse.reference.alphabetical.look_ahead"></a><a name="look_ahead"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead" title="look_ahead">look_ahead</a>
8946</h4></div></div></div>
8947<h2>
8948<a name="metaparse.reference.alphabetical.look_ahead.h0"></a>
8949          <span class="phrase"><a name="metaparse.reference.alphabetical.look_ahead.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead.synopsis">Synopsis</a>
8950        </h2>
8951<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
8952<span class="keyword">struct</span> <span class="identifier">look_ahead</span><span class="special">;</span>
8953</pre>
8954<p>
8955          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
8956        </p>
8957<div class="table">
8958<a name="metaparse.reference.alphabetical.look_ahead.arguments"></a><p class="title"><b>Table 24.58. Arguments</b></p>
8959<div class="table-contents"><table class="table" summary="Arguments">
8960<colgroup>
8961<col>
8962<col>
8963</colgroup>
8964<thead><tr>
8965<th>
8966                  <p>
8967                    Name
8968                  </p>
8969                </th>
8970<th>
8971                  <p>
8972                    Type
8973                  </p>
8974                </th>
8975</tr></thead>
8976<tbody><tr>
8977<td>
8978                  <p>
8979                    <code class="computeroutput"><span class="identifier">P</span></code>
8980                  </p>
8981                </td>
8982<td>
8983                  <p>
8984                    <a class="link" href="reference.html#parser">parser</a>
8985                  </p>
8986                </td>
8987</tr></tbody>
8988</table></div>
8989</div>
8990<br class="table-break"><h2>
8991<a name="metaparse.reference.alphabetical.look_ahead.h1"></a>
8992          <span class="phrase"><a name="metaparse.reference.alphabetical.look_ahead.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead.description">Description</a>
8993        </h2>
8994<p>
8995          Parses the input using parser <code class="computeroutput"><span class="identifier">P</span></code>.
8996          When <code class="computeroutput"><span class="identifier">P</span></code> returns an error,
8997          <code class="computeroutput"><span class="identifier">look_ahead</span></code> returns the
8998          error. When <code class="computeroutput"><span class="identifier">P</span></code> returns a
8999          result, <code class="computeroutput"><span class="identifier">look_ahead</span></code> returns
9000          the result without consuming anything from the input string.
9001        </p>
9002<h2>
9003<a name="metaparse.reference.alphabetical.look_ahead.h2"></a>
9004          <span class="phrase"><a name="metaparse.reference.alphabetical.look_ahead.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead.header">Header</a>
9005        </h2>
9006<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">metaparse</span><span class="special">/</span><span class="identifier">look_ahead</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9007</pre>
9008<h2>
9009<a name="metaparse.reference.alphabetical.look_ahead.h3"></a>
9010          <span class="phrase"><a name="metaparse.reference.alphabetical.look_ahead.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead.expression_semantics">Expression
9011          semantics</a>
9012        </h2>
9013<p>
9014          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
9015        </p>
9016<pre class="programlisting"><span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
9017</pre>
9018<p>
9019          is equivalent to
9020        </p>
9021<pre class="programlisting"><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
9022</pre>
9023<p>
9024          when <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> succeeds. It is
9025        </p>
9026<pre class="programlisting"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
9027</pre>
9028<p>
9029          otherwise.
9030        </p>
9031<h2>
9032<a name="metaparse.reference.alphabetical.look_ahead.h4"></a>
9033          <span class="phrase"><a name="metaparse.reference.alphabetical.look_ahead.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.look_ahead.example">Example</a>
9034        </h2>
9035<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">metaparse</span><span class="special">/</span><span class="identifier">look_ahead</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9036<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9037<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9038<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9039<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9040<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9041<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9042
9043<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
9044
9045<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9046
9047<span class="keyword">static_assert</span><span class="special">(</span>
9048  <span class="identifier">get_result</span><span class="special">&lt;</span>
9049    <span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9050  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
9051  <span class="string">"it should return the same result as the wrapped parser"</span>
9052<span class="special">);</span>
9053
9054<span class="keyword">static_assert</span><span class="special">(</span>
9055  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
9056    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span>
9057    <span class="identifier">get_remaining</span><span class="special">&lt;</span>
9058      <span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9059    <span class="special">&gt;::</span><span class="identifier">type</span>
9060  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9061  <span class="string">"it should not consume any input"</span>
9062<span class="special">);</span>
9063
9064<span class="keyword">static_assert</span><span class="special">(</span>
9065  <span class="identifier">is_error</span><span class="special">&lt;</span>
9066    <span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"six"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9067  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9068  <span class="string">"it should fail when the wrapped parser fails"</span>
9069<span class="special">);</span>
9070</pre>
9071</div>
9072<div class="section">
9073<div class="titlepage"><div><div><h4 class="title">
9074<a name="metaparse.reference.alphabetical.template_metafunction_class"></a><a name="metafunction_class"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.template_metafunction_class" title="Template metafunction class">Template
9075        metafunction class</a>
9076</h4></div></div></div>
9077<p>
9078          A <span class="emphasis"><em>template metafunction class</em></span> is a type with a public
9079          nested <a class="link" href="reference.html#metafunction">template metafunction</a> called
9080          <code class="computeroutput"><span class="identifier">apply</span></code>. Since it is a type,
9081          it can be passed to template metafunctions as arguments and metafunctions
9082          can return it as their result. This makes it possible to implement <span class="emphasis"><em>higher-order
9083          template metafunctions</em></span>, which are template metafunctions taking
9084          template metafunctions as arguments or returning template metafunctions
9085          as their result.
9086        </p>
9087<p>
9088          For example this is the identity template metafunction class:
9089        </p>
9090<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">identity</span>
9091<span class="special">{</span>
9092  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
9093  <span class="keyword">struct</span> <span class="identifier">apply</span>
9094  <span class="special">{</span>
9095    <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">T</span><span class="special">;</span>
9096  <span class="special">};</span>
9097  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">identity</span><span class="special">;</span>
9098<span class="special">};</span>
9099</pre>
9100<p>
9101          This metafunction class is called <code class="computeroutput"><span class="identifier">identity</span></code>.
9102          It takes one argument, <code class="computeroutput"><span class="identifier">T</span></code>.
9103          The result of calling this metafunction class is its argument, <code class="computeroutput"><span class="identifier">T</span></code>. Note that the <code class="computeroutput"><span class="identifier">identity</span></code>
9104          metafunction class is also a <a class="link" href="reference.html#metaprogramming_value">template
9105          metaprogramming value</a>, so it can be an argument or the result of
9106          a template metafunction.
9107        </p>
9108<p>
9109          To call this metafunction, one has to call the nested template metafunction.
9110          For example:
9111        </p>
9112<pre class="programlisting"><span class="identifier">identity</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
9113</pre>
9114<p>
9115          The above example calls the metafunction class <code class="computeroutput"><span class="identifier">identity</span></code>
9116          with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span></code> as its argument.
9117        </p>
9118</div>
9119<div class="section">
9120<div class="titlepage"><div><div><h4 class="title">
9121<a name="metaparse.reference.alphabetical.template_metafunction"></a><a name="metafunction"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.template_metafunction" title="Template metafunction">Template
9122        metafunction</a>
9123</h4></div></div></div>
9124<p>
9125          A <span class="emphasis"><em>template metafunction</em></span> represents a function over
9126          types that is evaluated at compile-time. It is implemented by a template
9127          class.
9128        </p>
9129<p>
9130          The template arguments of that class are expected to be types (<code class="computeroutput"><span class="keyword">class</span></code> or <code class="computeroutput"><span class="keyword">typename</span></code>
9131          template arguments). They represent the arguments of the metafunction.
9132        </p>
9133<p>
9134          Instances of the template class are expected to have a public nested type
9135          called <code class="computeroutput"><span class="identifier">type</span></code>. This type
9136          is the type the metafunction returns.
9137        </p>
9138<p>
9139          Template metafunction are expected to be called with <a class="link" href="reference.html#metaprogramming_value">template
9140          metaprogramming values</a> as arguments only.
9141        </p>
9142<p>
9143          Template metafunctions are expected to return template metaprogramming
9144          values.
9145        </p>
9146<p>
9147          For example this is the identity template metafunction:
9148        </p>
9149<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
9150<span class="keyword">struct</span> <span class="identifier">identity</span>
9151<span class="special">{</span>
9152  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">T</span><span class="special">;</span>
9153<span class="special">};</span>
9154</pre>
9155<p>
9156          This metafunction is called <code class="computeroutput"><span class="identifier">identity</span></code>.
9157          It takes one argument, <code class="computeroutput"><span class="identifier">T</span></code>.
9158          The result of calling this metafunction is its argument, <code class="computeroutput"><span class="identifier">T</span></code>.
9159        </p>
9160<p>
9161          To call this metafunction, one has to instantiate the template class. The
9162          template arguments it is instantiated with are the arguments the metafunction
9163          is called with. For example:
9164        </p>
9165<pre class="programlisting"><span class="identifier">identity</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
9166</pre>
9167<p>
9168          The above example calls the metafunction <code class="computeroutput"><span class="identifier">identity</span></code>
9169          with <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span></code> as its argument.
9170        </p>
9171</div>
9172<div class="section">
9173<div class="titlepage"><div><div><h4 class="title">
9174<a name="metaparse.reference.alphabetical.template_metaprogramming_value"></a><a name="metaprogramming_value"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.template_metaprogramming_value" title="Template metaprogramming value">Template
9175        metaprogramming value</a>
9176</h4></div></div></div>
9177<p>
9178          A <span class="emphasis"><em>template metaprogramming value</em></span> is a <a class="link" href="reference.html#nullary_metafunction">nullary
9179          template metafunction</a> returning itself. For example:
9180        </p>
9181<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">void_</span>
9182<span class="special">{</span>
9183  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">void_</span><span class="special">;</span>
9184<span class="special">};</span>
9185</pre>
9186<p>
9187          This template metaprogramming value is called <code class="computeroutput"><span class="identifier">void_</span></code>.
9188          It is a nullary metafunction returning itself as its result. Because of
9189          this, it can be treated as a nullary metafunction and evaluated any number
9190          of times. For example <code class="computeroutput"><span class="identifier">void_</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">type</span></code>
9191          is still <code class="computeroutput"><span class="identifier">void_</span></code>.
9192        </p>
9193</div>
9194<div class="section">
9195<div class="titlepage"><div><div><h4 class="title">
9196<a name="metaparse.reference.alphabetical.middle_of"></a><a name="middle_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of" title="middle_of">middle_of</a>
9197</h4></div></div></div>
9198<h2>
9199<a name="metaparse.reference.alphabetical.middle_of.h0"></a>
9200          <span class="phrase"><a name="metaparse.reference.alphabetical.middle_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of.synopsis">Synopsis</a>
9201        </h2>
9202<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P1</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">P2</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">P3</span><span class="special">&gt;</span>
9203<span class="keyword">struct</span> <span class="identifier">middle_of</span><span class="special">;</span>
9204</pre>
9205<p>
9206          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
9207        </p>
9208<div class="table">
9209<a name="metaparse.reference.alphabetical.middle_of.arguments"></a><p class="title"><b>Table 24.59. Arguments</b></p>
9210<div class="table-contents"><table class="table" summary="Arguments">
9211<colgroup>
9212<col>
9213<col>
9214</colgroup>
9215<thead><tr>
9216<th>
9217                  <p>
9218                    Name
9219                  </p>
9220                </th>
9221<th>
9222                  <p>
9223                    Type
9224                  </p>
9225                </th>
9226</tr></thead>
9227<tbody>
9228<tr>
9229<td>
9230                  <p>
9231                    <code class="computeroutput"><span class="identifier">P1</span></code>
9232                  </p>
9233                </td>
9234<td>
9235                  <p>
9236                    <a class="link" href="reference.html#parser">parser</a>
9237                  </p>
9238                </td>
9239</tr>
9240<tr>
9241<td>
9242                  <p>
9243                    <code class="computeroutput"><span class="identifier">P2</span></code>
9244                  </p>
9245                </td>
9246<td>
9247                  <p>
9248                    <a class="link" href="reference.html#parser">parser</a>
9249                  </p>
9250                </td>
9251</tr>
9252<tr>
9253<td>
9254                  <p>
9255                    <code class="computeroutput"><span class="identifier">P3</span></code>
9256                  </p>
9257                </td>
9258<td>
9259                  <p>
9260                    <a class="link" href="reference.html#parser">parser</a>
9261                  </p>
9262                </td>
9263</tr>
9264</tbody>
9265</table></div>
9266</div>
9267<br class="table-break"><h2>
9268<a name="metaparse.reference.alphabetical.middle_of.h1"></a>
9269          <span class="phrase"><a name="metaparse.reference.alphabetical.middle_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of.description">Description</a>
9270        </h2>
9271<p>
9272          <code class="computeroutput"><span class="identifier">middle_of</span></code> applies <code class="computeroutput"><span class="identifier">P1</span></code>, <code class="computeroutput"><span class="identifier">P2</span></code>
9273          and <code class="computeroutput"><span class="identifier">P3</span></code> in sequence. It
9274          accepts an input when all of these three parsers accept it. The result
9275          of parsing is the result of <code class="computeroutput"><span class="identifier">P2</span></code>.
9276        </p>
9277<h2>
9278<a name="metaparse.reference.alphabetical.middle_of.h2"></a>
9279          <span class="phrase"><a name="metaparse.reference.alphabetical.middle_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of.header">Header</a>
9280        </h2>
9281<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">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9282</pre>
9283<h2>
9284<a name="metaparse.reference.alphabetical.middle_of.h3"></a>
9285          <span class="phrase"><a name="metaparse.reference.alphabetical.middle_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of.expression_semantics">Expression
9286          semantics</a>
9287        </h2>
9288<p>
9289          For any <code class="computeroutput"><span class="identifier">p1</span></code>, <code class="computeroutput"><span class="identifier">p2</span></code> and <code class="computeroutput"><span class="identifier">p3</span></code>
9290          parsers
9291        </p>
9292<pre class="programlisting"><span class="identifier">middle_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">p3</span><span class="special">&gt;</span>
9293</pre>
9294<p>
9295          is equivalent to
9296        </p>
9297<pre class="programlisting"><span class="identifier">nth_of</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span> <span class="identifier">p1</span><span class="special">,</span> <span class="identifier">p2</span><span class="special">,</span> <span class="identifier">p3</span><span class="special">&gt;</span>
9298</pre>
9299<h2>
9300<a name="metaparse.reference.alphabetical.middle_of.h4"></a>
9301          <span class="phrase"><a name="metaparse.reference.alphabetical.middle_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.middle_of.example">Example</a>
9302        </h2>
9303<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">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9304<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9305<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9306<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9307<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9308<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9309<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9310<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9311
9312<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9313
9314<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
9315<span class="keyword">using</span> <span class="identifier">left_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'('</span><span class="special">&gt;&gt;;</span>
9316<span class="keyword">using</span> <span class="identifier">right_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">')'</span><span class="special">&gt;&gt;;</span>
9317
9318<span class="keyword">using</span> <span class="identifier">int_in_parens</span> <span class="special">=</span> <span class="identifier">middle_of</span><span class="special">&lt;</span><span class="identifier">left_paren_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">right_paren_token</span><span class="special">&gt;;</span>
9319
9320<span class="keyword">static_assert</span><span class="special">(</span>
9321  <span class="identifier">get_result</span><span class="special">&lt;</span>
9322    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13)"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9323  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
9324  <span class="string">"it should return the result of the middle parser"</span>
9325<span class="special">);</span>
9326
9327<span class="keyword">static_assert</span><span class="special">(</span>
9328  <span class="identifier">is_error</span><span class="special">&lt;</span>
9329    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9330  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9331  <span class="string">"it should reject the input when there are no parens"</span>
9332<span class="special">);</span>
9333
9334<span class="keyword">static_assert</span><span class="special">(</span>
9335  <span class="identifier">is_error</span><span class="special">&lt;</span>
9336    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9337  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9338  <span class="string">"it should reject the input when there is no closing paren"</span>
9339<span class="special">);</span>
9340</pre>
9341</div>
9342<div class="section">
9343<div class="titlepage"><div><div><h4 class="title">
9344<a name="metaparse.reference.alphabetical.next_char"></a><a name="next_char"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char" title="next_char">next_char</a>
9345</h4></div></div></div>
9346<h2>
9347<a name="metaparse.reference.alphabetical.next_char.h0"></a>
9348          <span class="phrase"><a name="metaparse.reference.alphabetical.next_char.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char.synopsis">Synopsis</a>
9349        </h2>
9350<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Ch</span><span class="special">&gt;</span>
9351<span class="keyword">struct</span> <span class="identifier">next_char</span><span class="special">;</span>
9352</pre>
9353<p>
9354          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
9355        </p>
9356<div class="table">
9357<a name="metaparse.reference.alphabetical.next_char.arguments"></a><p class="title"><b>Table 24.60. Arguments</b></p>
9358<div class="table-contents"><table class="table" summary="Arguments">
9359<colgroup>
9360<col>
9361<col>
9362</colgroup>
9363<thead><tr>
9364<th>
9365                  <p>
9366                    Name
9367                  </p>
9368                </th>
9369<th>
9370                  <p>
9371                    Type
9372                  </p>
9373                </th>
9374</tr></thead>
9375<tbody>
9376<tr>
9377<td>
9378                  <p>
9379                    <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
9380                  </p>
9381                </td>
9382<td>
9383                  <p>
9384                    <a class="link" href="reference.html#source_position">source position</a>
9385                  </p>
9386                </td>
9387</tr>
9388<tr>
9389<td>
9390                  <p>
9391                    <code class="computeroutput"><span class="identifier">Ch</span></code>
9392                  </p>
9393                </td>
9394<td>
9395                  <p>
9396                    <a class="link" href="reference.html#boxed_value">boxed</a> character value. The
9397                    character <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
9398                    points to in the input.
9399                  </p>
9400                </td>
9401</tr>
9402</tbody>
9403</table></div>
9404</div>
9405<br class="table-break"><h2>
9406<a name="metaparse.reference.alphabetical.next_char.h1"></a>
9407          <span class="phrase"><a name="metaparse.reference.alphabetical.next_char.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char.description">Description</a>
9408        </h2>
9409<p>
9410          Returns a new source position, pointing to the next character of the same
9411          line.
9412        </p>
9413<h2>
9414<a name="metaparse.reference.alphabetical.next_char.h2"></a>
9415          <span class="phrase"><a name="metaparse.reference.alphabetical.next_char.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char.header">Header</a>
9416        </h2>
9417<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">metaparse</span><span class="special">/</span><span class="identifier">next_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9418</pre>
9419<h2>
9420<a name="metaparse.reference.alphabetical.next_char.h3"></a>
9421          <span class="phrase"><a name="metaparse.reference.alphabetical.next_char.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char.expression_semantics">Expression
9422          semantics</a>
9423        </h2>
9424<p>
9425          For any <code class="computeroutput"><span class="identifier">s</span></code> source position
9426          and <code class="computeroutput"><span class="identifier">c</span></code> wrapped character
9427          the following are equivalent
9428        </p>
9429<pre class="programlisting"><span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">next_char</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;</span>
9430
9431<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;&gt;</span>
9432
9433<span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">next_char</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;</span>
9434
9435<span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;</span>
9436
9437<span class="identifier">get_prev_char</span><span class="special">&lt;</span><span class="identifier">next_char</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
9438
9439<span class="identifier">c</span>
9440</pre>
9441<h2>
9442<a name="metaparse.reference.alphabetical.next_char.h4"></a>
9443          <span class="phrase"><a name="metaparse.reference.alphabetical.next_char.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_char.example">Example</a>
9444        </h2>
9445<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">metaparse</span><span class="special">/</span><span class="identifier">next_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9446<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9447<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_col</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9448<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9449<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_prev_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9450
9451<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
9452
9453<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9454
9455<span class="keyword">struct</span> <span class="identifier">returns_source_position</span>
9456<span class="special">{</span>
9457  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
9458    <span class="identifier">source_position</span><span class="special">&lt;</span>
9459      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9460      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9461      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9462    <span class="special">&gt;;</span>
9463<span class="special">};</span>
9464
9465<span class="keyword">struct</span> <span class="identifier">returns_char</span>
9466<span class="special">{</span>
9467  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;;</span>
9468<span class="special">};</span>
9469
9470<span class="keyword">static_assert</span><span class="special">(</span>
9471  <span class="identifier">get_col</span><span class="special">&lt;</span>
9472    <span class="identifier">next_char</span><span class="special">&lt;</span>
9473      <span class="identifier">source_position</span><span class="special">&lt;</span>
9474        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9475        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9476        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9477      <span class="special">&gt;,</span>
9478      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;</span>
9479    <span class="special">&gt;</span>
9480  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">14</span><span class="special">,</span>
9481  <span class="string">"it should increase the column component of the source position"</span>
9482<span class="special">);</span>
9483
9484<span class="keyword">static_assert</span><span class="special">(</span>
9485  <span class="identifier">get_line</span><span class="special">&lt;</span>
9486    <span class="identifier">next_char</span><span class="special">&lt;</span>
9487      <span class="identifier">source_position</span><span class="special">&lt;</span>
9488        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9489        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9490        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9491      <span class="special">&gt;,</span>
9492      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;</span>
9493    <span class="special">&gt;</span>
9494  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">11</span><span class="special">,</span>
9495  <span class="string">"it should not increase the line component of the source position"</span>
9496<span class="special">);</span>
9497
9498<span class="keyword">static_assert</span><span class="special">(</span>
9499  <span class="identifier">get_prev_char</span><span class="special">&lt;</span>
9500    <span class="identifier">next_char</span><span class="special">&lt;</span>
9501      <span class="identifier">source_position</span><span class="special">&lt;</span>
9502        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9503        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9504        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9505      <span class="special">&gt;,</span>
9506      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">&gt;</span>
9507    <span class="special">&gt;</span>
9508  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">,</span>
9509  <span class="string">"it should update the prev char component of the source position"</span>
9510<span class="special">);</span>
9511
9512<span class="keyword">static_assert</span><span class="special">(</span>
9513  <span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">next_char</span><span class="special">&lt;</span><span class="identifier">returns_source_position</span><span class="special">,</span> <span class="identifier">returns_char</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">14</span><span class="special">,</span>
9514  <span class="string">"it should support lazy evaluation"</span>
9515<span class="special">);</span>
9516</pre>
9517</div>
9518<div class="section">
9519<div class="titlepage"><div><div><h4 class="title">
9520<a name="metaparse.reference.alphabetical.next_line"></a><a name="next_line"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line" title="next_line">next_line</a>
9521</h4></div></div></div>
9522<h2>
9523<a name="metaparse.reference.alphabetical.next_line.h0"></a>
9524          <span class="phrase"><a name="metaparse.reference.alphabetical.next_line.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line.synopsis">Synopsis</a>
9525        </h2>
9526<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Ch</span><span class="special">&gt;</span>
9527<span class="keyword">struct</span> <span class="identifier">next_line</span><span class="special">;</span>
9528</pre>
9529<p>
9530          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
9531        </p>
9532<div class="table">
9533<a name="metaparse.reference.alphabetical.next_line.arguments"></a><p class="title"><b>Table 24.61. Arguments</b></p>
9534<div class="table-contents"><table class="table" summary="Arguments">
9535<colgroup>
9536<col>
9537<col>
9538</colgroup>
9539<thead><tr>
9540<th>
9541                  <p>
9542                    Name
9543                  </p>
9544                </th>
9545<th>
9546                  <p>
9547                    Type
9548                  </p>
9549                </th>
9550</tr></thead>
9551<tbody>
9552<tr>
9553<td>
9554                  <p>
9555                    <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
9556                  </p>
9557                </td>
9558<td>
9559                  <p>
9560                    <a class="link" href="reference.html#source_position">source position</a>
9561                  </p>
9562                </td>
9563</tr>
9564<tr>
9565<td>
9566                  <p>
9567                    <code class="computeroutput"><span class="identifier">Ch</span></code>
9568                  </p>
9569                </td>
9570<td>
9571                  <p>
9572                    <a class="link" href="reference.html#boxed_value">boxed</a> character value. The
9573                    character <code class="computeroutput"><span class="identifier">SourcePosition</span></code>
9574                    points to in the input.
9575                  </p>
9576                </td>
9577</tr>
9578</tbody>
9579</table></div>
9580</div>
9581<br class="table-break"><h2>
9582<a name="metaparse.reference.alphabetical.next_line.h1"></a>
9583          <span class="phrase"><a name="metaparse.reference.alphabetical.next_line.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line.description">Description</a>
9584        </h2>
9585<p>
9586          Returns a new source position, pointing to the beginning of the next line.
9587        </p>
9588<h2>
9589<a name="metaparse.reference.alphabetical.next_line.h2"></a>
9590          <span class="phrase"><a name="metaparse.reference.alphabetical.next_line.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line.header">Header</a>
9591        </h2>
9592<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">metaparse</span><span class="special">/</span><span class="identifier">next_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9593</pre>
9594<h2>
9595<a name="metaparse.reference.alphabetical.next_line.h3"></a>
9596          <span class="phrase"><a name="metaparse.reference.alphabetical.next_line.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line.expression_semantics">Expression
9597          semantics</a>
9598        </h2>
9599<p>
9600          For any <code class="computeroutput"><span class="identifier">s</span></code> source position
9601          and <code class="computeroutput"><span class="identifier">c</span></code> wrapped character
9602          the following are equivalent
9603        </p>
9604<pre class="programlisting"><span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">next_line</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
9605
9606<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;</span>
9607
9608<span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">next_line</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;</span>
9609
9610<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;&gt;</span>
9611
9612<span class="identifier">get_prev_char</span><span class="special">&lt;</span><span class="identifier">next_line</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
9613
9614<span class="identifier">c</span>
9615</pre>
9616<h2>
9617<a name="metaparse.reference.alphabetical.next_line.h4"></a>
9618          <span class="phrase"><a name="metaparse.reference.alphabetical.next_line.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.next_line.example">Example</a>
9619        </h2>
9620<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">metaparse</span><span class="special">/</span><span class="identifier">next_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9621<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9622<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_col</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9623<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_line</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9624<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_prev_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9625
9626<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
9627
9628<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9629
9630<span class="keyword">struct</span> <span class="identifier">returns_source_position</span>
9631<span class="special">{</span>
9632  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span>
9633    <span class="identifier">source_position</span><span class="special">&lt;</span>
9634      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9635      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9636      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9637    <span class="special">&gt;;</span>
9638<span class="special">};</span>
9639
9640<span class="keyword">struct</span> <span class="identifier">returns_char</span>
9641<span class="special">{</span>
9642  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">&gt;;</span>
9643<span class="special">};</span>
9644
9645<span class="keyword">static_assert</span><span class="special">(</span>
9646  <span class="identifier">get_col</span><span class="special">&lt;</span>
9647    <span class="identifier">next_line</span><span class="special">&lt;</span>
9648      <span class="identifier">source_position</span><span class="special">&lt;</span>
9649        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9650        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9651        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9652      <span class="special">&gt;,</span>
9653      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">&gt;</span>
9654    <span class="special">&gt;</span>
9655  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1</span><span class="special">,</span>
9656  <span class="string">"it should set the column to 1"</span>
9657<span class="special">);</span>
9658
9659<span class="keyword">static_assert</span><span class="special">(</span>
9660  <span class="identifier">get_line</span><span class="special">&lt;</span>
9661    <span class="identifier">next_line</span><span class="special">&lt;</span>
9662      <span class="identifier">source_position</span><span class="special">&lt;</span>
9663        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9664        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9665        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9666      <span class="special">&gt;,</span>
9667      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">&gt;</span>
9668    <span class="special">&gt;</span>
9669  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">12</span><span class="special">,</span>
9670  <span class="string">"it should increase the line component of the source position"</span>
9671<span class="special">);</span>
9672
9673<span class="keyword">static_assert</span><span class="special">(</span>
9674  <span class="identifier">get_prev_char</span><span class="special">&lt;</span>
9675    <span class="identifier">next_line</span><span class="special">&lt;</span>
9676      <span class="identifier">source_position</span><span class="special">&lt;</span>
9677        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span>
9678        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span>
9679        <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">&gt;</span>
9680      <span class="special">&gt;,</span>
9681      <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">&gt;</span>
9682    <span class="special">&gt;</span>
9683  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'\n'</span><span class="special">,</span>
9684  <span class="string">"it should update the prev char component of the source position"</span>
9685<span class="special">);</span>
9686
9687<span class="keyword">static_assert</span><span class="special">(</span>
9688  <span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">next_line</span><span class="special">&lt;</span><span class="identifier">returns_source_position</span><span class="special">,</span> <span class="identifier">returns_char</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1</span><span class="special">,</span>
9689  <span class="string">"it should support lazy evaluation"</span>
9690<span class="special">);</span>
9691</pre>
9692</div>
9693<div class="section">
9694<div class="titlepage"><div><div><h4 class="title">
9695<a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found"></a><a name="none_of_the_expected_cases_found"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.none_of_the_expected_cases_found" title="none_of_the_expected_cases_found">none_of_the_expected_cases_found</a>
9696</h4></div></div></div>
9697<h2>
9698<a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.h0"></a>
9699          <span class="phrase"><a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.none_of_the_expected_cases_found.synopsis">Synopsis</a>
9700        </h2>
9701<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
9702<span class="special">{</span>
9703  <span class="keyword">struct</span> <span class="identifier">none_of_the_expected_cases_found</span><span class="special">;</span>
9704<span class="special">}</span>
9705</pre>
9706<p>
9707          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
9708        </p>
9709<h2>
9710<a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.h1"></a>
9711          <span class="phrase"><a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.none_of_the_expected_cases_found.description">Description</a>
9712        </h2>
9713<p>
9714          Class representing the error that none of a list of parsers could parse
9715          the input.
9716        </p>
9717<h2>
9718<a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.h2"></a>
9719          <span class="phrase"><a name="metaparse.reference.alphabetical.none_of_the_expected_cases_found.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.none_of_the_expected_cases_found.header">Header</a>
9720        </h2>
9721<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">none_of_the_expected_cases_found</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9722</pre>
9723</div>
9724<div class="section">
9725<div class="titlepage"><div><div><h4 class="title">
9726<a name="metaparse.reference.alphabetical.nth_of_c"></a><a name="nth_of_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c" title="nth_of_c">nth_of_c</a>
9727</h4></div></div></div>
9728<h2>
9729<a name="metaparse.reference.alphabetical.nth_of_c.h0"></a>
9730          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c.synopsis">Synopsis</a>
9731        </h2>
9732<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">N</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
9733<span class="keyword">struct</span> <span class="identifier">nth_of_c</span><span class="special">;</span>
9734</pre>
9735<p>
9736          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
9737        </p>
9738<div class="table">
9739<a name="metaparse.reference.alphabetical.nth_of_c.arguments"></a><p class="title"><b>Table 24.62. Arguments</b></p>
9740<div class="table-contents"><table class="table" summary="Arguments">
9741<colgroup>
9742<col>
9743<col>
9744</colgroup>
9745<thead><tr>
9746<th>
9747                  <p>
9748                    Name
9749                  </p>
9750                </th>
9751<th>
9752                  <p>
9753                    Type
9754                  </p>
9755                </th>
9756</tr></thead>
9757<tbody>
9758<tr>
9759<td>
9760                  <p>
9761                    <code class="computeroutput"><span class="identifier">N</span></code>
9762                  </p>
9763                </td>
9764<td>
9765                  <p>
9766                    <code class="computeroutput"><span class="keyword">int</span></code> value in the
9767                    range <code class="computeroutput"><span class="special">[</span><span class="number">0.</span><span class="special">.</span><span class="keyword">sizeof</span><span class="special">...(</span><span class="identifier">Ps</span><span class="special">)]</span></code>
9768                  </p>
9769                </td>
9770</tr>
9771<tr>
9772<td>
9773                  <p>
9774                    <code class="computeroutput"><span class="identifier">Ps</span></code>
9775                  </p>
9776                </td>
9777<td>
9778                  <p>
9779                    <a class="link" href="reference.html#parser">parser</a>s
9780                  </p>
9781                </td>
9782</tr>
9783</tbody>
9784</table></div>
9785</div>
9786<br class="table-break"><h2>
9787<a name="metaparse.reference.alphabetical.nth_of_c.h1"></a>
9788          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c.description">Description</a>
9789        </h2>
9790<p>
9791          <code class="computeroutput"><span class="identifier">nth_of_c</span></code> applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
9792          parsers in sequence. It accepts an input when all of these parsers accept
9793          it. The result of parsing is the result of the <code class="computeroutput"><span class="identifier">N</span></code>.
9794          parser.
9795        </p>
9796<p>
9797          On compilers, which are not C++11-compliant, the maximum number of parsers
9798          <code class="computeroutput"><span class="identifier">nth_of_c</span></code> accepts can be
9799          specified with the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span></code>
9800          macro. Its default value is <code class="computeroutput"><span class="number">5</span></code>.
9801        </p>
9802<h2>
9803<a name="metaparse.reference.alphabetical.nth_of_c.h2"></a>
9804          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c.header">Header</a>
9805        </h2>
9806<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">metaparse</span><span class="special">/</span><span class="identifier">nth_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9807</pre>
9808<h2>
9809<a name="metaparse.reference.alphabetical.nth_of_c.h3"></a>
9810          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c.expression_semantics">Expression
9811          semantics</a>
9812        </h2>
9813<p>
9814          For any <code class="computeroutput"><span class="identifier">p0</span></code>, ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers and <code class="computeroutput"><span class="identifier">k</span></code>
9815          integer value, where <code class="computeroutput"><span class="number">0</span> <span class="special">&lt;=</span>
9816          <span class="identifier">k</span> <span class="special">&lt;</span>
9817          <span class="identifier">n</span></code> the following are equivalent
9818        </p>
9819<pre class="programlisting"><span class="identifier">nth_of_c</span><span class="special">&lt;</span><span class="identifier">k</span><span class="special">,</span> <span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
9820
9821<span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">k</span><span class="special">&gt;&gt;</span>
9822</pre>
9823<h2>
9824<a name="metaparse.reference.alphabetical.nth_of_c.h4"></a>
9825          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of_c.example">Example</a>
9826        </h2>
9827<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">metaparse</span><span class="special">/</span><span class="identifier">nth_of_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9828<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9829<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9830<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9831<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9832<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9833<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9834<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9835
9836<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9837
9838<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
9839<span class="keyword">using</span> <span class="identifier">left_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'('</span><span class="special">&gt;&gt;;</span>
9840<span class="keyword">using</span> <span class="identifier">right_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">')'</span><span class="special">&gt;&gt;;</span>
9841
9842<span class="keyword">using</span> <span class="identifier">int_in_parens</span> <span class="special">=</span>
9843  <span class="identifier">nth_of_c</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span> <span class="identifier">left_paren_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">right_paren_token</span><span class="special">&gt;;</span>
9844
9845<span class="keyword">static_assert</span><span class="special">(</span>
9846  <span class="identifier">get_result</span><span class="special">&lt;</span>
9847    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13)"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9848  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
9849  <span class="string">"it should return the result of the second parser"</span>
9850<span class="special">);</span>
9851
9852<span class="keyword">static_assert</span><span class="special">(</span>
9853  <span class="identifier">is_error</span><span class="special">&lt;</span>
9854    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9855  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9856  <span class="string">"it should reject the input when there are no parens"</span>
9857<span class="special">);</span>
9858
9859<span class="keyword">static_assert</span><span class="special">(</span>
9860  <span class="identifier">is_error</span><span class="special">&lt;</span>
9861    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9862  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
9863  <span class="string">"it should reject the input when there is no closing paren"</span>
9864<span class="special">);</span>
9865</pre>
9866</div>
9867<div class="section">
9868<div class="titlepage"><div><div><h4 class="title">
9869<a name="metaparse.reference.alphabetical.nth_of"></a><a name="nth_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of" title="nth_of">nth_of</a>
9870</h4></div></div></div>
9871<h2>
9872<a name="metaparse.reference.alphabetical.nth_of.h0"></a>
9873          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of.synopsis">Synopsis</a>
9874        </h2>
9875<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">N</span><span class="special">,</span> <span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
9876<span class="keyword">struct</span> <span class="identifier">nth_of</span><span class="special">;</span>
9877</pre>
9878<p>
9879          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
9880        </p>
9881<div class="table">
9882<a name="metaparse.reference.alphabetical.nth_of.arguments"></a><p class="title"><b>Table 24.63. Arguments</b></p>
9883<div class="table-contents"><table class="table" summary="Arguments">
9884<colgroup>
9885<col>
9886<col>
9887</colgroup>
9888<thead><tr>
9889<th>
9890                  <p>
9891                    Name
9892                  </p>
9893                </th>
9894<th>
9895                  <p>
9896                    Type
9897                  </p>
9898                </th>
9899</tr></thead>
9900<tbody>
9901<tr>
9902<td>
9903                  <p>
9904                    <code class="computeroutput"><span class="identifier">N</span></code>
9905                  </p>
9906                </td>
9907<td>
9908                  <p>
9909                    <a class="link" href="reference.html#boxed_value">boxed</a> integer value in the
9910                    range <code class="computeroutput"><span class="special">[</span><span class="number">0.</span><span class="special">.</span><span class="keyword">sizeof</span><span class="special">...(</span><span class="identifier">Ps</span><span class="special">)]</span></code>
9911                  </p>
9912                </td>
9913</tr>
9914<tr>
9915<td>
9916                  <p>
9917                    <code class="computeroutput"><span class="identifier">Ps</span></code>
9918                  </p>
9919                </td>
9920<td>
9921                  <p>
9922                    <a class="link" href="reference.html#parser">parser</a>s
9923                  </p>
9924                </td>
9925</tr>
9926</tbody>
9927</table></div>
9928</div>
9929<br class="table-break"><h2>
9930<a name="metaparse.reference.alphabetical.nth_of.h1"></a>
9931          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of.description">Description</a>
9932        </h2>
9933<p>
9934          <code class="computeroutput"><span class="identifier">nth_of</span></code> applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
9935          parsers in sequence. It accepts an input when all of these parsers accept
9936          it. The result of parsing is the result of the <code class="computeroutput"><span class="identifier">N</span></code>.
9937          parser.
9938        </p>
9939<p>
9940          On compilers, which are not C++11-compliant, the maximum number of parsers
9941          <code class="computeroutput"><span class="identifier">nth_of</span></code> accepts can be specified
9942          with the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span></code>
9943          macro. Its default value is <code class="computeroutput"><span class="number">5</span></code>.
9944        </p>
9945<h2>
9946<a name="metaparse.reference.alphabetical.nth_of.h2"></a>
9947          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of.header">Header</a>
9948        </h2>
9949<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">metaparse</span><span class="special">/</span><span class="identifier">nth_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9950</pre>
9951<h2>
9952<a name="metaparse.reference.alphabetical.nth_of.h3"></a>
9953          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of.expression_semantics">Expression
9954          semantics</a>
9955        </h2>
9956<p>
9957          For any <code class="computeroutput"><span class="identifier">p0</span></code>, ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers and <code class="computeroutput"><span class="identifier">k</span></code>
9958          boxed integer value the following are equivalent
9959        </p>
9960<pre class="programlisting"><span class="identifier">nth_of</span><span class="special">&lt;</span><span class="identifier">k</span><span class="special">,</span> <span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
9961
9962<span class="identifier">nth_of_c</span><span class="special">&lt;</span><span class="identifier">k</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
9963</pre>
9964<h2>
9965<a name="metaparse.reference.alphabetical.nth_of.h4"></a>
9966          <span class="phrase"><a name="metaparse.reference.alphabetical.nth_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.nth_of.example">Example</a>
9967        </h2>
9968<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">metaparse</span><span class="special">/</span><span class="identifier">nth_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9969<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9970<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9971<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9972<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9973<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9974<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9975<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
9976
9977<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
9978
9979<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
9980
9981<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
9982<span class="keyword">using</span> <span class="identifier">left_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'('</span><span class="special">&gt;&gt;;</span>
9983<span class="keyword">using</span> <span class="identifier">right_paren_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">')'</span><span class="special">&gt;&gt;;</span>
9984
9985<span class="keyword">using</span> <span class="identifier">int_in_parens</span> <span class="special">=</span>
9986  <span class="identifier">nth_of</span><span class="special">&lt;</span>
9987    <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;,</span>
9988    <span class="identifier">left_paren_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">right_paren_token</span>
9989  <span class="special">&gt;;</span>
9990
9991<span class="keyword">static_assert</span><span class="special">(</span>
9992  <span class="identifier">get_result</span><span class="special">&lt;</span>
9993    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13)"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
9994  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
9995  <span class="string">"it should return the result of the second parser"</span>
9996<span class="special">);</span>
9997
9998<span class="keyword">static_assert</span><span class="special">(</span>
9999  <span class="identifier">is_error</span><span class="special">&lt;</span>
10000    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10001  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10002  <span class="string">"it should reject the input when there are no parens"</span>
10003<span class="special">);</span>
10004
10005<span class="keyword">static_assert</span><span class="special">(</span>
10006  <span class="identifier">is_error</span><span class="special">&lt;</span>
10007    <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"(13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10008  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10009  <span class="string">"it should reject the input when there is no closing paren"</span>
10010<span class="special">);</span>
10011</pre>
10012</div>
10013<div class="section">
10014<div class="titlepage"><div><div><h4 class="title">
10015<a name="metaparse.reference.alphabetical.nullary_template_metafunction"></a><a name="nullary_metafunction"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.nullary_template_metafunction" title="Nullary template metafunction">Nullary
10016        template metafunction</a>
10017</h4></div></div></div>
10018<p>
10019          A <span class="emphasis"><em>nullary template metafuncion</em></span> is a <a class="link" href="reference.html#metafunction">template
10020          metafunction</a> taking 0 arguments. It is a type with a nested type
10021          called <code class="computeroutput"><span class="identifier">type</span></code>, which is the
10022          return value of the nullary metafunction. For example:
10023        </p>
10024<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">always13</span>
10025<span class="special">{</span>
10026  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;;</span>
10027<span class="special">};</span>
10028</pre>
10029<p>
10030          This metafunction is called <code class="computeroutput"><span class="identifier">always13</span></code>.
10031          It is a nullary metafunction, because it takes no arguments. It always
10032          returns <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span></code>.
10033        </p>
10034<p>
10035          To call this metafunction, one has to access its <code class="computeroutput"><span class="special">::</span><span class="identifier">type</span></code>. For example:
10036        </p>
10037<pre class="programlisting"><span class="identifier">always13</span><span class="special">::</span><span class="identifier">type</span>
10038</pre>
10039<p>
10040          The above example calls the metafunction to get <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;</span></code>.
10041        </p>
10042</div>
10043<div class="section">
10044<div class="titlepage"><div><div><h4 class="title">
10045<a name="metaparse.reference.alphabetical.one_char_except_c"></a><a name="one_char_except_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c" title="one_char_except_c">one_char_except_c</a>
10046</h4></div></div></div>
10047<h2>
10048<a name="metaparse.reference.alphabetical.one_char_except_c.h0"></a>
10049          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c.synopsis">Synopsis</a>
10050        </h2>
10051<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">&gt;</span>
10052<span class="keyword">struct</span> <span class="identifier">one_char_except_c</span><span class="special">;</span>
10053</pre>
10054<p>
10055          This is a <a class="link" href="reference.html#parser">parser</a>.
10056        </p>
10057<div class="table">
10058<a name="metaparse.reference.alphabetical.one_char_except_c.arguments"></a><p class="title"><b>Table 24.64. Arguments</b></p>
10059<div class="table-contents"><table class="table" summary="Arguments">
10060<colgroup>
10061<col>
10062<col>
10063</colgroup>
10064<thead><tr>
10065<th>
10066                  <p>
10067                    Name
10068                  </p>
10069                </th>
10070<th>
10071                  <p>
10072                    Type
10073                  </p>
10074                </th>
10075</tr></thead>
10076<tbody><tr>
10077<td>
10078                  <p>
10079                    <code class="computeroutput"><span class="identifier">Cs</span></code>
10080                  </p>
10081                </td>
10082<td>
10083                  <p>
10084                    character values
10085                  </p>
10086                </td>
10087</tr></tbody>
10088</table></div>
10089</div>
10090<br class="table-break"><h2>
10091<a name="metaparse.reference.alphabetical.one_char_except_c.h1"></a>
10092          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c.description">Description</a>
10093        </h2>
10094<p>
10095          <code class="computeroutput"><span class="identifier">one_char_except_c</span></code> accepts
10096          one character except any of <code class="computeroutput"><span class="identifier">Cs</span></code>.
10097          When the input is empty or begins with one of the non-accepted characters,
10098          <code class="computeroutput"><span class="identifier">one_char_except_c</span></code> rejects
10099          the input. Otherwise it accepts the input and the result of parsing is
10100          the character value.
10101        </p>
10102<p>
10103          On compilers, which are not C++11-compliant, the maximum number of characters
10104          this class can have is the value the macro <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_CHAR_EXCEPT_SIZE</span></code>
10105          expands to. Its default value is 10.
10106        </p>
10107<h2>
10108<a name="metaparse.reference.alphabetical.one_char_except_c.h2"></a>
10109          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c.header">Header</a>
10110        </h2>
10111<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">metaparse</span><span class="special">/</span><span class="identifier">one_char_except_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10112</pre>
10113<h2>
10114<a name="metaparse.reference.alphabetical.one_char_except_c.h3"></a>
10115          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c.expression_semantics">Expression
10116          semantics</a>
10117        </h2>
10118<p>
10119          For any <code class="computeroutput"><span class="identifier">s</span></code> compile-time
10120          string and <code class="computeroutput"><span class="identifier">c1</span></code>, ..., <code class="computeroutput"><span class="identifier">cn</span></code> characters the following are equivalent
10121        </p>
10122<pre class="programlisting"><span class="identifier">one_char_except_c</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
10123
10124<span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">::</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
10125</pre>
10126<p>
10127          when <code class="computeroutput"><span class="identifier">s</span></code> is empty or it begins
10128          with a character other than <code class="computeroutput"><span class="identifier">c1</span></code>,
10129          ..., <code class="computeroutput"><span class="identifier">cn</span></code>. Otherwise <code class="computeroutput"><span class="identifier">one_char_except_c</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">&gt;::</span><span class="identifier">appl</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> returns a parsing error.
10130        </p>
10131<h2>
10132<a name="metaparse.reference.alphabetical.one_char_except_c.h4"></a>
10133          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except_c.example">Example</a>
10134        </h2>
10135<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">metaparse</span><span class="special">/</span><span class="identifier">one_char_except_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10136<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10137<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10138<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10139<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10140<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10141<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10142
10143<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10144<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10145<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10146
10147<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10148
10149<span class="keyword">using</span> <span class="identifier">string_literal_parser</span> <span class="special">=</span>
10150  <span class="identifier">middle_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'"'</span><span class="special">&gt;,</span> <span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">one_char_except_c</span><span class="special">&lt;</span><span class="char">'"'</span><span class="special">&gt;&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'"'</span><span class="special">&gt;&gt;;</span>
10151
10152<span class="keyword">static_assert</span><span class="special">(</span>
10153  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
10154    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
10155      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'h'</span><span class="special">&gt;,</span>
10156      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'e'</span><span class="special">&gt;,</span>
10157      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'l'</span><span class="special">&gt;,</span>
10158      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'l'</span><span class="special">&gt;,</span>
10159      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'o'</span><span class="special">&gt;</span>
10160    <span class="special">&gt;,</span>
10161    <span class="identifier">get_result</span><span class="special">&lt;</span>
10162      <span class="identifier">string_literal_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"\"hello\""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10163    <span class="special">&gt;::</span><span class="identifier">type</span>
10164  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10165  <span class="string">"it should return the content of the string literal"</span>
10166<span class="special">);</span>
10167</pre>
10168</div>
10169<div class="section">
10170<div class="titlepage"><div><div><h4 class="title">
10171<a name="metaparse.reference.alphabetical.one_char_except"></a><a name="one_char_except"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except" title="one_char_except">one_char_except</a>
10172</h4></div></div></div>
10173<h2>
10174<a name="metaparse.reference.alphabetical.one_char_except.h0"></a>
10175          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except.synopsis">Synopsis</a>
10176        </h2>
10177<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">&gt;</span>
10178<span class="keyword">struct</span> <span class="identifier">one_char_except</span><span class="special">;</span>
10179</pre>
10180<p>
10181          This is a <a class="link" href="reference.html#parser">parser</a>.
10182        </p>
10183<div class="table">
10184<a name="metaparse.reference.alphabetical.one_char_except.arguments"></a><p class="title"><b>Table 24.65. Arguments</b></p>
10185<div class="table-contents"><table class="table" summary="Arguments">
10186<colgroup>
10187<col>
10188<col>
10189</colgroup>
10190<thead><tr>
10191<th>
10192                  <p>
10193                    Name
10194                  </p>
10195                </th>
10196<th>
10197                  <p>
10198                    Type
10199                  </p>
10200                </th>
10201</tr></thead>
10202<tbody><tr>
10203<td>
10204                  <p>
10205                    <code class="computeroutput"><span class="identifier">Cs</span></code>
10206                  </p>
10207                </td>
10208<td>
10209                  <p>
10210                    <a class="link" href="reference.html#boxed_value">boxed</a> character values
10211                  </p>
10212                </td>
10213</tr></tbody>
10214</table></div>
10215</div>
10216<br class="table-break"><h2>
10217<a name="metaparse.reference.alphabetical.one_char_except.h1"></a>
10218          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except.description">Description</a>
10219        </h2>
10220<p>
10221          <code class="computeroutput"><span class="identifier">one_char_except</span></code> accepts
10222          one character except any of <code class="computeroutput"><span class="identifier">Cs</span></code>.
10223          When the input is empty or begins with one of the non-accepted characters,
10224          <code class="computeroutput"><span class="identifier">one_char_except</span></code> rejects
10225          the input. Otherwise it accepts the input and the result of parsing is
10226          the character value.
10227        </p>
10228<p>
10229          On compilers, which are not C++11-compliant, the maximum number of characters
10230          this class can have is the value the macro <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_CHAR_EXCEPT_SIZE</span></code>
10231          expands to. Its default value is 10.
10232        </p>
10233<h2>
10234<a name="metaparse.reference.alphabetical.one_char_except.h2"></a>
10235          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except.header">Header</a>
10236        </h2>
10237<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">metaparse</span><span class="special">/</span><span class="identifier">one_char_except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10238</pre>
10239<h2>
10240<a name="metaparse.reference.alphabetical.one_char_except.h3"></a>
10241          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except.expression_semantics">Expression
10242          semantics</a>
10243        </h2>
10244<p>
10245          For any <code class="computeroutput"><span class="identifier">c1</span></code>, ..., <code class="computeroutput"><span class="identifier">cn</span></code> boxed characters the following are
10246          equivalent
10247        </p>
10248<pre class="programlisting"><span class="identifier">one_char_except</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">&gt;</span>
10249
10250<span class="identifier">one_char_except_c</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span>
10251</pre>
10252<h2>
10253<a name="metaparse.reference.alphabetical.one_char_except.h4"></a>
10254          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char_except.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char_except.example">Example</a>
10255        </h2>
10256<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">metaparse</span><span class="special">/</span><span class="identifier">one_char_except</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10257<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10258<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10259<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10260<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10261<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10262<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10263
10264<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10265<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10266<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10267
10268<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
10269
10270<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10271
10272<span class="keyword">using</span> <span class="identifier">string_literal_parser</span> <span class="special">=</span>
10273  <span class="identifier">middle_of</span><span class="special">&lt;</span>
10274    <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'"'</span><span class="special">&gt;,</span>
10275    <span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">one_char_except</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'"'</span><span class="special">&gt;&gt;&gt;,</span>
10276    <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'"'</span><span class="special">&gt;</span>
10277  <span class="special">&gt;;</span>
10278
10279<span class="keyword">static_assert</span><span class="special">(</span>
10280  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
10281    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
10282      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'h'</span><span class="special">&gt;,</span>
10283      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'e'</span><span class="special">&gt;,</span>
10284      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'l'</span><span class="special">&gt;,</span>
10285      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'l'</span><span class="special">&gt;,</span>
10286      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'o'</span><span class="special">&gt;</span>
10287    <span class="special">&gt;,</span>
10288    <span class="identifier">get_result</span><span class="special">&lt;</span>
10289      <span class="identifier">string_literal_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"\"hello\""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10290    <span class="special">&gt;::</span><span class="identifier">type</span>
10291  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10292  <span class="string">"it should return the content of the string literal"</span>
10293<span class="special">);</span>
10294</pre>
10295</div>
10296<div class="section">
10297<div class="titlepage"><div><div><h4 class="title">
10298<a name="metaparse.reference.alphabetical.one_char"></a><a name="one_char"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char" title="one_char">one_char</a>
10299</h4></div></div></div>
10300<h2>
10301<a name="metaparse.reference.alphabetical.one_char.h0"></a>
10302          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char.synopsis">Synopsis</a>
10303        </h2>
10304<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">one_char</span><span class="special">;</span>
10305</pre>
10306<p>
10307          This is a <a class="link" href="reference.html#parser">parser</a>.
10308        </p>
10309<h2>
10310<a name="metaparse.reference.alphabetical.one_char.h1"></a>
10311          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char.description">Description</a>
10312        </h2>
10313<p>
10314          <code class="computeroutput"><span class="identifier">one_char</span></code> accepts one character.
10315          The result of parsing is the accepted character. It fails for empty input.
10316        </p>
10317<h2>
10318<a name="metaparse.reference.alphabetical.one_char.h2"></a>
10319          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char.header">Header</a>
10320        </h2>
10321<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">metaparse</span><span class="special">/</span><span class="identifier">one_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10322</pre>
10323<h2>
10324<a name="metaparse.reference.alphabetical.one_char.h3"></a>
10325          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char.expression_semantics">Expression
10326          semantics</a>
10327        </h2>
10328<p>
10329          For any <code class="computeroutput"><span class="identifier">s</span></code> non-empty compile-time
10330          string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
10331          the following are equivalent
10332        </p>
10333<pre class="programlisting"><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;</span>
10334
10335<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">front</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;</span>
10336
10337<span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;</span>
10338
10339<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">pop_front</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">&gt;</span>
10340</pre>
10341<p>
10342          The value of <code class="computeroutput"><span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;</span></code> depends on the first character
10343          of the sequence and the value of the one parsed before that (which is stored
10344          in the source position). <code class="computeroutput"><span class="identifier">one_char</span></code>
10345          updates the source position's <code class="computeroutput"><span class="identifier">col</span></code>
10346          and <code class="computeroutput"><span class="identifier">line</span></code> values based on
10347          the new line characters. It detects Linux (<code class="computeroutput"><span class="special">\</span><span class="identifier">n</span></code>), Windows (<code class="computeroutput"><span class="special">\</span><span class="identifier">r</span><span class="special">\</span><span class="identifier">n</span></code>)
10348          and Mac (<code class="computeroutput"><span class="special">\</span><span class="identifier">r</span></code>)
10349          line endings.
10350        </p>
10351<p>
10352          <code class="computeroutput"><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span>
10353          <span class="identifier">pos</span><span class="special">&gt;</span></code>
10354          returns an error for every <code class="computeroutput"><span class="identifier">pos</span></code>
10355          source position.
10356        </p>
10357<h2>
10358<a name="metaparse.reference.alphabetical.one_char.h4"></a>
10359          <span class="phrase"><a name="metaparse.reference.alphabetical.one_char.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_char.example">Example</a>
10360        </h2>
10361<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">metaparse</span><span class="special">/</span><span class="identifier">one_char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10362<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10363<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10364<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10365<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10366<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10367
10368<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
10369
10370<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10371
10372<span class="keyword">static_assert</span><span class="special">(</span>
10373  <span class="identifier">get_result</span><span class="special">&lt;</span>
10374    <span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10375  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'f'</span><span class="special">,</span>
10376  <span class="string">"the result of parsing should be the first character of the input"</span>
10377<span class="special">);</span>
10378
10379<span class="keyword">static_assert</span><span class="special">(</span>
10380  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
10381    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"oo"</span><span class="special">),</span>
10382    <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
10383  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10384  <span class="string">"one_char should consume the first character of the input"</span>
10385<span class="special">);</span>
10386
10387<span class="keyword">static_assert</span><span class="special">(</span>
10388  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10389  <span class="string">"it should return an error for empty input"</span>
10390<span class="special">);</span>
10391</pre>
10392</div>
10393<div class="section">
10394<div class="titlepage"><div><div><h4 class="title">
10395<a name="metaparse.reference.alphabetical.one_of_c"></a><a name="one_of_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c" title="one_of_c">one_of_c</a>
10396</h4></div></div></div>
10397<h2>
10398<a name="metaparse.reference.alphabetical.one_of_c.h0"></a>
10399          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c.synopsis">Synopsis</a>
10400        </h2>
10401<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">&gt;</span>
10402<span class="keyword">struct</span> <span class="identifier">one_of_c</span><span class="special">;</span>
10403</pre>
10404<p>
10405          This is a <a class="link" href="reference.html#parser">parser</a>.
10406        </p>
10407<div class="table">
10408<a name="metaparse.reference.alphabetical.one_of_c.arguments"></a><p class="title"><b>Table 24.66. Arguments</b></p>
10409<div class="table-contents"><table class="table" summary="Arguments">
10410<colgroup>
10411<col>
10412<col>
10413</colgroup>
10414<thead><tr>
10415<th>
10416                  <p>
10417                    Name
10418                  </p>
10419                </th>
10420<th>
10421                  <p>
10422                    Type
10423                  </p>
10424                </th>
10425</tr></thead>
10426<tbody><tr>
10427<td>
10428                  <p>
10429                    <code class="computeroutput"><span class="identifier">Cs</span></code>
10430                  </p>
10431                </td>
10432<td>
10433                  <p>
10434                    character values
10435                  </p>
10436                </td>
10437</tr></tbody>
10438</table></div>
10439</div>
10440<br class="table-break"><h2>
10441<a name="metaparse.reference.alphabetical.one_of_c.h1"></a>
10442          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c.description">Description</a>
10443        </h2>
10444<p>
10445          It accepts inputs beginning with any of the <code class="computeroutput"><span class="identifier">Cs</span><span class="special">...</span></code> characters. The result of parsing is
10446          the first character of the input.
10447        </p>
10448<p>
10449          On compilers, which are not C++11-compliant, the maximum number of characters
10450          that can be provided is defined by the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_OF_SIZE</span></code>
10451          macro. Its default value is <code class="computeroutput"><span class="number">20</span></code>.
10452        </p>
10453<h2>
10454<a name="metaparse.reference.alphabetical.one_of_c.h2"></a>
10455          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c.header">Header</a>
10456        </h2>
10457<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">metaparse</span><span class="special">/</span><span class="identifier">one_of_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10458</pre>
10459<h2>
10460<a name="metaparse.reference.alphabetical.one_of_c.h3"></a>
10461          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c.expression_semantics">Expression
10462          semantics</a>
10463        </h2>
10464<p>
10465          For any <code class="computeroutput"><span class="identifier">c1</span></code>, ..., <code class="computeroutput"><span class="identifier">cn</span></code> characters
10466        </p>
10467<pre class="programlisting"><span class="identifier">one_of_c</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">&gt;</span>
10468</pre>
10469<p>
10470          is equivalent to
10471        </p>
10472<pre class="programlisting"><span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="identifier">c1</span><span class="special">&gt;,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="identifier">cn</span><span class="special">&gt;&gt;</span>
10473</pre>
10474<h2>
10475<a name="metaparse.reference.alphabetical.one_of_c.h4"></a>
10476          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of_c.example">Example</a>
10477        </h2>
10478<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">metaparse</span><span class="special">/</span><span class="identifier">one_of_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10479<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10480<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10481<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10482<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10483
10484<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10485
10486<span class="keyword">using</span> <span class="identifier">whitespace</span> <span class="special">=</span> <span class="identifier">one_of_c</span><span class="special">&lt;</span><span class="char">' '</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">,</span> <span class="char">'\r'</span><span class="special">,</span> <span class="char">'\t'</span><span class="special">,</span> <span class="char">'\v'</span><span class="special">&gt;;</span>
10487
10488<span class="keyword">static_assert</span><span class="special">(</span>
10489  <span class="identifier">get_result</span><span class="special">&lt;</span>
10490    <span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">" "</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10491  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">' '</span><span class="special">,</span>
10492  <span class="string">"the result of parsing should be the first character of the input"</span>
10493<span class="special">);</span>
10494
10495<span class="keyword">static_assert</span><span class="special">(</span>
10496  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10497  <span class="string">"it should return an error when the input does not begin with a whitespace"</span>
10498<span class="special">);</span>
10499</pre>
10500</div>
10501<div class="section">
10502<div class="titlepage"><div><div><h4 class="title">
10503<a name="metaparse.reference.alphabetical.one_of"></a><a name="one_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of" title="one_of">one_of</a>
10504</h4></div></div></div>
10505<h2>
10506<a name="metaparse.reference.alphabetical.one_of.h0"></a>
10507          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of.synopsis">Synopsis</a>
10508        </h2>
10509<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
10510<span class="keyword">struct</span> <span class="identifier">one_of</span><span class="special">;</span>
10511</pre>
10512<p>
10513          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
10514        </p>
10515<div class="table">
10516<a name="metaparse.reference.alphabetical.one_of.arguments"></a><p class="title"><b>Table 24.67. Arguments</b></p>
10517<div class="table-contents"><table class="table" summary="Arguments">
10518<colgroup>
10519<col>
10520<col>
10521</colgroup>
10522<thead><tr>
10523<th>
10524                  <p>
10525                    Name
10526                  </p>
10527                </th>
10528<th>
10529                  <p>
10530                    Type
10531                  </p>
10532                </th>
10533</tr></thead>
10534<tbody><tr>
10535<td>
10536                  <p>
10537                    <code class="computeroutput"><span class="identifier">Ps</span></code>
10538                  </p>
10539                </td>
10540<td>
10541                  <p>
10542                    <a class="link" href="reference.html#parser">parser</a>s
10543                  </p>
10544                </td>
10545</tr></tbody>
10546</table></div>
10547</div>
10548<br class="table-break"><h2>
10549<a name="metaparse.reference.alphabetical.one_of.h1"></a>
10550          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of.description">Description</a>
10551        </h2>
10552<p>
10553          It accepts an input when any of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code> parsers accept it. The result of parsing
10554          is the result of applying the first parser that accepts the input. The
10555          parsers are tried in order, therefore in case of ambiguous grammars the
10556          result of parsing depends on the order of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code> parsers.
10557        </p>
10558<p>
10559          On compilers, which are not C++11-compliant, the maximum number of accepted
10560          parsers is defined by the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_OF_SIZE</span></code>
10561          macro. Its default value is <code class="computeroutput"><span class="number">20</span></code>.
10562        </p>
10563<h2>
10564<a name="metaparse.reference.alphabetical.one_of.h2"></a>
10565          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of.header">Header</a>
10566        </h2>
10567<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">metaparse</span><span class="special">/</span><span class="identifier">one_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10568</pre>
10569<h2>
10570<a name="metaparse.reference.alphabetical.one_of.h3"></a>
10571          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of.expression_semantics">Expression
10572          semantics</a>
10573        </h2>
10574<p>
10575          For any <code class="computeroutput"><span class="identifier">p1</span></code>, ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers, <code class="computeroutput"><span class="identifier">s</span></code>
10576          compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code>
10577          source position
10578        </p>
10579<pre class="programlisting"><span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
10580</pre>
10581<p>
10582          is equivalent to
10583        </p>
10584<pre class="programlisting"><span class="identifier">pk</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
10585</pre>
10586<p>
10587          when there is a <code class="computeroutput"><span class="identifier">k</span></code>, that
10588          <code class="computeroutput"><span class="identifier">pi</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
10589          returns an error for every <code class="computeroutput"><span class="identifier">i</span></code>
10590          in the range <code class="computeroutput"><span class="special">[</span><span class="number">1.</span><span class="special">.</span><span class="identifier">k</span><span class="special">)</span></code>
10591          and <code class="computeroutput"><span class="identifier">pk</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span></code>
10592          doesn't return an error.
10593        </p>
10594<p>
10595          The parser combinator returns an error when there is no such <code class="computeroutput"><span class="identifier">k</span></code>.
10596        </p>
10597<h2>
10598<a name="metaparse.reference.alphabetical.one_of.h4"></a>
10599          <span class="phrase"><a name="metaparse.reference.alphabetical.one_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.one_of.example">Example</a>
10600        </h2>
10601<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">metaparse</span><span class="special">/</span><span class="identifier">one_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10602<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10603<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10604<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10605<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10606<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10607
10608<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10609
10610<span class="keyword">using</span> <span class="identifier">whitespace</span> <span class="special">=</span>
10611  <span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">' '</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'\n'</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'\r'</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'\t'</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'\v'</span><span class="special">&gt;&gt;;</span>
10612
10613<span class="keyword">static_assert</span><span class="special">(</span>
10614  <span class="identifier">get_result</span><span class="special">&lt;</span>
10615    <span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">" "</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10616  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">' '</span><span class="special">,</span>
10617  <span class="string">"the result of parsing should be the first character of the input"</span>
10618<span class="special">);</span>
10619
10620<span class="keyword">static_assert</span><span class="special">(</span>
10621  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10622  <span class="string">"it should return an error when the input does not begin with a whitespace"</span>
10623<span class="special">);</span>
10624</pre>
10625</div>
10626<div class="section">
10627<div class="titlepage"><div><div><h4 class="title">
10628<a name="metaparse.reference.alphabetical.optional"></a><a name="optional"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.optional" title="optional">optional</a>
10629</h4></div></div></div>
10630<h2>
10631<a name="metaparse.reference.alphabetical.optional.h0"></a>
10632          <span class="phrase"><a name="metaparse.reference.alphabetical.optional.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.optional.synopsis">Synopsis</a>
10633        </h2>
10634<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Default</span> <span class="special">=</span> <span class="comment">/* unspecified */</span><span class="special">&gt;</span>
10635<span class="keyword">struct</span> <span class="identifier">optional</span><span class="special">;</span>
10636</pre>
10637<p>
10638          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
10639        </p>
10640<div class="table">
10641<a name="metaparse.reference.alphabetical.optional.arguments"></a><p class="title"><b>Table 24.68. Arguments</b></p>
10642<div class="table-contents"><table class="table" summary="Arguments">
10643<colgroup>
10644<col>
10645<col>
10646</colgroup>
10647<thead><tr>
10648<th>
10649                  <p>
10650                    Name
10651                  </p>
10652                </th>
10653<th>
10654                  <p>
10655                    Type
10656                  </p>
10657                </th>
10658</tr></thead>
10659<tbody>
10660<tr>
10661<td>
10662                  <p>
10663                    <code class="computeroutput"><span class="identifier">P</span></code>
10664                  </p>
10665                </td>
10666<td>
10667                  <p>
10668                    <a class="link" href="reference.html#parser">parser</a>
10669                  </p>
10670                </td>
10671</tr>
10672<tr>
10673<td>
10674                  <p>
10675                    <code class="computeroutput"><span class="identifier">Default</span></code>
10676                  </p>
10677                </td>
10678<td>
10679                  <p>
10680                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
10681                    value</a>
10682                  </p>
10683                </td>
10684</tr>
10685</tbody>
10686</table></div>
10687</div>
10688<br class="table-break"><h2>
10689<a name="metaparse.reference.alphabetical.optional.h1"></a>
10690          <span class="phrase"><a name="metaparse.reference.alphabetical.optional.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.optional.description">Description</a>
10691        </h2>
10692<p>
10693          It tries parsing the input with <code class="computeroutput"><span class="identifier">P</span></code>.
10694          When <code class="computeroutput"><span class="identifier">P</span></code> succeeds, the result
10695          of parsing is the result of <code class="computeroutput"><span class="identifier">P</span></code>.
10696          Otherwise no characters are consumed and the result of parsing is <code class="computeroutput"><span class="identifier">Default</span></code>.
10697        </p>
10698<h2>
10699<a name="metaparse.reference.alphabetical.optional.h2"></a>
10700          <span class="phrase"><a name="metaparse.reference.alphabetical.optional.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.optional.header">Header</a>
10701        </h2>
10702<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">metaparse</span><span class="special">/</span><span class="identifier">optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10703</pre>
10704<h2>
10705<a name="metaparse.reference.alphabetical.optional.h3"></a>
10706          <span class="phrase"><a name="metaparse.reference.alphabetical.optional.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.optional.expression_semantics">Expression
10707          semantics</a>
10708        </h2>
10709<p>
10710          For any <code class="computeroutput"><span class="identifier">p</span></code> <a class="link" href="reference.html#parser">parser</a>
10711          and <code class="computeroutput"><span class="identifier">d</span></code> <a class="link" href="reference.html#metaprogramming_value">template
10712          metaprogramming value</a>
10713        </p>
10714<pre class="programlisting"><span class="identifier">optional</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">d</span><span class="special">&gt;</span>
10715</pre>
10716<p>
10717          is equivalent to
10718        </p>
10719<pre class="programlisting"><span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">d</span><span class="special">&gt;&gt;</span>
10720</pre>
10721<h2>
10722<a name="metaparse.reference.alphabetical.optional.h4"></a>
10723          <span class="phrase"><a name="metaparse.reference.alphabetical.optional.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.optional.example">Example</a>
10724        </h2>
10725<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">metaparse</span><span class="special">/</span><span class="identifier">optional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10726<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10727<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10728<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10729<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10730<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10731<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10732<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10733
10734<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10735<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10736<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal_to</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10737<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10738
10739<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10740
10741<span class="keyword">using</span> <span class="identifier">complex_number</span> <span class="special">=</span>
10742  <span class="identifier">sequence</span><span class="special">&lt;</span>
10743    <span class="comment">// Real</span>
10744    <span class="identifier">int_</span><span class="special">,</span>
10745
10746    <span class="comment">// Imaginary</span>
10747    <span class="identifier">optional</span><span class="special">&lt;</span>
10748      <span class="identifier">middle_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'i'</span><span class="special">&gt;&gt;,</span>
10749      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">0</span><span class="special">&gt;</span>
10750    <span class="special">&gt;</span>
10751  <span class="special">&gt;</span>
10752<span class="special">;</span>
10753
10754<span class="keyword">static_assert</span><span class="special">(</span>
10755  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
10756    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;,</span>
10757    <span class="identifier">get_result</span><span class="special">&lt;</span>
10758      <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10759    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
10760
10761    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">&gt;</span>
10762  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10763  <span class="string">"No imaginary"</span>
10764<span class="special">);</span>
10765
10766<span class="keyword">static_assert</span><span class="special">(</span>
10767  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
10768    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">,</span> <span class="number">0</span><span class="special">&gt;,</span>
10769    <span class="identifier">get_result</span><span class="special">&lt;</span>
10770      <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1+0i"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10771    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
10772
10773    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">&gt;</span>
10774  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10775  <span class="string">"0 as imaginary"</span>
10776<span class="special">);</span>
10777
10778<span class="keyword">static_assert</span><span class="special">(</span>
10779  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
10780    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">0</span><span class="special">,</span> <span class="number">1</span><span class="special">&gt;,</span>
10781    <span class="identifier">get_result</span><span class="special">&lt;</span>
10782      <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0+1i"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
10783    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
10784
10785    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">,</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_</span><span class="special">&gt;</span>
10786  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10787  <span class="string">"Non-null imaginary"</span>
10788<span class="special">);</span>
10789</pre>
10790</div>
10791<div class="section">
10792<div class="titlepage"><div><div><h4 class="title">
10793<a name="metaparse.reference.alphabetical.parser_combinator"></a><a name="parser_combinator"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.parser_combinator" title="Parser combinator">Parser
10794        combinator</a>
10795</h4></div></div></div>
10796<p>
10797          A <span class="emphasis"><em>parser combinator</em></span> is a <a class="link" href="reference.html#parser">parser</a>
10798          implemented as a template class taking one or more parsers as arguments.
10799        </p>
10800</div>
10801<div class="section">
10802<div class="titlepage"><div><div><h4 class="title">
10803<a name="metaparse.reference.alphabetical.parser"></a><a name="parser"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.parser" title="Parser">Parser</a>
10804</h4></div></div></div>
10805<p>
10806          A <span class="emphasis"><em>parser</em></span> is a <a class="link" href="reference.html#metafunction_class">template
10807          metafunction class</a> that takes the following arguments:
10808        </p>
10809<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
10810<li class="listitem">
10811              a suffix of the input text, a <a class="link" href="reference.html#string"><code class="computeroutput"><span class="identifier">string</span></code></a>
10812            </li>
10813<li class="listitem">
10814              a <a class="link" href="reference.html#source_position">source position</a> describing
10815              at which position of the entire input text the suffix begins at
10816            </li>
10817</ul></div>
10818<p>
10819          The function parses a prefix of the input string. When the parsing is successful,
10820          it returns an <a class="link" href="reference.html#accept"><code class="computeroutput"><span class="identifier">accept</span></code></a>
10821          value. When there is a parsing error, the parser returns a <a class="link" href="reference.html#reject"><code class="computeroutput"><span class="identifier">reject</span></code></a> value. The <a class="link" href="reference.html#is_error"><code class="computeroutput"><span class="identifier">is_error</span></code></a> metafunction can be used
10822          to determine about the result of a parser if it succeeded or failed.
10823        </p>
10824<p>
10825          The documentation refers often to the <span class="emphasis"><em>result of a parser</em></span>.
10826          This means that the parser accepts the input and refers to what <a class="link" href="reference.html#get_result"><code class="computeroutput"><span class="identifier">get_result</span></code></a> returns for the value
10827          returned by the parser.
10828        </p>
10829</div>
10830<div class="section">
10831<div class="titlepage"><div><div><h4 class="title">
10832<a name="metaparse.reference.alphabetical.parsing_error_message"></a><a name="parsing_error_message"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.parsing_error_message" title="Parsing error message">Parsing
10833        error message</a>
10834</h4></div></div></div>
10835<p>
10836          A <span class="emphasis"><em>parsing error message</em></span> is a <a class="link" href="reference.html#metaprogramming_value">template
10837          metaprogramming value</a> with a <code class="computeroutput"><span class="keyword">static</span>
10838          <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">get_value</span><span class="special">()</span></code> member function. This function returns
10839          the pretty-printed version of the error the class represents. For example:
10840        </p>
10841<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">example_error</span>
10842<span class="special">{</span>
10843  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">example_error</span><span class="special">;</span>
10844
10845  <span class="keyword">static</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">get_value</span><span class="special">()</span>
10846  <span class="special">{</span>
10847    <span class="keyword">return</span> <span class="string">"This is a formatted example error."</span>
10848  <span class="special">}</span>
10849<span class="special">};</span>
10850</pre>
10851<p>
10852          Failing <a class="link" href="reference.html#parser">parser</a>s return parsing error messages
10853          as error messages.
10854        </p>
10855</div>
10856<div class="section">
10857<div class="titlepage"><div><div><h4 class="title">
10858<a name="metaparse.reference.alphabetical.predicate"></a><a name="predicate"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.predicate" title="Predicate">Predicate</a>
10859</h4></div></div></div>
10860<p>
10861          A <span class="emphasis"><em>predicate</em></span> (or unary predicate) is a <a class="link" href="reference.html#metafunction_class">template
10862          metafunction class</a> taking one argument and returning a <a class="link" href="reference.html#boxed_value">boxed
10863          value</a> of type <code class="computeroutput"><span class="keyword">bool</span></code>.
10864        </p>
10865<p>
10866          For example the following predicate checks if its argument is the boxed
10867          <code class="computeroutput"><span class="keyword">char</span></code> value <code class="computeroutput"><span class="identifier">x</span></code>:
10868        </p>
10869<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">is_x</span>
10870<span class="special">{</span>
10871  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
10872  <span class="keyword">struct</span> <span class="identifier">apply</span>
10873  <span class="special">{</span>
10874    <span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="keyword">bool</span> <span class="identifier">value</span> <span class="special">=</span> <span class="special">(</span><span class="identifier">C</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'x'</span><span class="special">);</span>
10875    <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">apply</span><span class="special">;</span>
10876  <span class="special">};</span>
10877
10878  <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">is_x</span><span class="special">;</span>
10879<span class="special">};</span>
10880</pre>
10881</div>
10882<div class="section">
10883<div class="titlepage"><div><div><h4 class="title">
10884<a name="metaparse.reference.alphabetical.range_c"></a><a name="range_c"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c" title="range_c">range_c</a>
10885</h4></div></div></div>
10886<h2>
10887<a name="metaparse.reference.alphabetical.range_c.h0"></a>
10888          <span class="phrase"><a name="metaparse.reference.alphabetical.range_c.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c.synopsis">Synopsis</a>
10889        </h2>
10890<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">char</span> <span class="identifier">To</span><span class="special">&gt;</span>
10891<span class="keyword">struct</span> <span class="identifier">range_c</span><span class="special">;</span>
10892</pre>
10893<p>
10894          This is a <a class="link" href="reference.html#parser">parser</a>.
10895        </p>
10896<div class="table">
10897<a name="metaparse.reference.alphabetical.range_c.arguments"></a><p class="title"><b>Table 24.69. Arguments</b></p>
10898<div class="table-contents"><table class="table" summary="Arguments">
10899<colgroup>
10900<col>
10901<col>
10902</colgroup>
10903<thead><tr>
10904<th>
10905                  <p>
10906                    Name
10907                  </p>
10908                </th>
10909<th>
10910                  <p>
10911                    Type
10912                  </p>
10913                </th>
10914</tr></thead>
10915<tbody>
10916<tr>
10917<td>
10918                  <p>
10919                    <code class="computeroutput"><span class="identifier">From</span></code>
10920                  </p>
10921                </td>
10922<td>
10923                  <p>
10924                    character value
10925                  </p>
10926                </td>
10927</tr>
10928<tr>
10929<td>
10930                  <p>
10931                    <code class="computeroutput"><span class="identifier">To</span></code>
10932                  </p>
10933                </td>
10934<td>
10935                  <p>
10936                    character value
10937                  </p>
10938                </td>
10939</tr>
10940</tbody>
10941</table></div>
10942</div>
10943<br class="table-break"><h2>
10944<a name="metaparse.reference.alphabetical.range_c.h1"></a>
10945          <span class="phrase"><a name="metaparse.reference.alphabetical.range_c.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c.description">Description</a>
10946        </h2>
10947<p>
10948          <code class="computeroutput"><span class="identifier">range_c</span></code> accepts one character
10949          in the range <code class="computeroutput"><span class="special">[</span><span class="identifier">From</span><span class="special">..</span><span class="identifier">To</span><span class="special">]</span></code>. The result of the parser is the accepted
10950          character.
10951        </p>
10952<h2>
10953<a name="metaparse.reference.alphabetical.range_c.h2"></a>
10954          <span class="phrase"><a name="metaparse.reference.alphabetical.range_c.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c.header">Header</a>
10955        </h2>
10956<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">metaparse</span><span class="special">/</span><span class="identifier">range_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10957</pre>
10958<h2>
10959<a name="metaparse.reference.alphabetical.range_c.h3"></a>
10960          <span class="phrase"><a name="metaparse.reference.alphabetical.range_c.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c.expression_semantics">Expression
10961          semantics</a>
10962        </h2>
10963<p>
10964          For any <code class="computeroutput"><span class="identifier">A</span></code>, <code class="computeroutput"><span class="identifier">B</span></code> characters the following are equivalent:
10965        </p>
10966<pre class="programlisting"><span class="identifier">range_c</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</span>
10967
10968<span class="identifier">accept_when</span><span class="special">&lt;</span>
10969  <span class="identifier">one_char</span><span class="special">,</span>
10970  <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range_c</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;,</span>
10971  <span class="identifier">errors</span><span class="special">::</span><span class="identifier">unexpected_character</span>
10972<span class="special">&gt;</span>
10973</pre>
10974<h2>
10975<a name="metaparse.reference.alphabetical.range_c.h4"></a>
10976          <span class="phrase"><a name="metaparse.reference.alphabetical.range_c.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range_c.example">Example</a>
10977        </h2>
10978<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">metaparse</span><span class="special">/</span><span class="identifier">range_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10979<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10980<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10981<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10982<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
10983
10984<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
10985
10986<span class="keyword">using</span> <span class="identifier">one_digit</span> <span class="special">=</span> <span class="identifier">range_c</span><span class="special">&lt;</span><span class="char">'0'</span><span class="special">,</span> <span class="char">'9'</span><span class="special">&gt;;</span>
10987
10988<span class="keyword">static_assert</span><span class="special">(</span>
10989  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10990  <span class="string">"one_digit should accept a digit"</span>
10991<span class="special">);</span>
10992
10993<span class="keyword">static_assert</span><span class="special">(</span>
10994  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
10995  <span class="string">"one_digit should reject a value outside of ['0'..'9']"</span>
10996<span class="special">);</span>
10997
10998<span class="keyword">static_assert</span><span class="special">(</span>
10999  <span class="identifier">get_result</span><span class="special">&lt;</span>
11000    <span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11001  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
11002  <span class="string">"the result of parsing should be the character value"</span>
11003<span class="special">);</span>
11004</pre>
11005</div>
11006<div class="section">
11007<div class="titlepage"><div><div><h4 class="title">
11008<a name="metaparse.reference.alphabetical.range"></a><a name="range"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.range" title="range">range</a>
11009</h4></div></div></div>
11010<h2>
11011<a name="metaparse.reference.alphabetical.range.h0"></a>
11012          <span class="phrase"><a name="metaparse.reference.alphabetical.range.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range.synopsis">Synopsis</a>
11013        </h2>
11014<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">From</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">To</span><span class="special">&gt;</span>
11015<span class="keyword">struct</span> <span class="identifier">range</span><span class="special">;</span>
11016</pre>
11017<p>
11018          This is a <a class="link" href="reference.html#parser">parser</a>.
11019        </p>
11020<div class="table">
11021<a name="metaparse.reference.alphabetical.range.arguments"></a><p class="title"><b>Table 24.70. Arguments</b></p>
11022<div class="table-contents"><table class="table" summary="Arguments">
11023<colgroup>
11024<col>
11025<col>
11026</colgroup>
11027<thead><tr>
11028<th>
11029                  <p>
11030                    Name
11031                  </p>
11032                </th>
11033<th>
11034                  <p>
11035                    Type
11036                  </p>
11037                </th>
11038</tr></thead>
11039<tbody>
11040<tr>
11041<td>
11042                  <p>
11043                    <code class="computeroutput"><span class="identifier">From</span></code>
11044                  </p>
11045                </td>
11046<td>
11047                  <p>
11048                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
11049                  </p>
11050                </td>
11051</tr>
11052<tr>
11053<td>
11054                  <p>
11055                    <code class="computeroutput"><span class="identifier">To</span></code>
11056                  </p>
11057                </td>
11058<td>
11059                  <p>
11060                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
11061                  </p>
11062                </td>
11063</tr>
11064</tbody>
11065</table></div>
11066</div>
11067<br class="table-break"><h2>
11068<a name="metaparse.reference.alphabetical.range.h1"></a>
11069          <span class="phrase"><a name="metaparse.reference.alphabetical.range.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range.description">Description</a>
11070        </h2>
11071<p>
11072          <code class="computeroutput"><span class="identifier">range</span></code> accepts one character
11073          in the range <code class="computeroutput"><span class="special">[</span><span class="identifier">From</span><span class="special">..</span><span class="identifier">To</span><span class="special">]</span></code>. The result of the parser is the accepted
11074          character.
11075        </p>
11076<h2>
11077<a name="metaparse.reference.alphabetical.range.h2"></a>
11078          <span class="phrase"><a name="metaparse.reference.alphabetical.range.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range.header">Header</a>
11079        </h2>
11080<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">metaparse</span><span class="special">/</span><span class="identifier">range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11081</pre>
11082<h2>
11083<a name="metaparse.reference.alphabetical.range.h3"></a>
11084          <span class="phrase"><a name="metaparse.reference.alphabetical.range.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range.expression_semantics">Expression
11085          semantics</a>
11086        </h2>
11087<p>
11088          For any <code class="computeroutput"><span class="identifier">A</span></code>, <code class="computeroutput"><span class="identifier">B</span></code> wrapped characters the following are
11089          equivalent:
11090        </p>
11091<pre class="programlisting"><span class="identifier">range</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;</span>
11092
11093<span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">in_range</span><span class="special">&lt;</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">&gt;,</span> <span class="identifier">errors</span><span class="special">::</span><span class="identifier">unexpected_character</span><span class="special">&gt;</span>
11094</pre>
11095<h2>
11096<a name="metaparse.reference.alphabetical.range.h4"></a>
11097          <span class="phrase"><a name="metaparse.reference.alphabetical.range.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.range.example">Example</a>
11098        </h2>
11099<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">metaparse</span><span class="special">/</span><span class="identifier">range</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11100<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11101<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11102<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11103<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11104
11105<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
11106
11107<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11108
11109<span class="keyword">using</span> <span class="identifier">one_digit</span> <span class="special">=</span>
11110  <span class="identifier">range</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">&gt;,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'9'</span><span class="special">&gt;&gt;;</span>
11111
11112<span class="keyword">static_assert</span><span class="special">(</span>
11113  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11114  <span class="string">"one_digit should accept a digit"</span>
11115<span class="special">);</span>
11116
11117<span class="keyword">static_assert</span><span class="special">(</span>
11118  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11119  <span class="string">"one_digit should reject a value outside of ['0'..'9']"</span>
11120<span class="special">);</span>
11121
11122<span class="keyword">static_assert</span><span class="special">(</span>
11123  <span class="identifier">get_result</span><span class="special">&lt;</span>
11124    <span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11125  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'0'</span><span class="special">,</span>
11126  <span class="string">"the result of parsing should be the character value"</span>
11127<span class="special">);</span>
11128</pre>
11129</div>
11130<div class="section">
11131<div class="titlepage"><div><div><h4 class="title">
11132<a name="metaparse.reference.alphabetical.reject"></a><a name="reject"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.reject" title="reject">reject</a>
11133</h4></div></div></div>
11134<h2>
11135<a name="metaparse.reference.alphabetical.reject.h0"></a>
11136          <span class="phrase"><a name="metaparse.reference.alphabetical.reject.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.reject.synopsis">Synopsis</a>
11137        </h2>
11138<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Msg</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Pos</span><span class="special">&gt;</span>
11139<span class="keyword">struct</span> <span class="identifier">reject</span><span class="special">;</span>
11140</pre>
11141<p>
11142          This is a <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
11143          value</a>.
11144        </p>
11145<div class="table">
11146<a name="metaparse.reference.alphabetical.reject.arguments"></a><p class="title"><b>Table 24.71. Arguments</b></p>
11147<div class="table-contents"><table class="table" summary="Arguments">
11148<colgroup>
11149<col>
11150<col>
11151</colgroup>
11152<thead><tr>
11153<th>
11154                  <p>
11155                    Name
11156                  </p>
11157                </th>
11158<th>
11159                  <p>
11160                    Type
11161                  </p>
11162                </th>
11163</tr></thead>
11164<tbody>
11165<tr>
11166<td>
11167                  <p>
11168                    <code class="computeroutput"><span class="identifier">Msg</span></code>
11169                  </p>
11170                </td>
11171<td>
11172                  <p>
11173                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
11174                    value</a>
11175                  </p>
11176                </td>
11177</tr>
11178<tr>
11179<td>
11180                  <p>
11181                    <code class="computeroutput"><span class="identifier">Pos</span></code>
11182                  </p>
11183                </td>
11184<td>
11185                  <p>
11186                    <a class="link" href="reference.html#source_position">source position</a>
11187                  </p>
11188                </td>
11189</tr>
11190</tbody>
11191</table></div>
11192</div>
11193<br class="table-break"><h2>
11194<a name="metaparse.reference.alphabetical.reject.h1"></a>
11195          <span class="phrase"><a name="metaparse.reference.alphabetical.reject.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.reject.description">Description</a>
11196        </h2>
11197<p>
11198          Values representing a failed parser application. It behaves as a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>: when it
11199          is evaluated as a metafunction, it returns itself with its arguments evaluated.
11200          See expression semantics for further details.
11201        </p>
11202<div class="note"><table border="0" summary="Note">
11203<tr>
11204<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td>
11205<th align="left">Note</th>
11206</tr>
11207<tr><td align="left" valign="top"><p>
11208            Note that for backward compatibility when <code class="computeroutput"><span class="identifier">Msg</span><span class="special">::</span><span class="identifier">type</span></code>
11209            is not defined, <code class="computeroutput"><span class="identifier">reject</span><span class="special">&lt;....&gt;::</span><span class="identifier">type</span></code>
11210            does not evaluate <code class="computeroutput"><span class="identifier">Msg</span></code>.
11211            For example <code class="computeroutput"><span class="identifier">reject</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">reject</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">start</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span></code>. Using types that are not template
11212            metaprogramming values as <code class="computeroutput"><span class="identifier">Msg</span></code>
11213            is deprecated and will not work in future versions of the library.
11214          </p></td></tr>
11215</table></div>
11216<h2>
11217<a name="metaparse.reference.alphabetical.reject.h2"></a>
11218          <span class="phrase"><a name="metaparse.reference.alphabetical.reject.expressions_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.reject.expressions_semantics">Expressions
11219          semantics</a>
11220        </h2>
11221<p>
11222          For any <code class="computeroutput"><span class="identifier">m</span></code> template metaprogramming
11223          value and <code class="computeroutput"><span class="identifier">p</span></code> source position
11224          the following are equivalent:
11225        </p>
11226<pre class="programlisting"><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">m</span><span class="special">,</span> <span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">type</span>
11227
11228<span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">m</span><span class="special">,</span> <span class="identifier">p</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;</span>
11229</pre>
11230<h2>
11231<a name="metaparse.reference.alphabetical.reject.h3"></a>
11232          <span class="phrase"><a name="metaparse.reference.alphabetical.reject.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.reject.header">Header</a>
11233        </h2>
11234<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">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11235</pre>
11236<h2>
11237<a name="metaparse.reference.alphabetical.reject.h4"></a>
11238          <span class="phrase"><a name="metaparse.reference.alphabetical.reject.operations"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.reject.operations">Operations</a>
11239        </h2>
11240<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
11241<li class="listitem">
11242              <a class="link" href="reference.html#get_position"><code class="computeroutput"><span class="identifier">get_position</span></code></a>
11243            </li>
11244<li class="listitem">
11245              <a class="link" href="reference.html#get_message"><code class="computeroutput"><span class="identifier">get_message</span></code></a>
11246            </li>
11247</ul></div>
11248</div>
11249<div class="section">
11250<div class="titlepage"><div><div><h4 class="title">
11251<a name="metaparse.reference.alphabetical.repeated1"></a><a name="repeated1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1" title="repeated1">repeated1</a>
11252</h4></div></div></div>
11253<h2>
11254<a name="metaparse.reference.alphabetical.repeated1.h0"></a>
11255          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1.synopsis">Synopsis</a>
11256        </h2>
11257<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
11258<span class="keyword">struct</span> <span class="identifier">repeated1</span><span class="special">;</span>
11259</pre>
11260<p>
11261          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11262        </p>
11263<div class="table">
11264<a name="metaparse.reference.alphabetical.repeated1.arguments"></a><p class="title"><b>Table 24.72. Arguments</b></p>
11265<div class="table-contents"><table class="table" summary="Arguments">
11266<colgroup>
11267<col>
11268<col>
11269</colgroup>
11270<thead><tr>
11271<th>
11272                  <p>
11273                    Name
11274                  </p>
11275                </th>
11276<th>
11277                  <p>
11278                    Type
11279                  </p>
11280                </th>
11281</tr></thead>
11282<tbody><tr>
11283<td>
11284                  <p>
11285                    <code class="computeroutput"><span class="identifier">P</span></code>
11286                  </p>
11287                </td>
11288<td>
11289                  <p>
11290                    <a class="link" href="reference.html#parser">parser</a>
11291                  </p>
11292                </td>
11293</tr></tbody>
11294</table></div>
11295</div>
11296<br class="table-break"><h2>
11297<a name="metaparse.reference.alphabetical.repeated1.h1"></a>
11298          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1.description">Description</a>
11299        </h2>
11300<p>
11301          It applies <code class="computeroutput"><span class="identifier">P</span></code> on the input
11302          string repeatedly as long as the parser accepts the input. The result of
11303          parsing is a sequence of the results of the individual applications of
11304          <code class="computeroutput"><span class="identifier">P</span></code>.
11305        </p>
11306<p>
11307          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
11308          for the first time, <code class="computeroutput"><span class="identifier">repeated1</span></code>
11309          rejects it as well. At least one successful application of <code class="computeroutput"><span class="identifier">P</span></code> is required for <code class="computeroutput"><span class="identifier">repeated1</span></code>
11310          to accept the input.
11311        </p>
11312<h2>
11313<a name="metaparse.reference.alphabetical.repeated1.h2"></a>
11314          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1.header">Header</a>
11315        </h2>
11316<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">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11317</pre>
11318<h2>
11319<a name="metaparse.reference.alphabetical.repeated1.h3"></a>
11320          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1.expression_semantics">Expression
11321          semantics</a>
11322        </h2>
11323<p>
11324          For any <code class="computeroutput"><span class="identifier">p</span></code> parser the following
11325          are equivalent:
11326        </p>
11327<pre class="programlisting"><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span>
11328
11329<span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">look_ahead</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;,</span> <span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;&gt;</span>
11330</pre>
11331<h2>
11332<a name="metaparse.reference.alphabetical.repeated1.h4"></a>
11333          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated1.example">Example</a>
11334        </h2>
11335<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">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11336<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">digit_val</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11337<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11338<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11339<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11340<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11341
11342<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11343<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11344<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11345
11346<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11347
11348<span class="keyword">using</span> <span class="identifier">digits</span> <span class="special">=</span> <span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">digit_val</span><span class="special">&gt;;</span>
11349
11350<span class="keyword">static_assert</span><span class="special">(</span>
11351  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11352    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1234"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
11353    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
11354      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;,</span>
11355      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;,</span>
11356      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">3</span><span class="special">&gt;,</span>
11357      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">4</span><span class="special">&gt;</span>
11358    <span class="special">&gt;</span>
11359  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11360  <span class="string">"the result of parsing should be the list of digit values"</span>
11361<span class="special">);</span>
11362
11363<span class="keyword">static_assert</span><span class="special">(</span>
11364  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11365  <span class="string">"repeated1 should reject the input when it can't parse anything with digit_val"</span>
11366<span class="special">);</span>
11367</pre>
11368</div>
11369<div class="section">
11370<div class="titlepage"><div><div><h4 class="title">
11371<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1"></a><a name="repeated_reject_incomplete1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1" title="repeated_reject_incomplete1">repeated_reject_incomplete1</a>
11372</h4></div></div></div>
11373<h2>
11374<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.h0"></a>
11375          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1.synopsis">Synopsis</a>
11376        </h2>
11377<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
11378<span class="keyword">struct</span> <span class="identifier">repeated_reject_incomplete1</span><span class="special">;</span>
11379</pre>
11380<p>
11381          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11382        </p>
11383<div class="table">
11384<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.arguments"></a><p class="title"><b>Table 24.73. Arguments</b></p>
11385<div class="table-contents"><table class="table" summary="Arguments">
11386<colgroup>
11387<col>
11388<col>
11389</colgroup>
11390<thead><tr>
11391<th>
11392                  <p>
11393                    Name
11394                  </p>
11395                </th>
11396<th>
11397                  <p>
11398                    Type
11399                  </p>
11400                </th>
11401</tr></thead>
11402<tbody><tr>
11403<td>
11404                  <p>
11405                    <code class="computeroutput"><span class="identifier">P</span></code>
11406                  </p>
11407                </td>
11408<td>
11409                  <p>
11410                    <a class="link" href="reference.html#parser">parser</a>
11411                  </p>
11412                </td>
11413</tr></tbody>
11414</table></div>
11415</div>
11416<br class="table-break"><h2>
11417<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.h1"></a>
11418          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1.description">Description</a>
11419        </h2>
11420<p>
11421          The same as <a class="link" href="reference.html#repeated1"><code class="computeroutput"><span class="identifier">repeated1</span></code></a>,
11422          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
11423          input, <code class="computeroutput"><span class="identifier">repeated_reject_incomplete1</span></code>
11424          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
11425          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">repeated_reject_incomplete1</span></code>
11426          rejects the input with the same error message this last application of
11427          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise _reject_incomplete<code class="computeroutput"><span class="identifier">repeated1</span></code> accepts the input and gives
11428          the same result as <a class="link" href="reference.html#repeated1"><code class="computeroutput"><span class="identifier">repeated1</span></code></a>.
11429        </p>
11430<h2>
11431<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.h2"></a>
11432          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1.header">Header</a>
11433        </h2>
11434<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11435</pre>
11436<h2>
11437<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.h3"></a>
11438          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1.expression_semantics">Expression
11439          semantics</a>
11440        </h2>
11441<p>
11442          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
11443        </p>
11444<pre class="programlisting"><span class="identifier">repeated_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
11445</pre>
11446<p>
11447          is equivalent to
11448        </p>
11449<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
11450</pre>
11451<h2>
11452<a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.h4"></a>
11453          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete1.example">Example</a>
11454        </h2>
11455<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_reject_incomplete1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11456<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11457<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11458<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11459<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11460<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11461<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11462<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11463<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11464
11465<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11466<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11467
11468<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11469
11470<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
11471<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
11472<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
11473
11474<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">repeated_reject_incomplete1</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">&gt;;</span>
11475
11476<span class="keyword">static_assert</span><span class="special">(</span>
11477  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11478    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">21</span><span class="special">&gt;,</span>
11479    <span class="identifier">get_result</span><span class="special">&lt;</span>
11480      <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11481    <span class="special">&gt;::</span><span class="identifier">type</span>
11482  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11483  <span class="string">"ints should parse the numbers"</span>
11484<span class="special">);</span>
11485
11486<span class="keyword">static_assert</span><span class="special">(</span>
11487  <span class="identifier">is_error</span><span class="special">&lt;</span>
11488    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11489  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11490  <span class="string">"when the last number is missing, it should be an error"</span>
11491<span class="special">);</span>
11492
11493<span class="keyword">static_assert</span><span class="special">(</span>
11494  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11495  <span class="string">"when no numbers are provided, it should be an error"</span>
11496<span class="special">);</span>
11497</pre>
11498</div>
11499<div class="section">
11500<div class="titlepage"><div><div><h4 class="title">
11501<a name="metaparse.reference.alphabetical.repeated_reject_incomplete"></a><a name="repeated_reject_incomplete"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete" title="repeated_reject_incomplete">repeated_reject_incomplete</a>
11502</h4></div></div></div>
11503<h2>
11504<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.h0"></a>
11505          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete.synopsis">Synopsis</a>
11506        </h2>
11507<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
11508<span class="keyword">struct</span> <span class="identifier">repeated_reject_incomplete</span><span class="special">;</span>
11509</pre>
11510<p>
11511          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11512        </p>
11513<div class="table">
11514<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.arguments"></a><p class="title"><b>Table 24.74. Arguments</b></p>
11515<div class="table-contents"><table class="table" summary="Arguments">
11516<colgroup>
11517<col>
11518<col>
11519</colgroup>
11520<thead><tr>
11521<th>
11522                  <p>
11523                    Name
11524                  </p>
11525                </th>
11526<th>
11527                  <p>
11528                    Type
11529                  </p>
11530                </th>
11531</tr></thead>
11532<tbody><tr>
11533<td>
11534                  <p>
11535                    <code class="computeroutput"><span class="identifier">P</span></code>
11536                  </p>
11537                </td>
11538<td>
11539                  <p>
11540                    <a class="link" href="reference.html#parser">parser</a>
11541                  </p>
11542                </td>
11543</tr></tbody>
11544</table></div>
11545</div>
11546<br class="table-break"><h2>
11547<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.h1"></a>
11548          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete.description">Description</a>
11549        </h2>
11550<p>
11551          The same as <a class="link" href="reference.html#repeated"><code class="computeroutput"><span class="identifier">repeated</span></code></a>,
11552          but once <code class="computeroutput"><span class="identifier">P</span></code> rejects the
11553          input, <code class="computeroutput"><span class="identifier">repeated_reject_incomplete</span></code>
11554          checks if <code class="computeroutput"><span class="identifier">P</span></code> consumes any
11555          characters before rejecting the input. If so, <code class="computeroutput"><span class="identifier">repeated_reject_incomplete</span></code>
11556          rejects the input with the same error message this last application of
11557          <code class="computeroutput"><span class="identifier">P</span></code> returned. Otherwise
11558          <code class="computeroutput"><span class="identifier">repeated_reject_incomplete</span></code>
11559          accepts the input and gives the same result as <a class="link" href="reference.html#repeated"><code class="computeroutput"><span class="identifier">repeated</span></code></a>.
11560        </p>
11561<p>
11562          Here is a diagram showing how <code class="computeroutput"><span class="identifier">repeated_reject_incomplete</span></code>
11563          works by example:
11564        </p>
11565<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
11566<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
11567<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
11568<span class="keyword">using</span> <span class="identifier">sum_op</span> <span class="special">=</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</span><span class="special">&lt;</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">;</span>
11569</pre>
11570<p>
11571          <span class="inlinemediaobject"><img src="../images/metaparse/repeated_reject_incomplete_diag1.png" width="70%"></span>
11572        </p>
11573<h2>
11574<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.h2"></a>
11575          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete.header">Header</a>
11576        </h2>
11577<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11578</pre>
11579<h2>
11580<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.h3"></a>
11581          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete.expression_semantics">Expression
11582          semantics</a>
11583        </h2>
11584<p>
11585          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
11586        </p>
11587<pre class="programlisting"><span class="identifier">repeated_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
11588</pre>
11589<p>
11590          is equivalent to
11591        </p>
11592<pre class="programlisting"><span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span> <span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
11593</pre>
11594<h2>
11595<a name="metaparse.reference.alphabetical.repeated_reject_incomplete.h4"></a>
11596          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_reject_incomplete.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_reject_incomplete.example">Example</a>
11597        </h2>
11598<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_reject_incomplete</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11599<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11600<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11601<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11602<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11603<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11604<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11605<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11606<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11607
11608<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11609<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11610
11611<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11612
11613<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
11614<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
11615<span class="keyword">using</span> <span class="identifier">plus_int</span> <span class="special">=</span> <span class="identifier">last_of</span><span class="special">&lt;</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
11616
11617<span class="keyword">using</span> <span class="identifier">ints</span> <span class="special">=</span> <span class="identifier">repeated_reject_incomplete</span><span class="special">&lt;</span><span class="identifier">plus_int</span><span class="special">&gt;;</span>
11618
11619<span class="keyword">static_assert</span><span class="special">(</span>
11620  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11621    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector_c</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">,</span> <span class="number">3</span><span class="special">,</span> <span class="number">21</span><span class="special">&gt;,</span>
11622    <span class="identifier">get_result</span><span class="special">&lt;</span>
11623      <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 + 21"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11624    <span class="special">&gt;::</span><span class="identifier">type</span>
11625  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11626  <span class="string">"ints should parse the numbers"</span>
11627<span class="special">);</span>
11628
11629<span class="keyword">static_assert</span><span class="special">(</span>
11630  <span class="identifier">is_error</span><span class="special">&lt;</span>
11631    <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"+ 13 + 3 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
11632  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11633  <span class="string">"when the last number is missing, it should be an error"</span>
11634<span class="special">);</span>
11635</pre>
11636</div>
11637<div class="section">
11638<div class="titlepage"><div><div><h4 class="title">
11639<a name="metaparse.reference.alphabetical.repeated_one_of1"></a><a name="repeated_one_of1"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1" title="repeated_one_of1">repeated_one_of1</a>
11640</h4></div></div></div>
11641<h2>
11642<a name="metaparse.reference.alphabetical.repeated_one_of1.h0"></a>
11643          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of1.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1.synopsis">Synopsis</a>
11644        </h2>
11645<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
11646<span class="keyword">struct</span> <span class="identifier">repeated_one_of1</span><span class="special">;</span>
11647</pre>
11648<p>
11649          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11650        </p>
11651<div class="table">
11652<a name="metaparse.reference.alphabetical.repeated_one_of1.arguments"></a><p class="title"><b>Table 24.75. Arguments</b></p>
11653<div class="table-contents"><table class="table" summary="Arguments">
11654<colgroup>
11655<col>
11656<col>
11657</colgroup>
11658<thead><tr>
11659<th>
11660                  <p>
11661                    Name
11662                  </p>
11663                </th>
11664<th>
11665                  <p>
11666                    Type
11667                  </p>
11668                </th>
11669</tr></thead>
11670<tbody><tr>
11671<td>
11672                  <p>
11673                    <code class="computeroutput"><span class="identifier">Ps</span></code>
11674                  </p>
11675                </td>
11676<td>
11677                  <p>
11678                    <a class="link" href="reference.html#parser">parser</a>s
11679                  </p>
11680                </td>
11681</tr></tbody>
11682</table></div>
11683</div>
11684<br class="table-break"><h2>
11685<a name="metaparse.reference.alphabetical.repeated_one_of1.h1"></a>
11686          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of1.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1.description">Description</a>
11687        </h2>
11688<p>
11689          It applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
11690          parsers repeatedly as long as any of them accepts the input. In each iteration
11691          the parsers are tried in order and the first one accepting the input is
11692          used, therefore in case of ambiguous grammars the result of parsing depends
11693          on the order of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code> parsers. The result of parsing with
11694          this <a class="link" href="reference.html#parser_combinator">parser combinator</a> is a sequence
11695          of the individual parsing results.
11696        </p>
11697<p>
11698          When none of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
11699          parsers accept the input in the first iteration, <code class="computeroutput"><span class="identifier">repeated_one_of1</span></code>
11700          rejects the input.
11701        </p>
11702<p>
11703          On compilers, which are not C++11-compliant, the maximum number of accepted
11704          parsers is defined by the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_OF_SIZE</span></code>
11705          macro. Its default value is 20.
11706        </p>
11707<h2>
11708<a name="metaparse.reference.alphabetical.repeated_one_of1.h2"></a>
11709          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of1.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1.header">Header</a>
11710        </h2>
11711<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_one_of1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11712</pre>
11713<h2>
11714<a name="metaparse.reference.alphabetical.repeated_one_of1.h3"></a>
11715          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of1.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1.expression_semantics">Expression
11716          semantics</a>
11717        </h2>
11718<p>
11719          For any <code class="computeroutput"><span class="identifier">p1</span></code>, ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers
11720        </p>
11721<pre class="programlisting"><span class="identifier">repeated_one_of1</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
11722</pre>
11723<p>
11724          is equivalent to
11725        </p>
11726<pre class="programlisting"><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">pn</span><span class="special">&gt;&gt;</span>
11727</pre>
11728<h2>
11729<a name="metaparse.reference.alphabetical.repeated_one_of1.h4"></a>
11730          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of1.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of1.example">Example</a>
11731        </h2>
11732<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_one_of1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11733<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11734<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11735<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11736<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11737<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11738
11739<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11740<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11741<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11742
11743<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11744
11745<span class="keyword">using</span> <span class="identifier">as_and_bs</span> <span class="special">=</span> <span class="identifier">repeated_one_of1</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;&gt;;</span>
11746
11747<span class="keyword">static_assert</span><span class="special">(</span>
11748  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11749    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"abaab"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
11750    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
11751      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11752      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;,</span>
11753      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11754      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11755      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;</span>
11756    <span class="special">&gt;</span>
11757  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11758  <span class="string">"the result of parsing should be the list of results"</span>
11759<span class="special">);</span>
11760
11761<span class="keyword">static_assert</span><span class="special">(</span>
11762  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11763  <span class="string">"repeated_one_of1 should reject the input when it"</span>
11764  <span class="string">" can't parse anything with digit_val"</span>
11765<span class="special">);</span>
11766</pre>
11767</div>
11768<div class="section">
11769<div class="titlepage"><div><div><h4 class="title">
11770<a name="metaparse.reference.alphabetical.repeated_one_of"></a><a name="repeated_one_of"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of" title="repeated_one_of">repeated_one_of</a>
11771</h4></div></div></div>
11772<h2>
11773<a name="metaparse.reference.alphabetical.repeated_one_of.h0"></a>
11774          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of.synopsis">Synopsis</a>
11775        </h2>
11776<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
11777<span class="keyword">struct</span> <span class="identifier">repeated_one_of1</span><span class="special">;</span>
11778</pre>
11779<div class="table">
11780<a name="metaparse.reference.alphabetical.repeated_one_of.arguments"></a><p class="title"><b>Table 24.76. Arguments</b></p>
11781<div class="table-contents"><table class="table" summary="Arguments">
11782<colgroup>
11783<col>
11784<col>
11785</colgroup>
11786<thead><tr>
11787<th>
11788                  <p>
11789                    Name
11790                  </p>
11791                </th>
11792<th>
11793                  <p>
11794                    Type
11795                  </p>
11796                </th>
11797</tr></thead>
11798<tbody><tr>
11799<td>
11800                  <p>
11801                    <code class="computeroutput"><span class="identifier">Ps</span></code>
11802                  </p>
11803                </td>
11804<td>
11805                  <p>
11806                    <a class="link" href="reference.html#parser">parser</a>s
11807                  </p>
11808                </td>
11809</tr></tbody>
11810</table></div>
11811</div>
11812<br class="table-break"><p>
11813          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11814        </p>
11815<h2>
11816<a name="metaparse.reference.alphabetical.repeated_one_of.h1"></a>
11817          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of.description">Description</a>
11818        </h2>
11819<p>
11820          It applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
11821          parsers repeatedly as long as any of them accepts the input. In each iteration
11822          the parsers are tried in order and the first one accepting the input is
11823          used, therefore in case of ambiguous grammars the result of parsing depends
11824          on the order of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code> parsers. The result of parsing with
11825          this <a class="link" href="reference.html#parser_combinator">parser combinator</a> is a sequence
11826          of the individual parsing results.
11827        </p>
11828<p>
11829          When none of the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
11830          parsers accept the input in the first iteration, <code class="computeroutput"><span class="identifier">repeated_one_of</span></code>
11831          accepts the input and the result of parsing is an empty sequence.
11832        </p>
11833<p>
11834          On compilers, which are not C++11-compliant, the maximum number of accepted
11835          parsers is defined by the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_ONE_OF_SIZE</span></code>
11836          macro. Its default value is 20.
11837        </p>
11838<h2>
11839<a name="metaparse.reference.alphabetical.repeated_one_of.h2"></a>
11840          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of.header">Header</a>
11841        </h2>
11842<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_one_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11843</pre>
11844<h2>
11845<a name="metaparse.reference.alphabetical.repeated_one_of.h3"></a>
11846          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of.expression_semantics">Expression
11847          semantics</a>
11848        </h2>
11849<p>
11850          For any <code class="computeroutput"><span class="identifier">p1</span></code>, ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers
11851        </p>
11852<pre class="programlisting"><span class="identifier">repeated_one_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">pn</span><span class="special">&gt;</span>
11853</pre>
11854<p>
11855          is equivalent to
11856        </p>
11857<pre class="programlisting"><span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">pn</span><span class="special">&gt;&gt;</span>
11858</pre>
11859<h2>
11860<a name="metaparse.reference.alphabetical.repeated_one_of.h4"></a>
11861          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated_one_of.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated_one_of.example">Example</a>
11862        </h2>
11863<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">metaparse</span><span class="special">/</span><span class="identifier">repeated_one_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11864<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11865<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11866<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11867<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11868
11869<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11870<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11871<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11872
11873<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
11874
11875<span class="keyword">using</span> <span class="identifier">as_and_bs</span> <span class="special">=</span> <span class="identifier">repeated_one_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;&gt;;</span>
11876
11877<span class="keyword">static_assert</span><span class="special">(</span>
11878  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11879    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"abaab"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
11880    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
11881      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11882      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;,</span>
11883      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11884      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'a'</span><span class="special">&gt;,</span>
11885      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">char_</span><span class="special">&lt;</span><span class="char">'b'</span><span class="special">&gt;</span>
11886    <span class="special">&gt;</span>
11887  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11888  <span class="string">"the result of parsing should be the list of results"</span>
11889<span class="special">);</span>
11890
11891<span class="keyword">static_assert</span><span class="special">(</span>
11892  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
11893    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
11894    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;&gt;</span>
11895  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
11896  <span class="string">"repeated_one_of should accept the input when it"</span>
11897  <span class="string">" can't parse anything with digit_val"</span>
11898<span class="special">);</span>
11899</pre>
11900</div>
11901<div class="section">
11902<div class="titlepage"><div><div><h4 class="title">
11903<a name="metaparse.reference.alphabetical.repeated"></a><a name="repeated"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated" title="repeated">repeated</a>
11904</h4></div></div></div>
11905<h2>
11906<a name="metaparse.reference.alphabetical.repeated.h0"></a>
11907          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated.synopsis">Synopsis</a>
11908        </h2>
11909<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
11910<span class="keyword">struct</span> <span class="identifier">repeated</span><span class="special">;</span>
11911</pre>
11912<p>
11913          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
11914        </p>
11915<div class="table">
11916<a name="metaparse.reference.alphabetical.repeated.arguments"></a><p class="title"><b>Table 24.77. Arguments</b></p>
11917<div class="table-contents"><table class="table" summary="Arguments">
11918<colgroup>
11919<col>
11920<col>
11921</colgroup>
11922<thead><tr>
11923<th>
11924                  <p>
11925                    Name
11926                  </p>
11927                </th>
11928<th>
11929                  <p>
11930                    Type
11931                  </p>
11932                </th>
11933</tr></thead>
11934<tbody><tr>
11935<td>
11936                  <p>
11937                    <code class="computeroutput"><span class="identifier">P</span></code>
11938                  </p>
11939                </td>
11940<td>
11941                  <p>
11942                    <a class="link" href="reference.html#parser">parser</a>
11943                  </p>
11944                </td>
11945</tr></tbody>
11946</table></div>
11947</div>
11948<br class="table-break"><h2>
11949<a name="metaparse.reference.alphabetical.repeated.h1"></a>
11950          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated.description">Description</a>
11951        </h2>
11952<p>
11953          It applies <code class="computeroutput"><span class="identifier">P</span></code> on the input
11954          string repeatedly as long as <code class="computeroutput"><span class="identifier">P</span></code>
11955          accepts the input. The result of parsing is a sequence of the results of
11956          the individual applications of <code class="computeroutput"><span class="identifier">P</span></code>.
11957        </p>
11958<p>
11959          When <code class="computeroutput"><span class="identifier">P</span></code> rejects the input
11960          for the first time, <code class="computeroutput"><span class="identifier">repeated</span></code>
11961          still accepts the input and the result of parsing is an empty sequence.
11962        </p>
11963<p>
11964          Here is a diagram showing how <code class="computeroutput"><span class="identifier">repeated</span></code>
11965          works by example:
11966        </p>
11967<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
11968</pre>
11969<p>
11970          <span class="inlinemediaobject"><img src="../images/metaparse/repeated_diag1.png" width="70%"></span>
11971        </p>
11972<p>
11973          Further details can be found in the <a class="link" href="user_manual.html#repetition">Repetition</a>
11974          section of the <a class="link" href="user_manual.html#manual">User Manual</a>.
11975        </p>
11976<h2>
11977<a name="metaparse.reference.alphabetical.repeated.h2"></a>
11978          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated.header">Header</a>
11979        </h2>
11980<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">metaparse</span><span class="special">/</span><span class="identifier">repeated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
11981</pre>
11982<h2>
11983<a name="metaparse.reference.alphabetical.repeated.h3"></a>
11984          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated.expression_semantics">Expression
11985          semantics</a>
11986        </h2>
11987<p>
11988          For any <code class="computeroutput"><span class="identifier">p</span></code> parser the following
11989          are equivalent:
11990        </p>
11991<pre class="programlisting"><span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span>
11992
11993<span class="identifier">foldl</span><span class="special">&lt;</span>
11994  <span class="identifier">p</span><span class="special">,</span>
11995  <span class="comment">/* unspecified empty sequence */</span><span class="special">,</span>
11996  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">push_back</span><span class="special">&lt;</span><span class="identifier">_2</span><span class="special">,</span> <span class="identifier">_1</span><span class="special">&gt;</span>
11997<span class="special">&gt;</span>
11998</pre>
11999<h2>
12000<a name="metaparse.reference.alphabetical.repeated.h4"></a>
12001          <span class="phrase"><a name="metaparse.reference.alphabetical.repeated.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.repeated.example">Example</a>
12002        </h2>
12003<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">metaparse</span><span class="special">/</span><span class="identifier">repeated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12004<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">digit_val</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12005<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12006<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12007<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12008
12009<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12010<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12011<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12012
12013<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12014
12015<span class="keyword">using</span> <span class="identifier">digits</span> <span class="special">=</span> <span class="identifier">repeated</span><span class="special">&lt;</span><span class="identifier">digit_val</span><span class="special">&gt;;</span>
12016
12017<span class="keyword">static_assert</span><span class="special">(</span>
12018  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
12019    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1234"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12020    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;</span>
12021      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;,</span>
12022      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;,</span>
12023      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">3</span><span class="special">&gt;,</span>
12024      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special">&lt;</span><span class="number">4</span><span class="special">&gt;</span>
12025    <span class="special">&gt;</span>
12026  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12027  <span class="string">"the result of parsing should be the list of digit values"</span>
12028<span class="special">);</span>
12029
12030<span class="keyword">static_assert</span><span class="special">(</span>
12031  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal</span><span class="special">&lt;</span>
12032    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12033    <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">vector</span><span class="special">&lt;&gt;</span>
12034  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12035  <span class="string">"repeated should accept the input when it can't parse anything with digit_val"</span>
12036<span class="special">);</span>
12037</pre>
12038</div>
12039<div class="section">
12040<div class="titlepage"><div><div><h4 class="title">
12041<a name="metaparse.reference.alphabetical.return"></a><a name="return_"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.return" title="return_">return_</a>
12042</h4></div></div></div>
12043<h2>
12044<a name="metaparse.reference.alphabetical.return.h0"></a>
12045          <span class="phrase"><a name="metaparse.reference.alphabetical.return.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.return.synopsis">Synopsis</a>
12046        </h2>
12047<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">&gt;</span>
12048<span class="keyword">struct</span> <span class="identifier">return_</span><span class="special">;</span>
12049</pre>
12050<p>
12051          This is a <a class="link" href="reference.html#parser">parser</a>.
12052        </p>
12053<div class="table">
12054<a name="metaparse.reference.alphabetical.return.arguments"></a><p class="title"><b>Table 24.78. Arguments</b></p>
12055<div class="table-contents"><table class="table" summary="Arguments">
12056<colgroup>
12057<col>
12058<col>
12059</colgroup>
12060<thead><tr>
12061<th>
12062                  <p>
12063                    Name
12064                  </p>
12065                </th>
12066<th>
12067                  <p>
12068                    Type
12069                  </p>
12070                </th>
12071</tr></thead>
12072<tbody><tr>
12073<td>
12074                  <p>
12075                    <code class="computeroutput"><span class="identifier">C</span></code>
12076                  </p>
12077                </td>
12078<td>
12079                  <p>
12080                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
12081                    value</a>
12082                  </p>
12083                </td>
12084</tr></tbody>
12085</table></div>
12086</div>
12087<br class="table-break"><h2>
12088<a name="metaparse.reference.alphabetical.return.h1"></a>
12089          <span class="phrase"><a name="metaparse.reference.alphabetical.return.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.return.description">Description</a>
12090        </h2>
12091<p>
12092          <code class="computeroutput"><span class="identifier">return_</span></code> accepts every input.
12093          The result of parsing is <code class="computeroutput"><span class="identifier">C</span></code>,
12094          the remaining string is the input string.
12095        </p>
12096<h2>
12097<a name="metaparse.reference.alphabetical.return.h2"></a>
12098          <span class="phrase"><a name="metaparse.reference.alphabetical.return.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.return.header">Header</a>
12099        </h2>
12100<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">metaparse</span><span class="special">/</span><span class="identifier">return_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12101</pre>
12102<h2>
12103<a name="metaparse.reference.alphabetical.return.h3"></a>
12104          <span class="phrase"><a name="metaparse.reference.alphabetical.return.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.return.expression_semantics">Expression
12105          semantics</a>
12106        </h2>
12107<p>
12108          For any <code class="computeroutput"><span class="identifier">c</span></code> class, <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and <code class="computeroutput"><span class="identifier">pos</span></code> source position the following are
12109          equivalent
12110        </p>
12111<pre class="programlisting"><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12112
12113<span class="identifier">c</span>
12114
12115<span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12116
12117<span class="identifier">s</span>
12118
12119<span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">c</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12120
12121<span class="identifier">pos</span>
12122</pre>
12123<h2>
12124<a name="metaparse.reference.alphabetical.return.h4"></a>
12125          <span class="phrase"><a name="metaparse.reference.alphabetical.return.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.return.example">Example</a>
12126        </h2>
12127<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">metaparse</span><span class="special">/</span><span class="identifier">return_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12128<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12129<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">one_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12130<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12131<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12132<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12133
12134<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
12135
12136<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12137
12138<span class="keyword">using</span> <span class="identifier">default_value</span> <span class="special">=</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;;</span>
12139
12140<span class="keyword">using</span> <span class="identifier">optional_number</span> <span class="special">=</span> <span class="identifier">one_of</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">return_</span><span class="special">&lt;</span><span class="identifier">default_value</span><span class="special">&gt;&gt;;</span>
12141
12142<span class="keyword">static_assert</span><span class="special">(</span>
12143  <span class="identifier">get_result</span><span class="special">&lt;</span>
12144    <span class="identifier">optional_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"11"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
12145  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">11</span><span class="special">,</span>
12146  <span class="string">"when a number is provided, it is the result of parsing"</span>
12147<span class="special">);</span>
12148
12149<span class="keyword">static_assert</span><span class="special">(</span>
12150  <span class="identifier">get_result</span><span class="special">&lt;</span>
12151    <span class="identifier">optional_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
12152  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">13</span><span class="special">,</span>
12153  <span class="string">"when no number is provided, the default value is the result of parsing"</span>
12154<span class="special">);</span>
12155</pre>
12156</div>
12157<div class="section">
12158<div class="titlepage"><div><div><h4 class="title">
12159<a name="metaparse.reference.alphabetical.sequence"></a><a name="sequence"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence" title="sequence">sequence</a>
12160</h4></div></div></div>
12161<h2>
12162<a name="metaparse.reference.alphabetical.sequence.h0"></a>
12163          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence.synopsis">Synopsis</a>
12164        </h2>
12165<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">&gt;</span>
12166<span class="keyword">struct</span> <span class="identifier">sequence</span><span class="special">;</span>
12167</pre>
12168<p>
12169          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
12170        </p>
12171<div class="table">
12172<a name="metaparse.reference.alphabetical.sequence.arguments"></a><p class="title"><b>Table 24.79. Arguments</b></p>
12173<div class="table-contents"><table class="table" summary="Arguments">
12174<colgroup>
12175<col>
12176<col>
12177</colgroup>
12178<thead><tr>
12179<th>
12180                  <p>
12181                    Name
12182                  </p>
12183                </th>
12184<th>
12185                  <p>
12186                    Type
12187                  </p>
12188                </th>
12189</tr></thead>
12190<tbody><tr>
12191<td>
12192                  <p>
12193                    <code class="computeroutput"><span class="identifier">Ps</span></code>
12194                  </p>
12195                </td>
12196<td>
12197                  <p>
12198                    <a class="link" href="reference.html#parser">parser</a>s
12199                  </p>
12200                </td>
12201</tr></tbody>
12202</table></div>
12203</div>
12204<br class="table-break"><h2>
12205<a name="metaparse.reference.alphabetical.sequence.h1"></a>
12206          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence.description">Description</a>
12207        </h2>
12208<p>
12209          <code class="computeroutput"><span class="identifier">sequence</span></code> applies the <code class="computeroutput"><span class="identifier">Ps</span><span class="special">...</span></code>
12210          parsers in sequence on the input. It accepts an input when all of these
12211          parsers accept it. The result of parsing is a sequence of the results of
12212          the parsers.
12213        </p>
12214<p>
12215          On compilers, which are not C++11-compliant, the maximum number of parsers
12216          <code class="computeroutput"><span class="identifier">sequence</span></code> accepts can be
12217          specified with the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span></code>
12218          macro. Its default value is <code class="computeroutput"><span class="number">5</span></code>.
12219        </p>
12220<h2>
12221<a name="metaparse.reference.alphabetical.sequence.h2"></a>
12222          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence.header">Header</a>
12223        </h2>
12224<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">metaparse</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12225</pre>
12226<h2>
12227<a name="metaparse.reference.alphabetical.sequence.h3"></a>
12228          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence.expression_semantics">Expression
12229          semantics</a>
12230        </h2>
12231<p>
12232          For any <code class="computeroutput"><span class="identifier">n</span> <span class="special">&gt;</span>
12233          <span class="number">0</span></code>, <code class="computeroutput"><span class="identifier">p0</span></code>,
12234          ..., <code class="computeroutput"><span class="identifier">pn</span></code> parsers the result
12235          of <code class="computeroutput"><span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">p1</span><span class="special">&gt;</span></code> is a compile-time sequence of the results
12236          of the parsers, applied after each other in order on the input string when
12237          none of them returns an error. The remaining string is the remaining string
12238          the last parser returns.
12239        </p>
12240<p>
12241          When one of the parsers returns an error, the combinator returns that error.
12242        </p>
12243<h2>
12244<a name="metaparse.reference.alphabetical.sequence.h4"></a>
12245          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence.example">Example</a>
12246        </h2>
12247<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">metaparse</span><span class="special">/</span><span class="identifier">sequence</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12248<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12249<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12250<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12251<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12252<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12253<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12254<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12255
12256<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">at</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12257
12258<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12259
12260<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
12261<span class="keyword">using</span> <span class="identifier">plus_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;&gt;;</span>
12262
12263<span class="keyword">using</span> <span class="identifier">a_plus_b</span> <span class="special">=</span> <span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">&gt;;</span>
12264
12265<span class="keyword">static_assert</span><span class="special">(</span>
12266  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span>
12267    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 + 2"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12268    <span class="number">0</span>
12269  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">1</span><span class="special">,</span>
12270  <span class="string">"the first element of the sequence should be the first number"</span>
12271<span class="special">);</span>
12272
12273<span class="keyword">static_assert</span><span class="special">(</span>
12274  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span>
12275    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 + 2"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12276    <span class="number">1</span>
12277  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="char">'+'</span><span class="special">,</span>
12278  <span class="string">"the second element of the sequence should be the plus"</span>
12279<span class="special">);</span>
12280
12281<span class="keyword">static_assert</span><span class="special">(</span>
12282  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span>
12283    <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 + 2"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12284    <span class="number">2</span>
12285  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">2</span><span class="special">,</span>
12286  <span class="string">"the third element of the sequence should be the second number"</span>
12287<span class="special">);</span>
12288
12289<span class="keyword">static_assert</span><span class="special">(</span>
12290  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 +"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12291  <span class="string">"when not all of the parsers accept the input, sequence should fail"</span>
12292<span class="special">);</span>
12293</pre>
12294</div>
12295<div class="section">
12296<div class="titlepage"><div><div><h4 class="title">
12297<a name="metaparse.reference.alphabetical.sequence_apply"></a><a name="sequence_apply"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply" title="sequence_apply">sequence_apply</a>
12298</h4></div></div></div>
12299<h2>
12300<a name="metaparse.reference.alphabetical.sequence_apply.h0"></a>
12301          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence_apply.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply.synopsis">Synopsis</a>
12302        </h2>
12303<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">class</span><span class="special">&gt;</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">P1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">class</span> <span class="identifier">Pn</span><span class="special">&gt;</span>
12304<span class="keyword">struct</span> <span class="identifier">sequence_applyn</span><span class="special">;</span>
12305</pre>
12306<p>
12307          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
12308        </p>
12309<div class="table">
12310<a name="metaparse.reference.alphabetical.sequence_apply.arguments"></a><p class="title"><b>Table 24.80. Arguments</b></p>
12311<div class="table-contents"><table class="table" summary="Arguments">
12312<colgroup>
12313<col>
12314<col>
12315</colgroup>
12316<thead><tr>
12317<th>
12318                  <p>
12319                    T
12320                  </p>
12321                </th>
12322<th>
12323                  <p>
12324                    Template class taking <code class="computeroutput"><span class="identifier">n</span></code>
12325                    arguments
12326                  </p>
12327                </th>
12328</tr></thead>
12329<tbody><tr>
12330<td>
12331                  <p>
12332                    <code class="computeroutput"><span class="identifier">P1</span></code>..<code class="computeroutput"><span class="identifier">Pn</span></code>
12333                  </p>
12334                </td>
12335<td>
12336                  <p>
12337                    <a class="link" href="reference.html#parser">parser</a>s
12338                  </p>
12339                </td>
12340</tr></tbody>
12341</table></div>
12342</div>
12343<br class="table-break"><h2>
12344<a name="metaparse.reference.alphabetical.sequence_apply.h1"></a>
12345          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence_apply.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply.description">Description</a>
12346        </h2>
12347<p>
12348          It applies the <code class="computeroutput"><span class="identifier">P1</span></code> ...
12349          <code class="computeroutput"><span class="identifier">Pn</span></code> <a class="link" href="reference.html#parser">parser</a>s
12350          on the input in order. When all of them succeed, the result of parsing
12351          with <code class="computeroutput"><span class="identifier">sequence_applyn</span></code> is
12352          the <code class="computeroutput"><span class="identifier">T</span></code> template class instantiated
12353          with the results of the <code class="computeroutput"><span class="identifier">P1</span></code>
12354          ... <code class="computeroutput"><span class="identifier">Pn</span></code> <a class="link" href="reference.html#parser">parser</a>s.
12355          When any of the <code class="computeroutput"><span class="identifier">P1</span></code> ...
12356          <code class="computeroutput"><span class="identifier">Pn</span></code> <a class="link" href="reference.html#parser">parser</a>s
12357          reject the input, the error is propagated.
12358        </p>
12359<p>
12360          <code class="computeroutput"><span class="identifier">n</span></code> has to be in the <code class="computeroutput"><span class="special">[</span><span class="number">1.</span><span class="special">.</span><span class="identifier">BOOST_METAPARSE_LIMIT_SEQUENCE_SIZE</span><span class="special">)</span></code>
12361          range.
12362        </p>
12363<h2>
12364<a name="metaparse.reference.alphabetical.sequence_apply.h2"></a>
12365          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence_apply.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply.header">Header</a>
12366        </h2>
12367<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">metaparse</span><span class="special">/</span><span class="identifier">sequence_apply</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12368</pre>
12369<h2>
12370<a name="metaparse.reference.alphabetical.sequence_apply.h3"></a>
12371          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence_apply.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply.expression_semantics">Expression
12372          semantics</a>
12373        </h2>
12374<p>
12375          For any <code class="computeroutput"><span class="identifier">n</span> <span class="special">&gt;</span>
12376          <span class="number">0</span></code>, <code class="computeroutput"><span class="identifier">p1</span></code>
12377          ... <code class="computeroutput"><span class="identifier">pn</span></code> <a class="link" href="reference.html#parser">parser</a>s,
12378          <code class="computeroutput"><span class="identifier">t</span></code> template class with
12379          <code class="computeroutput"><span class="identifier">n</span></code> <code class="computeroutput"><span class="keyword">class</span></code>
12380          arguments, <code class="computeroutput"><span class="identifier">s</span></code> compile-time
12381          string and <code class="computeroutput"><span class="identifier">pos</span></code> source position
12382          the following are equivalent:
12383        </p>
12384<pre class="programlisting"><span class="identifier">sequence_apply</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
12385</pre>
12386<p>
12387          when <a class="link" href="reference.html#sequence"><code class="computeroutput"><span class="identifier">sequence</span></code></a><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span></code>
12388          accepts the input:
12389        </p>
12390<pre class="programlisting"><span class="identifier">return_</span><span class="special">&lt;</span>
12391  <span class="identifier">t</span><span class="special">&lt;</span>
12392    <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="number">0</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,...,</span><span class="identifier">pn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12393    <span class="special">...</span>
12394    <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special">&lt;</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,...,</span><span class="identifier">pn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
12395  <span class="special">&gt;</span>
12396<span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
12397</pre>
12398<p>
12399          when <a class="link" href="reference.html#sequence"><code class="computeroutput"><span class="identifier">sequence</span></code></a><code class="computeroutput"><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;</span></code>
12400          rejects the input:
12401        </p>
12402<pre class="programlisting"><span class="identifier">sequence</span><span class="special">&lt;</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span>
12403</pre>
12404<h2>
12405<a name="metaparse.reference.alphabetical.sequence_apply.h4"></a>
12406          <span class="phrase"><a name="metaparse.reference.alphabetical.sequence_apply.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.sequence_apply.example">Example</a>
12407        </h2>
12408<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">metaparse</span><span class="special">/</span><span class="identifier">sequence_apply</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12409<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12410<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">middle_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12411<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">lit_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12412<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12413<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12414<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12415
12416<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">type_traits</span><span class="special">/</span><span class="identifier">is_same</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12417
12418<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12419
12420<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">Real</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">Imaginary</span><span class="special">&gt;</span>
12421<span class="keyword">struct</span> <span class="identifier">complex_c</span> <span class="special">{</span> <span class="keyword">typedef</span> <span class="identifier">complex_c</span> <span class="identifier">type</span><span class="special">;</span> <span class="special">};</span>
12422
12423<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Real</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Imaginary</span><span class="special">&gt;</span>
12424<span class="keyword">struct</span> <span class="identifier">complex</span> <span class="special">:</span> <span class="identifier">complex_c</span><span class="special">&lt;</span><span class="identifier">Real</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span> <span class="identifier">Imaginary</span><span class="special">::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">&gt;</span> <span class="special">{};</span>
12425
12426<span class="keyword">typedef</span>
12427  <span class="identifier">sequence_apply2</span><span class="special">&lt;</span><span class="identifier">complex</span><span class="special">,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="identifier">middle_of</span><span class="special">&lt;</span><span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'+'</span><span class="special">&gt;,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special">&lt;</span><span class="char">'i'</span><span class="special">&gt;&gt;&gt;</span>
12428  <span class="identifier">complex_parser</span><span class="special">;</span>
12429
12430<span class="keyword">static_assert</span><span class="special">(</span>
12431  <span class="identifier">boost</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
12432    <span class="identifier">complex_c</span><span class="special">&lt;</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">&gt;,</span>
12433    <span class="identifier">get_result</span><span class="special">&lt;</span>
12434      <span class="identifier">complex_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1+2i"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
12435    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">type</span>
12436  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12437  <span class="string">"the result of parsing should be the list of digit values"</span>
12438<span class="special">);</span>
12439</pre>
12440</div>
12441<div class="section">
12442<div class="titlepage"><div><div><h4 class="title">
12443<a name="metaparse.reference.alphabetical.source_position"></a><a name="source_position"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position" title="source_position">source_position</a>
12444</h4></div></div></div>
12445<h2>
12446<a name="metaparse.reference.alphabetical.source_position.h0"></a>
12447          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.synopsis">Synopsis</a>
12448        </h2>
12449<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">Line</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Col</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">PrevChar</span><span class="special">&gt;</span>
12450<span class="keyword">struct</span> <span class="identifier">source_position</span><span class="special">;</span>
12451</pre>
12452<p>
12453          This is a <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
12454          value</a>.
12455        </p>
12456<div class="table">
12457<a name="metaparse.reference.alphabetical.source_position.arguments"></a><p class="title"><b>Table 24.81. Arguments</b></p>
12458<div class="table-contents"><table class="table" summary="Arguments">
12459<colgroup>
12460<col>
12461<col>
12462</colgroup>
12463<thead><tr>
12464<th>
12465                  <p>
12466                    Name
12467                  </p>
12468                </th>
12469<th>
12470                  <p>
12471                    Type
12472                  </p>
12473                </th>
12474</tr></thead>
12475<tbody>
12476<tr>
12477<td>
12478                  <p>
12479                    <code class="computeroutput"><span class="identifier">Line</span></code>
12480                  </p>
12481                </td>
12482<td>
12483                  <p>
12484                    <a class="link" href="reference.html#boxed_value">boxed</a> integer value
12485                  </p>
12486                </td>
12487</tr>
12488<tr>
12489<td>
12490                  <p>
12491                    <code class="computeroutput"><span class="identifier">Col</span></code>
12492                  </p>
12493                </td>
12494<td>
12495                  <p>
12496                    <a class="link" href="reference.html#boxed_value">boxed</a> integer value
12497                  </p>
12498                </td>
12499</tr>
12500<tr>
12501<td>
12502                  <p>
12503                    <code class="computeroutput"><span class="identifier">PrevChar</span></code>
12504                  </p>
12505                </td>
12506<td>
12507                  <p>
12508                    <a class="link" href="reference.html#boxed_value">boxed</a> character value
12509                  </p>
12510                </td>
12511</tr>
12512</tbody>
12513</table></div>
12514</div>
12515<br class="table-break"><h2>
12516<a name="metaparse.reference.alphabetical.source_position.h1"></a>
12517          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.description">Description</a>
12518        </h2>
12519<p>
12520          Compile-time data-structure describing a position of the input text.
12521        </p>
12522<p>
12523          The values of this data-structure store the last character that was parsed
12524          before reaching the position of the input described by the <code class="computeroutput"><span class="identifier">source_position</span></code> value.
12525        </p>
12526<p>
12527          Its tag is <a class="link" href="reference.html#source_position_tag"><code class="computeroutput"><span class="identifier">source_position_tag</span></code></a>.
12528        </p>
12529<p>
12530          The beginning of the input text is represented by <a class="link" href="reference.html#start"><code class="computeroutput"><span class="identifier">start</span></code></a>.
12531        </p>
12532<h2>
12533<a name="metaparse.reference.alphabetical.source_position.h2"></a>
12534          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.header">Header</a>
12535        </h2>
12536<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">metaparse</span><span class="special">/</span><span class="identifier">source_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12537</pre>
12538<h2>
12539<a name="metaparse.reference.alphabetical.source_position.h3"></a>
12540          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.expression_semantics">Expression
12541          semantics</a>
12542        </h2>
12543<p>
12544          For any <code class="computeroutput"><span class="identifier">l</span></code>, <code class="computeroutput"><span class="identifier">c</span></code> compile-time boxed integral values
12545          and <code class="computeroutput"><span class="identifier">p</span></code> compile-time boxed
12546          character value, the following are equivalent
12547        </p>
12548<pre class="programlisting"><span class="identifier">get_col</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">p</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12549<span class="identifier">c</span><span class="special">::</span><span class="identifier">type</span>
12550
12551<span class="identifier">get_line</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">p</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12552<span class="identifier">l</span><span class="special">::</span><span class="identifier">type</span>
12553
12554<span class="identifier">get_prev_char</span><span class="special">&lt;</span><span class="identifier">source_position</span><span class="special">&lt;</span><span class="identifier">l</span><span class="special">,</span> <span class="identifier">c</span><span class="special">,</span> <span class="identifier">p</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12555<span class="identifier">p</span><span class="special">::</span><span class="identifier">type</span>
12556</pre>
12557<h2>
12558<a name="metaparse.reference.alphabetical.source_position.h4"></a>
12559          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.constant_values_of_this_type"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.constant_values_of_this_type">Constant
12560          values of this type</a>
12561        </h2>
12562<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">
12563              <a class="link" href="reference.html#start"><code class="computeroutput"><span class="identifier">start</span></code></a>
12564            </li></ul></div>
12565<h2>
12566<a name="metaparse.reference.alphabetical.source_position.h5"></a>
12567          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position.operations"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position.operations">Operations</a>
12568        </h2>
12569<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
12570<li class="listitem">
12571              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">equal_to</span></code>
12572            </li>
12573<li class="listitem">
12574              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">greater</span></code>
12575            </li>
12576<li class="listitem">
12577              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">greater_equal</span></code>
12578            </li>
12579<li class="listitem">
12580              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">less</span></code>
12581            </li>
12582<li class="listitem">
12583              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">less_equal</span></code>
12584            </li>
12585<li class="listitem">
12586              <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">not_equal_to</span></code>
12587            </li>
12588<li class="listitem">
12589              <a class="link" href="reference.html#get_col"><code class="computeroutput"><span class="identifier">get_col</span></code></a>
12590            </li>
12591<li class="listitem">
12592              <a class="link" href="reference.html#get_line"><code class="computeroutput"><span class="identifier">get_line</span></code></a>
12593            </li>
12594<li class="listitem">
12595              <a class="link" href="reference.html#get_prev_char"><code class="computeroutput"><span class="identifier">get_prev_char</span></code></a>
12596            </li>
12597<li class="listitem">
12598              <a class="link" href="reference.html#next_char"><code class="computeroutput"><span class="identifier">next_char</span></code></a>
12599            </li>
12600<li class="listitem">
12601              <a class="link" href="reference.html#next_line"><code class="computeroutput"><span class="identifier">next_line</span></code></a>
12602            </li>
12603</ul></div>
12604</div>
12605<div class="section">
12606<div class="titlepage"><div><div><h4 class="title">
12607<a name="metaparse.reference.alphabetical.source_position_tag"></a><a name="source_position_tag"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position_tag" title="source_position_tag">source_position_tag</a>
12608</h4></div></div></div>
12609<h2>
12610<a name="metaparse.reference.alphabetical.source_position_tag.h0"></a>
12611          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position_tag.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position_tag.synopsis">Synopsis</a>
12612        </h2>
12613<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">source_position_tag</span><span class="special">;</span>
12614</pre>
12615<p>
12616          This is a <a class="link" href="reference.html#tag">tag</a>.
12617        </p>
12618<h2>
12619<a name="metaparse.reference.alphabetical.source_position_tag.h1"></a>
12620          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position_tag.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position_tag.description">Description</a>
12621        </h2>
12622<p>
12623          This is the tag of the <a class="link" href="reference.html#source_position"><code class="computeroutput"><span class="identifier">source_position</span></code></a>
12624          values.
12625        </p>
12626<h2>
12627<a name="metaparse.reference.alphabetical.source_position_tag.h2"></a>
12628          <span class="phrase"><a name="metaparse.reference.alphabetical.source_position_tag.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.source_position_tag.header">Header</a>
12629        </h2>
12630<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">metaparse</span><span class="special">/</span><span class="identifier">source_position_tag</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12631</pre>
12632</div>
12633<div class="section">
12634<div class="titlepage"><div><div><h4 class="title">
12635<a name="metaparse.reference.alphabetical.space"></a><a name="space"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.space" title="space">space</a>
12636</h4></div></div></div>
12637<h2>
12638<a name="metaparse.reference.alphabetical.space.h0"></a>
12639          <span class="phrase"><a name="metaparse.reference.alphabetical.space.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.space.synopsis">Synopsis</a>
12640        </h2>
12641<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">space</span><span class="special">;</span>
12642</pre>
12643<p>
12644          This is a <a class="link" href="reference.html#parser">parser</a>.
12645        </p>
12646<h2>
12647<a name="metaparse.reference.alphabetical.space.h1"></a>
12648          <span class="phrase"><a name="metaparse.reference.alphabetical.space.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.space.description">Description</a>
12649        </h2>
12650<p>
12651          <code class="computeroutput"><span class="identifier">space</span></code> accepts one white
12652          space character. The result of parsing is the parsed character.
12653        </p>
12654<h2>
12655<a name="metaparse.reference.alphabetical.space.h2"></a>
12656          <span class="phrase"><a name="metaparse.reference.alphabetical.space.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.space.header">Header</a>
12657        </h2>
12658<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">metaparse</span><span class="special">/</span><span class="identifier">space</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12659</pre>
12660<h2>
12661<a name="metaparse.reference.alphabetical.space.h3"></a>
12662          <span class="phrase"><a name="metaparse.reference.alphabetical.space.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.space.expression_semantics">Expression
12663          semantics</a>
12664        </h2>
12665<p>
12666          The following are equivalent:
12667        </p>
12668<pre class="programlisting"><span class="identifier">space</span>
12669
12670<span class="identifier">accept_when</span><span class="special">&lt;</span><span class="identifier">one_char</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">is_whitespace</span><span class="special">&lt;&gt;,</span> <span class="identifier">errors</span><span class="special">::</span><span class="identifier">whitespace_expected</span><span class="special">&gt;</span>
12671</pre>
12672<h2>
12673<a name="metaparse.reference.alphabetical.space.h4"></a>
12674          <span class="phrase"><a name="metaparse.reference.alphabetical.space.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.space.example">Example</a>
12675        </h2>
12676<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">metaparse</span><span class="special">/</span><span class="identifier">space</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12677<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12678<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12679<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12680<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12681
12682<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
12683
12684<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12685
12686<span class="keyword">static_assert</span><span class="special">(</span>
12687  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
12688    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">" foo"</span><span class="special">),</span>
12689    <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">space</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"  foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12690  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12691  <span class="string">"it should consume the first space of the input"</span>
12692<span class="special">);</span>
12693
12694<span class="keyword">static_assert</span><span class="special">(</span>
12695  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">space</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12696  <span class="string">"it should return an error when the input does not begin with a whitespace"</span>
12697<span class="special">);</span>
12698</pre>
12699</div>
12700<div class="section">
12701<div class="titlepage"><div><div><h4 class="title">
12702<a name="metaparse.reference.alphabetical.spaces"></a><a name="spaces"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces" title="spaces">spaces</a>
12703</h4></div></div></div>
12704<h2>
12705<a name="metaparse.reference.alphabetical.spaces.h0"></a>
12706          <span class="phrase"><a name="metaparse.reference.alphabetical.spaces.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces.synopsis">Synopsis</a>
12707        </h2>
12708<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">spaces</span><span class="special">;</span>
12709</pre>
12710<p>
12711          This is a <a class="link" href="reference.html#parser">parser</a>.
12712        </p>
12713<h2>
12714<a name="metaparse.reference.alphabetical.spaces.h1"></a>
12715          <span class="phrase"><a name="metaparse.reference.alphabetical.spaces.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces.description">Description</a>
12716        </h2>
12717<p>
12718          <code class="computeroutput"><span class="identifier">spaces</span></code> accepts any number
12719          of whitespace characters. It requires at least one to be present.
12720        </p>
12721<h2>
12722<a name="metaparse.reference.alphabetical.spaces.h2"></a>
12723          <span class="phrase"><a name="metaparse.reference.alphabetical.spaces.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces.header">Header</a>
12724        </h2>
12725<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">metaparse</span><span class="special">/</span><span class="identifier">spaces</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12726</pre>
12727<h2>
12728<a name="metaparse.reference.alphabetical.spaces.h3"></a>
12729          <span class="phrase"><a name="metaparse.reference.alphabetical.spaces.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces.expression_semantics">Expression
12730          semantics</a>
12731        </h2>
12732<pre class="programlisting"><span class="identifier">spaces</span>
12733</pre>
12734<p>
12735          is equivalent to
12736        </p>
12737<pre class="programlisting"><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">space</span><span class="special">&gt;</span>
12738</pre>
12739<h2>
12740<a name="metaparse.reference.alphabetical.spaces.h4"></a>
12741          <span class="phrase"><a name="metaparse.reference.alphabetical.spaces.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.spaces.example">Example</a>
12742        </h2>
12743<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">metaparse</span><span class="special">/</span><span class="identifier">spaces</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12744<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12745<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12746<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12747<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12748
12749<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
12750
12751<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12752
12753<span class="keyword">static_assert</span><span class="special">(</span>
12754  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
12755    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span>
12756    <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">spaces</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"  foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
12757  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12758  <span class="string">"it should consume all whitespaces at the beginning of the input"</span>
12759<span class="special">);</span>
12760
12761<span class="keyword">static_assert</span><span class="special">(</span>
12762  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">spaces</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12763  <span class="string">"it should return an error when the input does not begin with a whitespace"</span>
12764<span class="special">);</span>
12765</pre>
12766</div>
12767<div class="section">
12768<div class="titlepage"><div><div><h4 class="title">
12769<a name="metaparse.reference.alphabetical.start"></a><a name="start"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.start" title="start">start</a>
12770</h4></div></div></div>
12771<h2>
12772<a name="metaparse.reference.alphabetical.start.h0"></a>
12773          <span class="phrase"><a name="metaparse.reference.alphabetical.start.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.start.synopsis">Synopsis</a>
12774        </h2>
12775<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">start</span><span class="special">;</span>
12776</pre>
12777<p>
12778          This is a <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
12779          value</a> of type <a class="link" href="reference.html#source_position">source position</a>.
12780        </p>
12781<h2>
12782<a name="metaparse.reference.alphabetical.start.h1"></a>
12783          <span class="phrase"><a name="metaparse.reference.alphabetical.start.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.start.description">Description</a>
12784        </h2>
12785<p>
12786          It represents the beginning of an input text.
12787        </p>
12788<h2>
12789<a name="metaparse.reference.alphabetical.start.h2"></a>
12790          <span class="phrase"><a name="metaparse.reference.alphabetical.start.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.start.header">Header</a>
12791        </h2>
12792<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">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12793</pre>
12794</div>
12795<div class="section">
12796<div class="titlepage"><div><div><h4 class="title">
12797<a name="metaparse.reference.alphabetical.string"></a><a name="string"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.string" title="string">string</a>
12798</h4></div></div></div>
12799<h2>
12800<a name="metaparse.reference.alphabetical.string.h0"></a>
12801          <span class="phrase"><a name="metaparse.reference.alphabetical.string.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string.synopsis">Synopsis</a>
12802        </h2>
12803<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">char</span> <span class="identifier">C1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">char</span> <span class="identifier">Cn</span><span class="special">&gt;</span>
12804<span class="keyword">struct</span> <span class="identifier">string</span><span class="special">;</span>
12805</pre>
12806<p>
12807          This is a <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
12808          value</a>.
12809        </p>
12810<div class="table">
12811<a name="metaparse.reference.alphabetical.string.arguments"></a><p class="title"><b>Table 24.82. Arguments</b></p>
12812<div class="table-contents"><table class="table" summary="Arguments">
12813<colgroup>
12814<col>
12815<col>
12816</colgroup>
12817<thead><tr>
12818<th>
12819                  <p>
12820                    Name
12821                  </p>
12822                </th>
12823<th>
12824                  <p>
12825                    Type
12826                  </p>
12827                </th>
12828</tr></thead>
12829<tbody><tr>
12830<td>
12831                  <p>
12832                    <code class="computeroutput"><span class="identifier">C1</span></code>..<code class="computeroutput"><span class="identifier">Cn</span></code>
12833                  </p>
12834                </td>
12835<td>
12836                  <p>
12837                    character values
12838                  </p>
12839                </td>
12840</tr></tbody>
12841</table></div>
12842</div>
12843<br class="table-break"><h2>
12844<a name="metaparse.reference.alphabetical.string.h1"></a>
12845          <span class="phrase"><a name="metaparse.reference.alphabetical.string.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string.description">Description</a>
12846        </h2>
12847<p>
12848          Compile-time data-structure describing a string object. These string objects
12849          are compatible with <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">string</span></code>,
12850          but they accept only individual characters as arguments. When <code class="computeroutput"><span class="keyword">constexpr</span></code> is available, they can be constructed
12851          using the <a class="link" href="reference.html#BOOST_METAPARSE_STRING"><code class="computeroutput"><span class="identifier">BOOST_METAPARSE_STRING</span></code></a>
12852          macro.
12853        </p>
12854<p>
12855          The tag of the strings is <a class="link" href="reference.html#string_tag"><code class="computeroutput"><span class="identifier">string_tag</span></code></a>.
12856        </p>
12857<p>
12858          <span class="bold"><strong>C++98</strong></span>: The maximum length of these strings
12859          is controlled by the <code class="computeroutput"><span class="identifier">BOOST_METAPARSE_LIMIT_STRING_SIZE</span></code>
12860          macro.
12861        </p>
12862<p>
12863          <span class="bold"><strong>C++11</strong></span>: The strings use variadic templates.
12864        </p>
12865<h2>
12866<a name="metaparse.reference.alphabetical.string.h2"></a>
12867          <span class="phrase"><a name="metaparse.reference.alphabetical.string.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string.header">Header</a>
12868        </h2>
12869<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">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12870</pre>
12871<h2>
12872<a name="metaparse.reference.alphabetical.string.h3"></a>
12873          <span class="phrase"><a name="metaparse.reference.alphabetical.string.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string.example">Example</a>
12874        </h2>
12875<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">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12876
12877<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
12878
12879<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
12880
12881<span class="keyword">using</span> <span class="identifier">hello1</span> <span class="special">=</span> <span class="identifier">string</span><span class="special">&lt;</span><span class="char">'H'</span><span class="special">,</span><span class="char">'e'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'l'</span><span class="special">,</span><span class="char">'o'</span><span class="special">&gt;;</span>
12882<span class="keyword">using</span> <span class="identifier">hello2</span> <span class="special">=</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">);</span>
12883
12884<span class="keyword">static_assert</span><span class="special">(</span>
12885  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
12886    <span class="identifier">string</span><span class="special">&lt;</span><span class="char">'H'</span><span class="special">,</span> <span class="char">'e'</span><span class="special">,</span> <span class="char">'l'</span><span class="special">,</span> <span class="char">'l'</span><span class="special">,</span> <span class="char">'o'</span><span class="special">&gt;,</span>
12887    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"Hello"</span><span class="special">)</span>
12888  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
12889  <span class="string">"The type generated by the macro should be identical to the hand-crafted one."</span>
12890<span class="special">);</span>
12891</pre>
12892</div>
12893<div class="section">
12894<div class="titlepage"><div><div><h4 class="title">
12895<a name="metaparse.reference.alphabetical.string_tag"></a><a name="string_tag"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.string_tag" title="string_tag">string_tag</a>
12896</h4></div></div></div>
12897<h2>
12898<a name="metaparse.reference.alphabetical.string_tag.h0"></a>
12899          <span class="phrase"><a name="metaparse.reference.alphabetical.string_tag.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string_tag.synopsis">Synopsis</a>
12900        </h2>
12901<pre class="programlisting"><span class="keyword">struct</span> <span class="identifier">string_tag</span><span class="special">;</span>
12902</pre>
12903<p>
12904          This is a <a class="link" href="reference.html#tag">tag</a>.
12905        </p>
12906<h2>
12907<a name="metaparse.reference.alphabetical.string_tag.h1"></a>
12908          <span class="phrase"><a name="metaparse.reference.alphabetical.string_tag.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string_tag.description">Description</a>
12909        </h2>
12910<p>
12911          This is the tag of the <a class="link" href="reference.html#string"><code class="computeroutput"><span class="identifier">string</span></code></a>
12912          values.
12913        </p>
12914<h2>
12915<a name="metaparse.reference.alphabetical.string_tag.h2"></a>
12916          <span class="phrase"><a name="metaparse.reference.alphabetical.string_tag.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.string_tag.header">Header</a>
12917        </h2>
12918<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">metaparse</span><span class="special">/</span><span class="identifier">string_tag</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12919</pre>
12920</div>
12921<div class="section">
12922<div class="titlepage"><div><div><h4 class="title">
12923<a name="metaparse.reference.alphabetical.tag"></a><a name="tag"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.tag" title="Tag">Tag</a>
12924</h4></div></div></div>
12925<p>
12926          A <span class="emphasis"><em>tag</em></span> is a <a class="link" href="reference.html#metaprogramming_value">template
12927          metaprogramming value</a> used to identify groups of values.
12928        </p>
12929</div>
12930<div class="section">
12931<div class="titlepage"><div><div><h4 class="title">
12932<a name="metaparse.reference.alphabetical.token"></a><a name="token"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.token" title="token">token</a>
12933</h4></div></div></div>
12934<h2>
12935<a name="metaparse.reference.alphabetical.token.h0"></a>
12936          <span class="phrase"><a name="metaparse.reference.alphabetical.token.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.token.synopsis">Synopsis</a>
12937        </h2>
12938<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">&gt;</span>
12939<span class="keyword">struct</span> <span class="identifier">token</span><span class="special">;</span>
12940</pre>
12941<p>
12942          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
12943        </p>
12944<div class="table">
12945<a name="metaparse.reference.alphabetical.token.arguments"></a><p class="title"><b>Table 24.83. Arguments</b></p>
12946<div class="table-contents"><table class="table" summary="Arguments">
12947<colgroup>
12948<col>
12949<col>
12950</colgroup>
12951<thead><tr>
12952<th>
12953                  <p>
12954                    Name
12955                  </p>
12956                </th>
12957<th>
12958                  <p>
12959                    Type
12960                  </p>
12961                </th>
12962</tr></thead>
12963<tbody><tr>
12964<td>
12965                  <p>
12966                    <code class="computeroutput"><span class="identifier">P</span></code>
12967                  </p>
12968                </td>
12969<td>
12970                  <p>
12971                    <a class="link" href="reference.html#parser">parser</a>
12972                  </p>
12973                </td>
12974</tr></tbody>
12975</table></div>
12976</div>
12977<br class="table-break"><h2>
12978<a name="metaparse.reference.alphabetical.token.h1"></a>
12979          <span class="phrase"><a name="metaparse.reference.alphabetical.token.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.token.description">Description</a>
12980        </h2>
12981<p>
12982          <code class="computeroutput"><span class="identifier">token</span></code> parses the input
12983          using <code class="computeroutput"><span class="identifier">P</span></code> when it succeeds,
12984          <code class="computeroutput"><span class="identifier">token</span></code> consumes all whitespaces
12985          afterwards. The result of parsing is the result of <code class="computeroutput"><span class="identifier">P</span></code>.
12986        </p>
12987<h2>
12988<a name="metaparse.reference.alphabetical.token.h2"></a>
12989          <span class="phrase"><a name="metaparse.reference.alphabetical.token.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.token.header">Header</a>
12990        </h2>
12991<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">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
12992</pre>
12993<h2>
12994<a name="metaparse.reference.alphabetical.token.h3"></a>
12995          <span class="phrase"><a name="metaparse.reference.alphabetical.token.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.token.expression_semantics">Expression
12996          semantics</a>
12997        </h2>
12998<p>
12999          For any <code class="computeroutput"><span class="identifier">p</span></code> parser the following
13000          are equivalent:
13001        </p>
13002<pre class="programlisting"><span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">&gt;</span>
13003
13004<span class="identifier">first_of</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">spaces</span><span class="special">&gt;</span>
13005</pre>
13006<h2>
13007<a name="metaparse.reference.alphabetical.token.h4"></a>
13008          <span class="phrase"><a name="metaparse.reference.alphabetical.token.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.token.example">Example</a>
13009        </h2>
13010<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">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13011<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">int_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13012<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13013<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13014<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_remaining</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13015<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13016<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13017
13018<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
13019
13020<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
13021
13022<span class="keyword">using</span> <span class="identifier">int_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">int_</span><span class="special">&gt;;</span>
13023
13024<span class="keyword">static_assert</span><span class="special">(</span>
13025  <span class="identifier">get_result</span><span class="special">&lt;</span>
13026    <span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13 "</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13027  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13028  <span class="string">"the result of int_token is the number"</span>
13029<span class="special">);</span>
13030
13031<span class="keyword">static_assert</span><span class="special">(</span>
13032  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
13033    <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">""</span><span class="special">),</span>
13034    <span class="identifier">get_remaining</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13 "</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
13035  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13036  <span class="string">"token consumes whitespaces after the number"</span>
13037<span class="special">);</span>
13038
13039<span class="keyword">static_assert</span><span class="special">(</span>
13040  <span class="identifier">get_result</span><span class="special">&lt;</span>
13041    <span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"13"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13042  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13043  <span class="string">"whitespaces after the number are optional"</span>
13044<span class="special">);</span>
13045
13046<span class="keyword">static_assert</span><span class="special">(</span>
13047  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13048  <span class="string">"when there is no number, token fails"</span>
13049<span class="special">);</span>
13050</pre>
13051</div>
13052<div class="section">
13053<div class="titlepage"><div><div><h4 class="title">
13054<a name="metaparse.reference.alphabetical.transform_error_message"></a><a name="transform_error_message"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message" title="transform_error_message">transform_error_message</a>
13055</h4></div></div></div>
13056<h2>
13057<a name="metaparse.reference.alphabetical.transform_error_message.h0"></a>
13058          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error_message.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message.synopsis">Synopsis</a>
13059        </h2>
13060<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
13061<span class="keyword">struct</span> <span class="identifier">transform_error_message</span><span class="special">;</span>
13062</pre>
13063<p>
13064          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
13065        </p>
13066<div class="table">
13067<a name="metaparse.reference.alphabetical.transform_error_message.arguments"></a><p class="title"><b>Table 24.84. Arguments</b></p>
13068<div class="table-contents"><table class="table" summary="Arguments">
13069<colgroup>
13070<col>
13071<col>
13072</colgroup>
13073<thead><tr>
13074<th>
13075                  <p>
13076                    Name
13077                  </p>
13078                </th>
13079<th>
13080                  <p>
13081                    Type
13082                  </p>
13083                </th>
13084</tr></thead>
13085<tbody>
13086<tr>
13087<td>
13088                  <p>
13089                    <code class="computeroutput"><span class="identifier">P</span></code>
13090                  </p>
13091                </td>
13092<td>
13093                  <p>
13094                    <a class="link" href="reference.html#parser">parser</a>
13095                  </p>
13096                </td>
13097</tr>
13098<tr>
13099<td>
13100                  <p>
13101                    <code class="computeroutput"><span class="identifier">F</span></code>
13102                  </p>
13103                </td>
13104<td>
13105                  <p>
13106                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
13107                    taking one argument
13108                  </p>
13109                </td>
13110</tr>
13111</tbody>
13112</table></div>
13113</div>
13114<br class="table-break"><h2>
13115<a name="metaparse.reference.alphabetical.transform_error_message.h1"></a>
13116          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error_message.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message.description">Description</a>
13117        </h2>
13118<p>
13119          It parses the input with <code class="computeroutput"><span class="identifier">P</span></code>.
13120          When this succeeds, the result of parsing with <code class="computeroutput"><span class="identifier">transform_error_message</span></code>
13121          will be the result of parsing with <code class="computeroutput"><span class="identifier">P</span></code>.
13122          When it fails, the error <code class="computeroutput"><span class="identifier">P</span></code>
13123          returns is forwarded to the caller of <code class="computeroutput"><span class="identifier">transform_error_message</span></code>,
13124          but the message of it is transformed with <code class="computeroutput"><span class="identifier">F</span></code>.
13125        </p>
13126<h2>
13127<a name="metaparse.reference.alphabetical.transform_error_message.h2"></a>
13128          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error_message.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message.header">Header</a>
13129        </h2>
13130<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">metaparse</span><span class="special">/</span><span class="identifier">transform_error_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13131</pre>
13132<h2>
13133<a name="metaparse.reference.alphabetical.transform_error_message.h3"></a>
13134          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error_message.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message.expression_semantics">Expression
13135          semantics</a>
13136        </h2>
13137<p>
13138          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">f</span></code> metafunction class accepting one argument
13139        </p>
13140<pre class="programlisting"><span class="identifier">transform_error_message</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
13141</pre>
13142<p>
13143          is equivalent to <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> when <code class="computeroutput"><span class="identifier">p</span></code>
13144          accepts the input. It is equivalent to <code class="computeroutput"><span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">f</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">get_message</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;,</span> <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;&gt;</span></code> otherwise.
13145        </p>
13146<h2>
13147<a name="metaparse.reference.alphabetical.transform_error_message.h4"></a>
13148          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error_message.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error_message.example">Example</a>
13149        </h2>
13150<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">metaparse</span><span class="special">/</span><span class="identifier">transform_error_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13151<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13152<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13153<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">keyword</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13154<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13155<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13156<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13157<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13158<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13159<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13160<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13161<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13162
13163<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
13164
13165<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
13166
13167<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">name_expected</span><span class="special">,</span> <span class="string">"Name expected"</span><span class="special">);</span>
13168
13169<span class="keyword">struct</span> <span class="identifier">return_name_expected</span>
13170<span class="special">{</span>
13171  <span class="keyword">typedef</span> <span class="identifier">return_name_expected</span> <span class="identifier">type</span><span class="special">;</span>
13172
13173  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span><span class="special">&gt;</span>
13174  <span class="keyword">struct</span> <span class="identifier">apply</span> <span class="special">:</span> <span class="identifier">name_expected</span> <span class="special">{};</span>
13175<span class="special">};</span>
13176
13177<span class="keyword">using</span> <span class="identifier">keyword_name</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)&gt;&gt;;</span>
13178<span class="keyword">using</span> <span class="identifier">name_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">&gt;&gt;;</span>
13179
13180<span class="keyword">using</span> <span class="identifier">name_parser</span> <span class="special">=</span>
13181  <span class="identifier">last_of</span><span class="special">&lt;</span>
13182    <span class="identifier">keyword_name</span><span class="special">,</span>
13183    <span class="identifier">transform_error_message</span><span class="special">&lt;</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">return_name_expected</span><span class="special">&gt;</span>
13184  <span class="special">&gt;;</span>
13185
13186<span class="keyword">static_assert</span><span class="special">(</span>
13187  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
13188    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name Bela"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13189  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13190  <span class="string">"name_parser should accept \"name &lt;a name&gt;\""</span>
13191<span class="special">);</span>
13192
13193<span class="keyword">static_assert</span><span class="special">(</span>
13194  <span class="identifier">is_error</span><span class="special">&lt;</span>
13195    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13196  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13197  <span class="string">"name_parser should reject input when name is a question mark"</span>
13198<span class="special">);</span>
13199
13200<span class="keyword">static_assert</span><span class="special">(</span>
13201  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
13202    <span class="identifier">get_message</span><span class="special">&lt;</span>
13203      <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13204    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
13205    <span class="identifier">name_expected</span>
13206  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13207  <span class="string">"the error message should be the one specified by change_error_message"</span>
13208<span class="special">);</span>
13209</pre>
13210</div>
13211<div class="section">
13212<div class="titlepage"><div><div><h4 class="title">
13213<a name="metaparse.reference.alphabetical.transform_error"></a><a name="transform_error"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error" title="transform_error">transform_error</a>
13214</h4></div></div></div>
13215<h2>
13216<a name="metaparse.reference.alphabetical.transform_error.h0"></a>
13217          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error.synopsis">Synopsis</a>
13218        </h2>
13219<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">F</span><span class="special">&gt;</span>
13220<span class="keyword">struct</span> <span class="identifier">transform_error</span><span class="special">;</span>
13221</pre>
13222<p>
13223          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
13224        </p>
13225<div class="table">
13226<a name="metaparse.reference.alphabetical.transform_error.arguments"></a><p class="title"><b>Table 24.85. Arguments</b></p>
13227<div class="table-contents"><table class="table" summary="Arguments">
13228<colgroup>
13229<col>
13230<col>
13231</colgroup>
13232<thead><tr>
13233<th>
13234                  <p>
13235                    Name
13236                  </p>
13237                </th>
13238<th>
13239                  <p>
13240                    Type
13241                  </p>
13242                </th>
13243</tr></thead>
13244<tbody>
13245<tr>
13246<td>
13247                  <p>
13248                    <code class="computeroutput"><span class="identifier">P</span></code>
13249                  </p>
13250                </td>
13251<td>
13252                  <p>
13253                    <a class="link" href="reference.html#parser">parser</a>
13254                  </p>
13255                </td>
13256</tr>
13257<tr>
13258<td>
13259                  <p>
13260                    <code class="computeroutput"><span class="identifier">F</span></code>
13261                  </p>
13262                </td>
13263<td>
13264                  <p>
13265                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
13266                    taking one argument
13267                  </p>
13268                </td>
13269</tr>
13270</tbody>
13271</table></div>
13272</div>
13273<br class="table-break"><h2>
13274<a name="metaparse.reference.alphabetical.transform_error.h1"></a>
13275          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error.description">Description</a>
13276        </h2>
13277<p>
13278          It parses the input with <code class="computeroutput"><span class="identifier">P</span></code>.
13279          When this succeeds, the result of parsing with <code class="computeroutput"><span class="identifier">transform_error</span></code>
13280          will be the result of parsing with <code class="computeroutput"><span class="identifier">P</span></code>.
13281          When it fails, <code class="computeroutput"><span class="identifier">F</span></code> is evaluated
13282          with the error <code class="computeroutput"><span class="identifier">P</span></code> returned
13283          as argument. Parsing with <code class="computeroutput"><span class="identifier">transform_error</span></code>
13284          will fail and the error will be what <code class="computeroutput"><span class="identifier">F</span></code>
13285          returns. Therefore, <code class="computeroutput"><span class="identifier">F</span></code> is
13286          expected to accept and return a <a class="link" href="reference.html#reject"><code class="computeroutput"><span class="identifier">reject</span></code></a>
13287          value.
13288        </p>
13289<h2>
13290<a name="metaparse.reference.alphabetical.transform_error.h2"></a>
13291          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error.header">Header</a>
13292        </h2>
13293<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">metaparse</span><span class="special">/</span><span class="identifier">transform_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13294</pre>
13295<h2>
13296<a name="metaparse.reference.alphabetical.transform_error.h3"></a>
13297          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error.expression_semantics">Expression
13298          semantics</a>
13299        </h2>
13300<p>
13301          For any <code class="computeroutput"><span class="identifier">p</span></code> parser and <code class="computeroutput"><span class="identifier">f</span></code> metafunction class accepting one argument
13302        </p>
13303<pre class="programlisting"><span class="identifier">transform_error</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">f</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span>
13304</pre>
13305<p>
13306          is equivalent to <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> when <code class="computeroutput"><span class="identifier">p</span></code>
13307          accepts the input. It is equivalent to <code class="computeroutput"><span class="identifier">f</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;</span></code> otherwise.
13308        </p>
13309<h2>
13310<a name="metaparse.reference.alphabetical.transform_error.h4"></a>
13311          <span class="phrase"><a name="metaparse.reference.alphabetical.transform_error.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform_error.example">Example</a>
13312        </h2>
13313<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">metaparse</span><span class="special">/</span><span class="identifier">transform_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13314<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">repeated1</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13315<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">letter</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13316<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">keyword</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13317<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">last_of</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13318<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">token</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13319<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13320<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13321<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13322<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13323<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_position</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13324<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13325<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13326
13327<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">mpl</span><span class="special">/</span><span class="identifier">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13328
13329<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
13330
13331<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
13332
13333<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">name_expected</span><span class="special">,</span> <span class="string">"Name expected"</span><span class="special">);</span>
13334
13335<span class="keyword">using</span> <span class="identifier">keyword_name</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">keyword</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)&gt;&gt;;</span>
13336<span class="keyword">using</span> <span class="identifier">name_token</span> <span class="special">=</span> <span class="identifier">token</span><span class="special">&lt;</span><span class="identifier">repeated1</span><span class="special">&lt;</span><span class="identifier">letter</span><span class="special">&gt;&gt;;</span>
13337
13338<span class="keyword">using</span> <span class="identifier">name_parser</span> <span class="special">=</span>
13339  <span class="identifier">last_of</span><span class="special">&lt;</span>
13340    <span class="identifier">keyword_name</span><span class="special">,</span>
13341    <span class="identifier">transform_error</span><span class="special">&lt;</span>
13342      <span class="identifier">name_token</span><span class="special">,</span>
13343      <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">lambda</span><span class="special">&lt;</span>
13344        <span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">name_expected</span><span class="special">,</span> <span class="identifier">get_position</span><span class="special">&lt;</span><span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">_1</span><span class="special">&gt;</span> <span class="special">&gt;</span>
13345      <span class="special">&gt;::</span><span class="identifier">type</span>
13346    <span class="special">&gt;</span>
13347  <span class="special">&gt;;</span>
13348
13349<span class="keyword">static_assert</span><span class="special">(</span>
13350  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
13351    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name Bela"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13352  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13353  <span class="string">"name_parser should accept \"name &lt;a name&gt;\""</span>
13354<span class="special">);</span>
13355
13356<span class="keyword">static_assert</span><span class="special">(</span>
13357  <span class="identifier">is_error</span><span class="special">&lt;</span>
13358    <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13359  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13360  <span class="string">"name_parser should reject input when name is a question mark"</span>
13361<span class="special">);</span>
13362
13363<span class="keyword">static_assert</span><span class="special">(</span>
13364  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
13365    <span class="identifier">get_message</span><span class="special">&lt;</span>
13366      <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ?"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13367    <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span>
13368    <span class="identifier">name_expected</span>
13369  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13370  <span class="string">"the error message should be the one specified by change_error_message"</span>
13371<span class="special">);</span>
13372</pre>
13373</div>
13374<div class="section">
13375<div class="titlepage"><div><div><h4 class="title">
13376<a name="metaparse.reference.alphabetical.transform"></a><a name="transform"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.transform" title="transform">transform</a>
13377</h4></div></div></div>
13378<h2>
13379<a name="metaparse.reference.alphabetical.transform.h0"></a>
13380          <span class="phrase"><a name="metaparse.reference.alphabetical.transform.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform.synopsis">Synopsis</a>
13381        </h2>
13382<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
13383<span class="keyword">struct</span> <span class="identifier">transform</span><span class="special">;</span>
13384</pre>
13385<p>
13386          This is a <a class="link" href="reference.html#parser_combinator">parser combinator</a>.
13387        </p>
13388<div class="table">
13389<a name="metaparse.reference.alphabetical.transform.arguments"></a><p class="title"><b>Table 24.86. Arguments</b></p>
13390<div class="table-contents"><table class="table" summary="Arguments">
13391<colgroup>
13392<col>
13393<col>
13394</colgroup>
13395<thead><tr>
13396<th>
13397                  <p>
13398                    Name
13399                  </p>
13400                </th>
13401<th>
13402                  <p>
13403                    Type
13404                  </p>
13405                </th>
13406</tr></thead>
13407<tbody>
13408<tr>
13409<td>
13410                  <p>
13411                    <code class="computeroutput"><span class="identifier">P</span></code>
13412                  </p>
13413                </td>
13414<td>
13415                  <p>
13416                    <a class="link" href="reference.html#parser">parser</a>
13417                  </p>
13418                </td>
13419</tr>
13420<tr>
13421<td>
13422                  <p>
13423                    <code class="computeroutput"><span class="identifier">T</span></code>
13424                  </p>
13425                </td>
13426<td>
13427                  <p>
13428                    <a class="link" href="reference.html#metafunction_class">template metafunction class</a>
13429                    taking one argument
13430                  </p>
13431                </td>
13432</tr>
13433</tbody>
13434</table></div>
13435</div>
13436<br class="table-break"><h2>
13437<a name="metaparse.reference.alphabetical.transform.h1"></a>
13438          <span class="phrase"><a name="metaparse.reference.alphabetical.transform.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform.description">Description</a>
13439        </h2>
13440<p>
13441          <code class="computeroutput"><span class="identifier">transform</span></code> parses the input
13442          using <code class="computeroutput"><span class="identifier">P</span></code> and transforms
13443          the result <code class="computeroutput"><span class="identifier">P</span></code> returns with
13444          <code class="computeroutput"><span class="identifier">T</span></code>. The result of parsing
13445          is what <code class="computeroutput"><span class="identifier">T</span></code> returns. When
13446          <code class="computeroutput"><span class="identifier">P</span></code> fails, the failure is
13447          returned unchanged.
13448        </p>
13449<h2>
13450<a name="metaparse.reference.alphabetical.transform.h2"></a>
13451          <span class="phrase"><a name="metaparse.reference.alphabetical.transform.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform.header">Header</a>
13452        </h2>
13453<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">metaparse</span><span class="special">/</span><span class="identifier">transform</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13454</pre>
13455<h2>
13456<a name="metaparse.reference.alphabetical.transform.h3"></a>
13457          <span class="phrase"><a name="metaparse.reference.alphabetical.transform.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform.expression_semantics">Expression
13458          semantics</a>
13459        </h2>
13460<p>
13461          For any <code class="computeroutput"><span class="identifier">p</span></code> parser, <code class="computeroutput"><span class="identifier">t</span></code> metafunction class accepting one argument,
13462          <code class="computeroutput"><span class="identifier">s</span></code> compile-time string and
13463          <code class="computeroutput"><span class="identifier">pos</span></code> source position
13464        </p>
13465<pre class="programlisting"><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">&gt;::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span>
13466</pre>
13467<p>
13468          is equivalent to
13469        </p>
13470<pre class="programlisting"><span class="identifier">t</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">get_result</span><span class="special">&lt;</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span>
13471</pre>
13472<p>
13473          When <code class="computeroutput"><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">&gt;</span></code> doesn't return an error. The combinator
13474          returns the error otherwise.
13475        </p>
13476<h2>
13477<a name="metaparse.reference.alphabetical.transform.h4"></a>
13478          <span class="phrase"><a name="metaparse.reference.alphabetical.transform.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.transform.example">Example</a>
13479        </h2>
13480<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">metaparse</span><span class="special">/</span><span class="identifier">transform</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13481<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">digit</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13482<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13483<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13484<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">is_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13485<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">get_result</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13486
13487<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">util</span><span class="special">/</span><span class="identifier">digit_to_int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13488
13489<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
13490
13491<span class="keyword">using</span> <span class="identifier">digit_value</span> <span class="special">=</span> <span class="identifier">transform</span><span class="special">&lt;</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">util</span><span class="special">::</span><span class="identifier">digit_to_int</span><span class="special">&lt;&gt;&gt;;</span>
13492
13493<span class="keyword">static_assert</span><span class="special">(</span>
13494  <span class="special">!</span><span class="identifier">is_error</span><span class="special">&lt;</span>
13495    <span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13496  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13497  <span class="string">"digit_val should accept a digit"</span>
13498<span class="special">);</span>
13499
13500<span class="keyword">static_assert</span><span class="special">(</span>
13501  <span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"x"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13502  <span class="string">"digit_val should reject a character"</span>
13503<span class="special">);</span>
13504
13505<span class="keyword">static_assert</span><span class="special">(</span>
13506  <span class="identifier">get_result</span><span class="special">&lt;</span>
13507    <span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special">&lt;</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"0"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;</span>
13508  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> <span class="special">==</span> <span class="number">0</span><span class="special">,</span>
13509  <span class="string">"the result of parsing should be the int value"</span>
13510<span class="special">);</span>
13511</pre>
13512</div>
13513<div class="section">
13514<div class="titlepage"><div><div><h4 class="title">
13515<a name="metaparse.reference.alphabetical.unexpected_character"></a><a name="unexpected_character"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_character" title="unexpected_character">unexpected_character</a>
13516</h4></div></div></div>
13517<h2>
13518<a name="metaparse.reference.alphabetical.unexpected_character.h0"></a>
13519          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_character.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_character.synopsis">Synopsis</a>
13520        </h2>
13521<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
13522<span class="special">{</span>
13523  <span class="keyword">struct</span> <span class="identifier">unexpected_character</span><span class="special">;</span>
13524<span class="special">}</span>
13525</pre>
13526<p>
13527          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
13528        </p>
13529<h2>
13530<a name="metaparse.reference.alphabetical.unexpected_character.h1"></a>
13531          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_character.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_character.description">Description</a>
13532        </h2>
13533<p>
13534          Class representing the error that a different character was expected than
13535          what was found at a specific location.
13536        </p>
13537<h2>
13538<a name="metaparse.reference.alphabetical.unexpected_character.h2"></a>
13539          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_character.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_character.header">Header</a>
13540        </h2>
13541<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">unexpected_character</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13542</pre>
13543</div>
13544<div class="section">
13545<div class="titlepage"><div><div><h4 class="title">
13546<a name="metaparse.reference.alphabetical.unexpected_end_of_input"></a><a name="unexpected_end_of_input"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_end_of_input" title="unexpected_end_of_input">unexpected_end_of_input</a>
13547</h4></div></div></div>
13548<h2>
13549<a name="metaparse.reference.alphabetical.unexpected_end_of_input.h0"></a>
13550          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_end_of_input.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_end_of_input.synopsis">Synopsis</a>
13551        </h2>
13552<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
13553<span class="special">{</span>
13554  <span class="keyword">struct</span> <span class="identifier">unexpected_end_of_input</span><span class="special">;</span>
13555<span class="special">}</span>
13556</pre>
13557<p>
13558          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
13559        </p>
13560<h2>
13561<a name="metaparse.reference.alphabetical.unexpected_end_of_input.h1"></a>
13562          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_end_of_input.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_end_of_input.description">Description</a>
13563        </h2>
13564<p>
13565          Class representing the error that the end of input has been reached while
13566          it should contain further characters.
13567        </p>
13568<h2>
13569<a name="metaparse.reference.alphabetical.unexpected_end_of_input.h2"></a>
13570          <span class="phrase"><a name="metaparse.reference.alphabetical.unexpected_end_of_input.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unexpected_end_of_input.header">Header</a>
13571        </h2>
13572<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">unexpected_end_of_input</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13573</pre>
13574</div>
13575<div class="section">
13576<div class="titlepage"><div><div><h4 class="title">
13577<a name="metaparse.reference.alphabetical.unless_error"></a><a name="unless_error"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error" title="unless_error">unless_error</a>
13578</h4></div></div></div>
13579<h2>
13580<a name="metaparse.reference.alphabetical.unless_error.h0"></a>
13581          <span class="phrase"><a name="metaparse.reference.alphabetical.unless_error.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error.synopsis">Synopsis</a>
13582        </h2>
13583<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">NotErrorCase</span><span class="special">&gt;</span>
13584<span class="keyword">struct</span> <span class="identifier">unless_error</span><span class="special">;</span>
13585</pre>
13586<p>
13587          This is a <a class="link" href="reference.html#lazy_metafunction">lazy template metafunction</a>.
13588        </p>
13589<div class="table">
13590<a name="metaparse.reference.alphabetical.unless_error.arguments"></a><p class="title"><b>Table 24.87. Arguments</b></p>
13591<div class="table-contents"><table class="table" summary="Arguments">
13592<colgroup>
13593<col>
13594<col>
13595</colgroup>
13596<thead><tr>
13597<th>
13598                  <p>
13599                    Name
13600                  </p>
13601                </th>
13602<th>
13603                  <p>
13604                    Type
13605                  </p>
13606                </th>
13607</tr></thead>
13608<tbody>
13609<tr>
13610<td>
13611                  <p>
13612                    <code class="computeroutput"><span class="identifier">T</span></code>
13613                  </p>
13614                </td>
13615<td>
13616                  <p>
13617                    <a class="link" href="reference.html#accept">accept</a> or <a class="link" href="reference.html#reject">reject</a>
13618                    value
13619                  </p>
13620                </td>
13621</tr>
13622<tr>
13623<td>
13624                  <p>
13625                    <code class="computeroutput"><span class="identifier">NotErrorCase</span></code>
13626                  </p>
13627                </td>
13628<td>
13629                  <p>
13630                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
13631                    value</a>
13632                  </p>
13633                </td>
13634</tr>
13635</tbody>
13636</table></div>
13637</div>
13638<br class="table-break"><h2>
13639<a name="metaparse.reference.alphabetical.unless_error.h1"></a>
13640          <span class="phrase"><a name="metaparse.reference.alphabetical.unless_error.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error.description">Description</a>
13641        </h2>
13642<p>
13643          Checks if <code class="computeroutput"><span class="identifier">T</span></code> is a parsing
13644          error or not. When it is, the result is <code class="computeroutput"><span class="identifier">T</span></code>.
13645          When it is not, the result is <code class="computeroutput"><span class="identifier">NotErrorCase</span></code>.
13646        </p>
13647<h2>
13648<a name="metaparse.reference.alphabetical.unless_error.h2"></a>
13649          <span class="phrase"><a name="metaparse.reference.alphabetical.unless_error.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error.header">Header</a>
13650        </h2>
13651<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">metaparse</span><span class="special">/</span><span class="identifier">unless_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13652</pre>
13653<h2>
13654<a name="metaparse.reference.alphabetical.unless_error.h3"></a>
13655          <span class="phrase"><a name="metaparse.reference.alphabetical.unless_error.expression_semantics"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error.expression_semantics">Expression
13656          semantics</a>
13657        </h2>
13658<p>
13659          For any <code class="computeroutput"><span class="identifier">t</span></code> and <code class="computeroutput"><span class="identifier">c</span></code> classes the following are equivalent:
13660        </p>
13661<pre class="programlisting"><span class="identifier">unless_error</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;</span>
13662
13663<span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">if_</span><span class="special">&lt;</span><span class="identifier">is_error</span><span class="special">&lt;</span><span class="identifier">t</span><span class="special">::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">t</span><span class="special">,</span> <span class="identifier">c</span><span class="special">&gt;</span>
13664</pre>
13665<h2>
13666<a name="metaparse.reference.alphabetical.unless_error.h4"></a>
13667          <span class="phrase"><a name="metaparse.reference.alphabetical.unless_error.example"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unless_error.example">Example</a>
13668        </h2>
13669<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">metaparse</span><span class="special">/</span><span class="identifier">unless_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13670<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">accept</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13671<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">reject</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13672<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">start</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13673<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">string</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13674<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">metaparse</span><span class="special">/</span><span class="identifier">define_error</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13675
13676<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">type_traits</span><span class="special">&gt;</span>
13677
13678<span class="keyword">using</span> <span class="keyword">namespace</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">metaparse</span><span class="special">;</span>
13679
13680<span class="identifier">BOOST_METAPARSE_DEFINE_ERROR</span><span class="special">(</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="string">"Sample error message"</span><span class="special">);</span>
13681
13682<span class="keyword">using</span> <span class="identifier">accept1</span> <span class="special">=</span>
13683  <span class="identifier">accept</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">&gt;,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"foo"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;;</span>
13684
13685<span class="keyword">using</span> <span class="identifier">accept2</span> <span class="special">=</span>
13686  <span class="identifier">accept</span><span class="special">&lt;</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">&gt;,</span> <span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"bar"</span><span class="special">),</span> <span class="identifier">start</span><span class="special">&gt;;</span>
13687
13688<span class="keyword">using</span> <span class="identifier">reject1</span> <span class="special">=</span> <span class="identifier">reject</span><span class="special">&lt;</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">&gt;;</span>
13689
13690<span class="keyword">struct</span> <span class="identifier">returns_accept1</span> <span class="special">{</span> <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">accept1</span><span class="special">;</span> <span class="special">};</span>
13691<span class="keyword">struct</span> <span class="identifier">returns_accept2</span> <span class="special">{</span> <span class="keyword">using</span> <span class="identifier">type</span> <span class="special">=</span> <span class="identifier">accept2</span><span class="special">;</span> <span class="special">};</span>
13692
13693<span class="keyword">static_assert</span><span class="special">(</span>
13694  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">accept2</span><span class="special">,</span> <span class="identifier">unless_error</span><span class="special">&lt;</span><span class="identifier">accept1</span><span class="special">,</span> <span class="identifier">accept2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13695  <span class="string">"it returns the second argument when the first argument is an accept"</span>
13696<span class="special">);</span>
13697
13698<span class="keyword">static_assert</span><span class="special">(</span>
13699  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span><span class="identifier">reject1</span><span class="special">,</span> <span class="identifier">unless_error</span><span class="special">&lt;</span><span class="identifier">reject1</span><span class="special">,</span> <span class="identifier">accept2</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13700  <span class="string">"it returns the first argument when that is a reject"</span>
13701<span class="special">);</span>
13702
13703<span class="keyword">static_assert</span><span class="special">(</span>
13704  <span class="identifier">std</span><span class="special">::</span><span class="identifier">is_same</span><span class="special">&lt;</span>
13705    <span class="identifier">accept2</span><span class="special">,</span>
13706    <span class="identifier">unless_error</span><span class="special">&lt;</span><span class="identifier">returns_accept1</span><span class="special">,</span> <span class="identifier">returns_accept2</span><span class="special">&gt;::</span><span class="identifier">type</span>
13707  <span class="special">&gt;::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span><span class="special">,</span>
13708  <span class="string">"it supports lazy evaluation"</span>
13709<span class="special">);</span>
13710</pre>
13711</div>
13712<div class="section">
13713<div class="titlepage"><div><div><h4 class="title">
13714<a name="metaparse.reference.alphabetical.unpaired"></a><a name="unpaired"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.unpaired" title="unpaired">unpaired</a>
13715</h4></div></div></div>
13716<h2>
13717<a name="metaparse.reference.alphabetical.unpaired.h0"></a>
13718          <span class="phrase"><a name="metaparse.reference.alphabetical.unpaired.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unpaired.synopsis">Synopsis</a>
13719        </h2>
13720<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
13721<span class="special">{</span>
13722  <span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">Line</span><span class="special">,</span> <span class="keyword">int</span> <span class="identifier">Col</span><span class="special">,</span> <span class="keyword">class</span> <span class="identifier">Msg</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">na</span><span class="special">&gt;</span>
13723  <span class="keyword">struct</span> <span class="identifier">unpaired</span><span class="special">;</span>
13724<span class="special">}</span>
13725</pre>
13726<p>
13727          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
13728        </p>
13729<div class="table">
13730<a name="metaparse.reference.alphabetical.unpaired.arguments"></a><p class="title"><b>Table 24.88. Arguments</b></p>
13731<div class="table-contents"><table class="table" summary="Arguments">
13732<colgroup>
13733<col>
13734<col>
13735</colgroup>
13736<thead><tr>
13737<th>
13738                  <p>
13739                    Name
13740                  </p>
13741                </th>
13742<th>
13743                  <p>
13744                    Type
13745                  </p>
13746                </th>
13747</tr></thead>
13748<tbody>
13749<tr>
13750<td>
13751                  <p>
13752                    <code class="computeroutput"><span class="identifier">Line</span></code>
13753                  </p>
13754                </td>
13755<td>
13756                  <p>
13757                    <code class="computeroutput"><span class="keyword">int</span></code> value
13758                  </p>
13759                </td>
13760</tr>
13761<tr>
13762<td>
13763                  <p>
13764                    <code class="computeroutput"><span class="identifier">Col</span></code>
13765                  </p>
13766                </td>
13767<td>
13768                  <p>
13769                    <code class="computeroutput"><span class="keyword">int</span></code> value
13770                  </p>
13771                </td>
13772</tr>
13773<tr>
13774<td>
13775                  <p>
13776                    <code class="computeroutput"><span class="identifier">Msg</span></code>
13777                  </p>
13778                </td>
13779<td>
13780                  <p>
13781                    <a class="link" href="reference.html#metaprogramming_value">template metaprogramming
13782                    value</a>
13783                  </p>
13784                </td>
13785</tr>
13786</tbody>
13787</table></div>
13788</div>
13789<br class="table-break"><h2>
13790<a name="metaparse.reference.alphabetical.unpaired.h1"></a>
13791          <span class="phrase"><a name="metaparse.reference.alphabetical.unpaired.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unpaired.description">Description</a>
13792        </h2>
13793<p>
13794          Template class representing the error that the closing element of an "<span class="emphasis"><em>opening
13795          element</em></span> ... <span class="emphasis"><em>closing element</em></span>" structure
13796          is missing. (eg. a closing paren is missing). <code class="computeroutput"><span class="identifier">Line</span></code>
13797          and <code class="computeroutput"><span class="identifier">Col</span></code> point to the beginning
13798          of the <span class="emphasis"><em>opening element</em></span> (eg. the opening paren). <code class="computeroutput"><span class="identifier">Msg</span></code> is the error message the parser trying
13799          to parse the <span class="emphasis"><em>closing element</em></span> failed with.
13800        </p>
13801<p>
13802          It supports currying: <code class="computeroutput"><span class="identifier">unpaired</span><span class="special">&lt;</span><span class="identifier">Line</span><span class="special">,</span> <span class="identifier">Col</span><span class="special">&gt;</span></code> is a <a class="link" href="reference.html#metafunction_class">template
13803          metafunction class</a> taking one argument: the <code class="computeroutput"><span class="identifier">Msg</span></code>
13804          element and returning the corresponding <code class="computeroutput"><span class="identifier">unpaired</span></code>
13805          value.
13806        </p>
13807<h2>
13808<a name="metaparse.reference.alphabetical.unpaired.h2"></a>
13809          <span class="phrase"><a name="metaparse.reference.alphabetical.unpaired.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.unpaired.header">Header</a>
13810        </h2>
13811<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">unpaired</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13812</pre>
13813</div>
13814<div class="section">
13815<div class="titlepage"><div><div><h4 class="title">
13816<a name="metaparse.reference.alphabetical.whitespace_expected"></a><a name="whitespace_expected"></a><a class="link" href="reference.html#metaparse.reference.alphabetical.whitespace_expected" title="whitespace_expected">whitespace_expected</a>
13817</h4></div></div></div>
13818<h2>
13819<a name="metaparse.reference.alphabetical.whitespace_expected.h0"></a>
13820          <span class="phrase"><a name="metaparse.reference.alphabetical.whitespace_expected.synopsis"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.whitespace_expected.synopsis">Synopsis</a>
13821        </h2>
13822<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">error</span>
13823<span class="special">{</span>
13824  <span class="keyword">struct</span> <span class="identifier">whitespace_expected</span><span class="special">;</span>
13825<span class="special">}</span>
13826</pre>
13827<p>
13828          This is a <a class="link" href="reference.html#parsing_error_message">parsing error message</a>.
13829        </p>
13830<h2>
13831<a name="metaparse.reference.alphabetical.whitespace_expected.h1"></a>
13832          <span class="phrase"><a name="metaparse.reference.alphabetical.whitespace_expected.description"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.whitespace_expected.description">Description</a>
13833        </h2>
13834<p>
13835          Class representing the error that a whitespace character was expected at
13836          a specific location.
13837        </p>
13838<h2>
13839<a name="metaparse.reference.alphabetical.whitespace_expected.h2"></a>
13840          <span class="phrase"><a name="metaparse.reference.alphabetical.whitespace_expected.header"></a></span><a class="link" href="reference.html#metaparse.reference.alphabetical.whitespace_expected.header">Header</a>
13841        </h2>
13842<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">metaparse</span><span class="special">/</span><span class="identifier">error</span><span class="special">/</span><span class="identifier">whitespace_expected</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
13843</pre>
13844</div>
13845</div>
13846</div>
13847<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
13848<td align="left"></td>
13849<td align="right"><div class="copyright-footer">Copyright © 2015 Abel Sinkovics<p>
13850        Distributed under the Boost Software License, Version 1.0. (See accompanying
13851        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>)
13852      </p>
13853</div></td>
13854</tr></table>
13855<hr>
13856<div class="spirit-nav">
13857<a accesskey="p" href="the_design_of_the_library.html"><img src="../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../metaparse.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="../move.html"><img src="../../../doc/src/images/next.png" alt="Next"></a>
13858</div>
13859</body>
13860</html>
13861