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"><</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">></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"><....>::</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"><</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">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">accept</span><span class="special"><</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">></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"><</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">>::</span><span class="identifier">type</span> 861 862<span class="identifier">accept</span><span class="special"><</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">></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"><</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">></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"><</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">></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"><</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">></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"><</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">></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"><</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">></span><span class="identifier">i</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>>::</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"><</span><span class="identifier">msg</span><span class="special">></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"><</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">></span> 1039<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1040<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1041<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1042<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1043<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1044<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1045<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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">digit_expected</span><span class="special">>;</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"><</span> 1055 <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 1056 <span class="special">>::</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"><</span> 1062 <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 1063 <span class="special">>::</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"><</span> 1069 <span class="identifier">accept_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 1070 <span class="special">>::</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"><</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">></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"><</span><span class="identifier">digit</span><span class="special">,</span> <span class="identifier">letter</span><span class="special">></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"><</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">></span> 1120<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1121<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1122<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1123<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 1139 <span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 1140 <span class="special">>::</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"><</span><span class="identifier">alphanum</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">c</span><span class="special">,</span> <span class="identifier">t</span><span class="special">></span> 1237 1238<span class="identifier">always</span><span class="special"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="identifier">c</span><span class="special">>,</span> <span class="identifier">t</span><span class="special">></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"><</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">></span> 1245<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1246<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1247<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1248<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1249 1250<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>>;</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"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 1263 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></span> 1265 <span class="special">>::</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"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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> 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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">></span> 1362 1363<span class="identifier">last_of</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">t</span><span class="special">>></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"><</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">></span> 1370<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1371<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1372<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1373<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1374<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1375 1376<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>>;</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"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 1389 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></span> 1391 <span class="special">>::</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"><</span><span class="identifier">always13</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></span> 1503<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1504<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1505<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1506<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1507<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1508<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1509<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1510<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1511<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1512 1513<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">letter</span><span class="special">>>;</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"><</span><span class="identifier">change_error_message</span><span class="special"><</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">age_expected</span><span class="special">>>;</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"><</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">age_token</span><span class="special">>;</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"><</span> 1526 <span class="identifier">age_expected</span><span class="special">,</span> 1527 <span class="identifier">get_message</span><span class="special"><</span><span class="identifier">name_age</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span> 1528 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></span> 1642 1643<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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">>;</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"><</span> 1652 <span class="identifier">string</span><span class="special"><</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">>,</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">>::</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"><</span> 1663 <span class="identifier">string</span><span class="special"><</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">>,</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">>::</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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</span><span class="keyword">class</span> <span class="identifier">S</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">></span> 1863</pre> 1864<p> 1865 is equivalent to 1866 </p> 1867<pre class="programlisting"><span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">>></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"><</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">></span> 1874<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1875<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>::</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"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1113"</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="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"><</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> 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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">msg</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">msg</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 1983<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1984<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1985<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1986<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1987<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1988<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1989<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1990<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1991<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1992<span class="preprocessor">#include</span> <span class="special"><</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">></span> 1993 1994<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">keyword</span><span class="special"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)>>;</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"><</span><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">letter</span><span class="special">>>;</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"><</span><span class="identifier">keyword_name</span><span class="special">,</span> <span class="identifier">change_error_message</span><span class="special"><</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">name_expected</span><span class="special">>>;</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"><</span> 2008 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2009 <span class="special">>::</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 <a name>\""</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"><</span> 2015 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2016 <span class="special">>::</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"><</span> 2022 <span class="identifier">get_message</span><span class="special"><</span> 2023 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2024 <span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 2025 <span class="identifier">name_expected</span> 2026 <span class="special">>::</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"><</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">></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"><</span> 2053 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 2054 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> 2055 <span class="special">>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">>>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">12</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="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"><</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">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">s</span><span class="special">>()</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"><</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">></span> 2190<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2191<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2192 2193<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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">)></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"><</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">></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"><</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">></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"><</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">></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"><</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">></span> 2287<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2288<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2289<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2290<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 2306 <span class="identifier">digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2307 <span class="special">>::</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"><</span><span class="keyword">char</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><</span><span class="char">'0'</span><span class="special">>::</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"><</span><span class="number">0</span><span class="special">></span> 2395 2396<span class="identifier">digit_to_int_c</span><span class="special"><</span><span class="char">'9'</span><span class="special">>::</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"><</span><span class="number">9</span><span class="special">></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"><</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">></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"><</span><span class="char">'0'</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="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"><</span><span class="char">'3'</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="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"><</span><span class="char">'9'</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="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"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span> 2507<span class="identifier">digit_to_int</span><span class="special"><</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span> 2508<span class="identifier">digit_to_int_c</span><span class="special"><</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">>::</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"><</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">></span> 2515 2516<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'4'</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</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="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"><>::</span><span class="identifier">type</span> 2532 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'7'</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="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"><</span><span class="identifier">nullary_metafunction_returning_4</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="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"><</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">></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"><</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"><>></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"><</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">></span> 2586<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2587<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2588<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2589<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 2605 <span class="identifier">digit_val</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2606 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">Result</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c</span><span class="special">></span> 2682 2683<span class="identifier">except</span><span class="special"><</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">></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"><</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">></span> 2690<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2691<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2692<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2693<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2694 2695<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"result"</span><span class="special">)>;</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"><</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 2713 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">want_empty</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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">>::</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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">e</span><span class="special">></span> 2842 2843<span class="identifier">first_of</span><span class="special"><</span> 2844 <span class="identifier">p</span><span class="special">,</span> 2845 <span class="identifier">change_error_message</span><span class="special"><</span><span class="identifier">empty</span><span class="special"></*</span> <span class="identifier">some</span> <span class="identifier">metaprogramming</span> <span class="identifier">value</span> <span class="special">*/>,</span> <span class="identifier">e</span><span class="special">></span> 2846<span class="special">></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"><</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">></span> 2853<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2854<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2855<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2856<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2857<span class="preprocessor">#include</span> <span class="special"><</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">></span> 2858<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">extra_chars_at_end</span><span class="special">>;</span> 2865 2866<span class="keyword">static_assert</span><span class="special">(</span> 2867 <span class="identifier">get_result</span><span class="special"><</span> 2868 <span class="identifier">int_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2869 <span class="special">>::</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"><</span> 2875 <span class="identifier">get_message</span><span class="special"><</span> 2876 <span class="identifier">int_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 2877 <span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 2878 <span class="identifier">extra_chars_at_end</span> 2879 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">except</span><span class="special"><</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">>,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span> 2988<span class="identifier">c</span> 2989 2990<span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">except</span><span class="special"><</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">>,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span> 2991<span class="identifier">s</span> 2992 2993<span class="identifier">get_position</span><span class="special"><</span><span class="identifier">except</span><span class="special"><</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">>,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</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">></span> 3005<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3006<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3007<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3008<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3009<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3010<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3011 3012<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">>,</span> <span class="identifier">number_is_not_allowed</span><span class="special">>;</span> 3023 3024<span class="keyword">static_assert</span><span class="special">(</span> 3025 <span class="identifier">get_result</span><span class="special"><</span> 3026 <span class="identifier">except_int</span><span class="special">::</span><span class="identifier">apply</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">></span> 3027 <span class="special">>::</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"><</span> 3033 <span class="identifier">number_is_not_allowed</span><span class="special">,</span> 3034 <span class="identifier">get_message</span><span class="special"><</span><span class="identifier">except_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span> 3035 <span class="special">>::</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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</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"><</span><span class="identifier">p</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span> 3150<span class="identifier">reject</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">pos</span><span class="special">></span> 3151</pre> 3152<p> 3153 When <code class="computeroutput"><span class="identifier">is_error</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</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"><</span><span class="identifier">pos</span><span class="special">,</span> <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>::</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"><</span><span class="identifier">except</span><span class="special"><</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">>,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span> 3158<span class="identifier">accept</span><span class="special"></*</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">></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"><</span><span class="identifier">except</span><span class="special"><</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">>,</span> <span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span> 3164<span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</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">></span> 3171<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3172<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3173<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3174<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3175<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3176<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3177<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3178<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3179<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3180 3181<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 3182<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>,</span> <span class="identifier">int_</span><span class="special">>;</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"><</span> 3190 <span class="identifier">foldl_start_with_parser</span><span class="special"><</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"><</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">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">>>::</span><span class="identifier">type</span> 3194 <span class="special">>,</span> 3195 <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">plus_int</span><span class="special">></span> 3196 <span class="special">>;</span> 3197 3198<span class="keyword">static_assert</span><span class="special">(</span> 3199 <span class="identifier">get_result</span><span class="special"><</span> 3200 <span class="identifier">plus_exp</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3201 <span class="special">>::</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"><</span> 3207 <span class="identifier">plus_exp</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3208 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">Msg</span><span class="special">></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"><</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">></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"><</span><span class="identifier">msg</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</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">></span> 3294<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3295<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3296<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3297<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3298<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">sample_error</span><span class="special">>;</span> 3305 3306<span class="keyword">static_assert</span><span class="special">(</span> 3307 <span class="identifier">is_error</span><span class="special"><</span><span class="identifier">fail_p</span><span class="special">::</span><span class="identifier">apply</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">>>::</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"><</span> 3313 <span class="identifier">get_message</span><span class="special"><</span><span class="identifier">fail_p</span><span class="special">::</span><span class="identifier">apply</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">>>::</span><span class="identifier">type</span><span class="special">,</span> 3314 <span class="identifier">sample_error</span> 3315 <span class="special">>::</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"><</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">></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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">></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"><</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">></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"><</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">></span> 3436<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3437<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3438<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3439<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3440<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3441<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3442 3443<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">';'</span><span class="special">>>;</span> 3448 3449<span class="keyword">static_assert</span><span class="special">(</span> 3450 <span class="identifier">is_error</span><span class="special"><</span> 3451 <span class="identifier">int_with_semicolon</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3452 <span class="special">>::</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"><</span> 3458 <span class="identifier">int_with_semicolon</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3459 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</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">></span> 3571 3572<span class="identifier">last_of</span><span class="special"><</span><span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">p</span><span class="special">>,</span> <span class="identifier">foldl</span><span class="special"><</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">>></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"><</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">></span> 3579<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3580<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3581<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3582<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3583<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3584<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3585 3586<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 3587<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">0</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 3596 3597<span class="keyword">static_assert</span><span class="special">(</span> 3598 <span class="identifier">get_result</span><span class="special"><</span> 3599 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3600 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 3730</pre> 3731<p> 3732 is equivalent to 3733 </p> 3734<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">foldl</span><span class="special"><</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">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 3741<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3742<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3743<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3744<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3745<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3746<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3747<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3748<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3749 3750<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 3751<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></span> 3752<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 3763 3764<span class="keyword">static_assert</span><span class="special">(</span> 3765 <span class="identifier">get_result</span><span class="special"><</span> 3766 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3767 <span class="special">>::</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"><</span> 3773 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3774 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 3887</pre> 3888<p> 3889 is equivalent to 3890 </p> 3891<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">foldl1</span><span class="special"><</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">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 3898<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3899<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3900<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3901<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3902<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3903<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3904<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3905<span class="preprocessor">#include</span> <span class="special"><</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">></span> 3906 3907<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 3908<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></span> 3909<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 3920 3921<span class="keyword">static_assert</span><span class="special">(</span> 3922 <span class="identifier">get_result</span><span class="special"><</span> 3923 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3924 <span class="special">>::</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"><</span> 3930 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 3931 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 4065</pre> 4066<p> 4067 is equivalent to 4068 </p> 4069<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span> 4070 <span class="identifier">foldl_start_with_parser</span><span class="special"><</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">>,</span> 4071 <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> 4072<span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 4079<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4080<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4081<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4082<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4083<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4084<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4085<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4086<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4087 4088<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4089<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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">>;</span> 4101 4102<span class="keyword">static_assert</span><span class="special">(</span> 4103 <span class="identifier">get_result</span><span class="special"><</span> 4104 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4105 <span class="special">>::</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"><</span> 4111 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4112 <span class="special">>::</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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">f</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span> 4249 <span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">,</span> 4250 <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span> 4251<span class="special">></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"><</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">></span> 4261<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4262<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4263<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4264<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4265<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4266<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4267<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4268<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4269 4270<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4271<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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">>;</span> 4282 4283<span class="keyword">static_assert</span><span class="special">(</span> 4284 <span class="identifier">get_result</span><span class="special"><</span> 4285 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4286 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 4418</pre> 4419<p> 4420 is equivalent to 4421 </p> 4422<pre class="programlisting"><span class="identifier">return_</span><span class="special"><</span><span class="identifier">t</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span></code> returns an error. It is 4426 </p> 4427<pre class="programlisting"><span class="identifier">foldl</span><span class="special"><</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"><</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</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">f</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span> 4428 <span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>,</span> 4429 <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>></span> 4430<span class="special">></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"><</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">></span> 4440<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4441<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4442<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4443<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4444<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4445 4446<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4447<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">0</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 4456 4457<span class="keyword">static_assert</span><span class="special">(</span> 4458 <span class="identifier">get_result</span><span class="special"><</span> 4459 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4460 <span class="special">>::</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"><</span> 4466 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4467 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</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">></span> 4579 4580<span class="identifier">last_of</span><span class="special"><</span><span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">p</span><span class="special">>,</span> <span class="identifier">foldr</span><span class="special"><</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">>></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"><</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">></span> 4587<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4588<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4589<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4590<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4591<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4592<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4593 4594<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4595<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">0</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 4604 4605<span class="keyword">static_assert</span><span class="special">(</span> 4606 <span class="identifier">get_result</span><span class="special"><</span> 4607 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4608 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 4744</pre> 4745<p> 4746 is equivalent to 4747 </p> 4748<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">foldr</span><span class="special"><</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">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 4755<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4756<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4757<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4758<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4759<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4760<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4761<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4762<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4763 4764<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4765<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></span> 4766<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 4777 4778<span class="keyword">static_assert</span><span class="special">(</span> 4779 <span class="identifier">get_result</span><span class="special"><</span> 4780 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4781 <span class="special">>::</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"><</span> 4787 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4788 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 4901</pre> 4902<p> 4903 is equivalent to 4904 </p> 4905<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">foldr1</span><span class="special"><</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">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 4912<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4913<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4914<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4915<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4916<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4917<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4918<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4919<span class="preprocessor">#include</span> <span class="special"><</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">></span> 4920 4921<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4922<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></span> 4923<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 4934 4935<span class="keyword">static_assert</span><span class="special">(</span> 4936 <span class="identifier">get_result</span><span class="special"><</span> 4937 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4938 <span class="special">>::</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"><</span> 4944 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 4945 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">plus_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">></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"><</span> 5095 <span class="identifier">foldr</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">,</span> <span class="identifier">f</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 5096<span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span> 5097 <span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">,</span> 5098 <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">pt</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s_</span><span class="special">,</span> <span class="identifier">pos_</span><span class="special">>>::</span><span class="identifier">type</span> 5099<span class="special">></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"><</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">></span> 5109<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5110<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5111<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5112<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5113<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5114<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5115<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5116<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5117 5118<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 5119<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">int_token</span><span class="special">,</span> <span class="identifier">plus_token</span><span class="special">>;</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"><</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">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">>>::</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"><</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">>;</span> 5130 5131<span class="keyword">static_assert</span><span class="special">(</span> 5132 <span class="identifier">get_result</span><span class="special"><</span> 5133 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 5134 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 5266</pre> 5267<p> 5268 is equivalent to 5269 </p> 5270<pre class="programlisting"><span class="identifier">return_</span><span class="special"><</span><span class="identifier">t</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span> 5276 <span class="identifier">get_result</span><span class="special"><</span> 5277 <span class="identifier">foldr</span><span class="special"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span> 5278 <span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>,</span> 5279 <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>></span> 5280 <span class="special">></span> 5281 <span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 5282 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span> 5283<span class="special">></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"><</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">></span> 5293<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5294<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5295<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5296<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5297<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5298 5299<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 5300<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</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">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">>>::</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"><</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"><</span><span class="number">0</span><span class="special">>,</span> <span class="identifier">sum_op</span><span class="special">>;</span> 5309 5310<span class="keyword">static_assert</span><span class="special">(</span> 5311 <span class="identifier">get_result</span><span class="special"><</span> 5312 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 5313 <span class="special">>::</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"><</span> 5319 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 5320 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">></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"><</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">></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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</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">></span> 5404<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5405 5406<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 5414 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5415 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5416 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">></span> 5417 <span class="special">>;</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"><</span> 5422 <span class="identifier">source_position</span><span class="special"><</span> 5423 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5424 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5425 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">></span> 5426 <span class="special">></span> 5427 <span class="special">>::</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"><</span><span class="identifier">returns_source_position</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="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"><</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">></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"><</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">></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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</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">></span> 5516<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5517 5518<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 5526 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5527 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5528 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">></span> 5529 <span class="special">>;</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"><</span> 5534 <span class="identifier">source_position</span><span class="special"><</span> 5535 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5536 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5537 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="number">0</span><span class="special">></span> 5538 <span class="special">></span> 5539 <span class="special">>::</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"><</span><span class="identifier">returns_source_position</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="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"><</span><span class="keyword">class</span> <span class="identifier">E</span><span class="special">></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"><</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">></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"><</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">></span> 5614<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5615<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5616<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5617 5618<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>;</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"><</span> 5631 <span class="identifier">sample_error</span><span class="special">,</span> 5632 <span class="identifier">get_message</span><span class="special"><</span><span class="identifier">reject</span><span class="special"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>>::</span><span class="identifier">type</span> 5633 <span class="special">>::</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"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">get_message</span><span class="special"><</span><span class="identifier">returns_reject</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">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"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><</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">></span> 5709<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5710<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5711<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5712<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5713<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5714 5715<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>;</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"><</span> 5728 <span class="identifier">start</span><span class="special">,</span> 5729 <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">reject</span><span class="special"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>>::</span><span class="identifier">type</span> 5730 <span class="special">>::</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"><</span> 5736 <span class="identifier">start</span><span class="special">,</span> 5737 <span class="identifier">get_position</span><span class="special"><</span> 5738 <span class="identifier">accept</span><span class="special"><</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">></span> 5739 <span class="special">>::</span><span class="identifier">type</span> 5740 <span class="special">>::</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"><</span><span class="identifier">start</span><span class="special">,</span> <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">returns_reject</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">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"><</span><span class="keyword">class</span> <span class="identifier">SourcePosition</span><span class="special">></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"><</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">></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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</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">></span> 5831<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5832 5833<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 5841 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5842 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5843 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">></span> 5844 <span class="special">>;</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"><</span> 5849 <span class="identifier">source_position</span><span class="special"><</span> 5850 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 5851 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 5852 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">></span> 5853 <span class="special">></span> 5854 <span class="special">>::</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"><</span><span class="identifier">returns_source_position</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="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"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><</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">></span> 5929<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5930<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5931<span class="preprocessor">#include</span> <span class="special"><</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">></span> 5932 5933<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 5941 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">>;</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"><</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"><</span> 5951 <span class="identifier">accept</span><span class="special"><</span> 5952 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">></span> 5956 <span class="special">>::</span><span class="identifier">type</span> 5957 <span class="special">>::</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"><</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"><</span><span class="identifier">returns_accept</span><span class="special">>::</span><span class="identifier">type</span> 5965 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><</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">></span> 6035<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6036<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6037<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span> 6045 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">>;</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"><</span> 6053 <span class="identifier">accept</span><span class="special"><</span> 6054 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">></span> 6058 <span class="special">>::</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"><</span><span class="identifier">returns_accept</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="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"><</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">)></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"><</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">></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"><</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">></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"><</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">></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"><></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"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name ::= def"</span><span class="special">)></span> 6120<span class="special">::</span><span class="identifier">rule</span><span class="special"><</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">></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"><</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">></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"><</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">></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"><</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">></span> 6193<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6194<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6195<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6196<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6197<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6198 6199<span class="preprocessor">#include</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">front</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6200<span class="preprocessor">#include</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">back</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6201<span class="preprocessor">#include</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">.</span><span class="identifier">hpp</span><span class="special">></span> 6202<span class="preprocessor">#include</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">fold</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6203<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</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">></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"><</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">></span> <span class="special">{};</span> 6221 6222<span class="keyword">template</span> <span class="special"><</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">></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"><</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">></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"><</span><span class="identifier">back</span><span class="special"><</span><span class="identifier">_1</span><span class="special">>,</span> <span class="identifier">front</span><span class="special"><</span><span class="identifier">_1</span><span class="special">>,</span> <span class="identifier">lambda</span><span class="special"><</span><span class="identifier">lazy_plus</span><span class="special"><</span><span class="identifier">_1</span><span class="special">,</span> <span class="identifier">back</span><span class="special"><</span><span class="identifier">_2</span><span class="special">>>>::</span><span class="identifier">type</span><span class="special">>;</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"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"plus_exp"</span><span class="special">)></span> 6232 <span class="special">::</span><span class="identifier">import</span><span class="special"><</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"><</span><span class="identifier">int_</span><span class="special">>>::</span><span class="identifier">type</span> 6233 6234 <span class="special">::</span><span class="identifier">rule</span><span class="special"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"ws ::= (' ' | '\n' | '\r' | '\t')*"</span><span class="special">)>::</span><span class="identifier">type</span> 6235 <span class="special">::</span><span class="identifier">rule</span><span class="special"><</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"><</span><span class="identifier">_1</span><span class="special">>>::</span><span class="identifier">type</span> 6236 <span class="special">::</span><span class="identifier">rule</span><span class="special"><</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">>::</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"><</span><span class="identifier">entire_input</span><span class="special"><</span><span class="identifier">plus_grammar</span><span class="special">>>;</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"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"1 + 2 + 3 + 4"</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="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"><</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">></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"><</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">></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"><</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">></span> 6348 6349<span class="identifier">one_of</span><span class="special"><</span><span class="identifier">last_of</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">t</span><span class="special">>>,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">f</span><span class="special">>></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"><</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">></span> 6356<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6357<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6358<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6359<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6360 6361<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>;</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>;</span> 6367 6368<span class="keyword">static_assert</span><span class="special">(</span> 6369 <span class="identifier">get_result</span><span class="special"><</span> 6370 <span class="identifier">if_</span><span class="special"><</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">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 6371 <span class="special">>::</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"><</span> 6377 <span class="identifier">if_</span><span class="special"><</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">>::</span><span class="identifier">apply</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">></span> 6378 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></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"><</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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">C</span><span class="special">>::</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"><=</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">&&</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"><=</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"><</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">></span> 6603 6604<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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">></span> 6610 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">10</span><span class="special">>>::</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"><</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">></span> 6616 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">14</span><span class="special">>>::</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"><</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">></span> 6622 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>>::</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"><</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">></span> 6628 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>>::</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"><</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">></span> 6634 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">12</span><span class="special">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</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"><</span><span class="identifier">L</span><span class="special">,</span> <span class="identifier">T</span><span class="special">>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">value</span> 6744 <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">less_equal</span><span class="special"><</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">U</span><span class="special">>::</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"><</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">></span> 6751 6752<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</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"><</span><span class="number">11</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">>,</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"><</span><span class="number">10</span><span class="special">></span> 6761 <span class="special">>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">>,</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"><</span><span class="number">14</span><span class="special">></span> 6770 <span class="special">>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">>,</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"><</span><span class="number">11</span><span class="special">></span> 6779 <span class="special">>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">></span> 6788 <span class="special">>::</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"><</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"><</span><span class="number">11</span><span class="special">>,</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"><</span><span class="number">13</span><span class="special">>,</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"><</span><span class="number">12</span><span class="special">></span> 6797 <span class="special">>::</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"><></span> 6803 <span class="special">::</span><span class="identifier">apply</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"><</span><span class="number">11</span><span class="special">>>::</span><span class="identifier">type</span> 6804 <span class="special">::</span><span class="identifier">apply</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"><</span><span class="number">13</span><span class="special">>>::</span><span class="identifier">type</span> 6805 <span class="special">::</span><span class="identifier">apply</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"><</span><span class="number">12</span><span class="special">>>::</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"><</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">></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"><</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"><</span><span class="number">0</span><span class="special">>,</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"><</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"><</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"><</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"><</span><span class="number">10</span><span class="special">>>,</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">></span> 6857 <span class="special">>::</span><span class="identifier">type</span> 6858<span class="special">></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"><</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">></span> 6865<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6866<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6867<span class="preprocessor">#include</span> <span class="special"><</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">></span> 6868<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span> 6874 <span class="identifier">int_</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 6875 <span class="special">>::</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"><</span><span class="identifier">int_</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">int</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="number">0</span><span class="special">>::</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"><</span><span class="char">'0'</span><span class="special">></span> 6962 6963<span class="identifier">int_to_digit</span><span class="special"><</span><span class="number">9</span><span class="special">>::</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"><</span><span class="char">'9'</span><span class="special">></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"><</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">></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"><</span><span class="number">0</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="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"><</span><span class="number">3</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="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"><</span><span class="number">9</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="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"><</span><span class="keyword">class</span> <span class="identifier">D</span><span class="special">></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"><</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">></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"><</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"><</span><span class="number">0</span><span class="special">>>::</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"><</span><span class="char">'0'</span><span class="special">></span> 7065 7066<span class="identifier">int_to_digit</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"><</span><span class="number">9</span><span class="special">>>::</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"><</span><span class="char">'9'</span><span class="special">></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"><</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">></span> 7074 7075<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">4</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">0</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="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"><>::</span><span class="identifier">type</span> 7091 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">7</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="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"><</span><span class="identifier">nullary_metafunction_returning_4</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="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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</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"><</span><span class="char">'0'</span><span class="special">>>::</span><span class="identifier">type</span> 7175<span class="identifier">is_digit</span><span class="special"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'0'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7189 7190<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>>::</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"><</span><span class="identifier">returns_char</span><span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c</span><span class="special">>::</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"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7300<span class="preprocessor">#include</span> <span class="special"><</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">></span> 7301<span class="preprocessor">#include</span> <span class="special"><</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">></span> 7302<span class="preprocessor">#include</span> <span class="special"><</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">></span> 7303<span class="preprocessor">#include</span> <span class="special"><</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">></span> 7304<span class="preprocessor">#include</span> <span class="special"><</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">></span> 7305 7306<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">></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"><</span> 7319 <span class="identifier">accept</span><span class="special"><</span> 7320 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">></span> 7324 <span class="special">>::</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"><</span><span class="identifier">reject</span><span class="special"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">reject</span><span class="special"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>>::</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"><</span><span class="identifier">returns_reject</span><span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'a'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'z'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7431 7432<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">>>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span> 7453 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">>>::</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"><</span><span class="identifier">returns_char</span><span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'a'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'z'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'A'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'Z'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7556 7557<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span> 7578 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>>::</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"><</span><span class="identifier">returns_char</span><span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'A'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</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">char_</span><span class="special"><</span><span class="char">'Z'</span><span class="special">>>::</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"><>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7675 7676<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span> 7697 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'A'</span><span class="special">>>::</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"><</span><span class="identifier">returns_char</span><span class="special">>::</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"><</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="char">' '</span><span class="special">>::</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"><</span><span class="char">'\t'</span><span class="special">>::</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"><</span><span class="char">'\r'</span><span class="special">>::</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"><</span><span class="char">'\n'</span><span class="special">>::</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"><</span><span class="identifier">c</span><span class="special">>::</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"><</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">></span> 7805 7806<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="char">' '</span><span class="special">>::</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"><</span><span class="char">'0'</span><span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span> 7896<span class="identifier">is_whitespace</span><span class="special"><>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">C</span><span class="special">>::</span><span class="identifier">type</span> 7897<span class="identifier">is_whitespace_c</span><span class="special"><</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">>::</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"><</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">></span> 7904 7905<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">' '</span><span class="special">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">' '</span><span class="special">>>::</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>>::</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"><>::</span><span class="identifier">type</span> 7926 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\t'</span><span class="special">>>::</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"><</span><span class="identifier">returns_char</span><span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">></span> 8025 8026<span class="identifier">sequence</span><span class="special"><</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">></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"><</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">></span> 8038<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8039<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8040<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8041<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8042<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8043 8044<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 8045<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 8046<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</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"><</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"><</span><span class="char">'1'</span><span class="special">>,</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"><</span><span class="char">'2'</span><span class="special">>,</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"><</span><span class="char">'3'</span><span class="special">></span> 8056 <span class="special">>,</span> 8057 <span class="identifier">get_result</span><span class="special"><</span> 8058 <span class="identifier">iterate_c</span><span class="special"><</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8059 <span class="special">>::</span><span class="identifier">type</span> 8060 <span class="special">>::</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"><</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"><</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"><</span><span class="char">'1'</span><span class="special">>,</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"><</span><span class="char">'2'</span><span class="special">>,</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"><</span><span class="char">'3'</span><span class="special">></span> 8070 <span class="special">>,</span> 8071 <span class="identifier">get_result</span><span class="special"><</span> 8072 <span class="identifier">iterate_c</span><span class="special"><</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8073 <span class="special">>::</span><span class="identifier">type</span> 8074 <span class="special">>::</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"><</span> 8080 <span class="identifier">iterate_c</span><span class="special"><</span><span class="identifier">digit</span><span class="special">,</span> <span class="number">3</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8081 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">n</span><span class="special">></span> 8176 8177<span class="identifier">iterate_c</span><span class="special"><</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">></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"><</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">></span> 8184<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8185<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8186<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8187<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8188<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8189 8190<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 8191<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 8192<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 8193 8194<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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"><</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"><</span><span class="char">'1'</span><span class="special">>,</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"><</span><span class="char">'2'</span><span class="special">>,</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"><</span><span class="char">'3'</span><span class="special">></span> 8204 <span class="special">>,</span> 8205 <span class="identifier">get_result</span><span class="special"><</span> 8206 <span class="identifier">iterate</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">>>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8210 <span class="special">>::</span><span class="identifier">type</span> 8211 <span class="special">>::</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"><</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"><</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"><</span><span class="char">'1'</span><span class="special">>,</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"><</span><span class="char">'2'</span><span class="special">>,</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"><</span><span class="char">'3'</span><span class="special">></span> 8221 <span class="special">>,</span> 8222 <span class="identifier">get_result</span><span class="special"><</span> 8223 <span class="identifier">iterate</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">>>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8227 <span class="special">>::</span><span class="identifier">type</span> 8228 <span class="special">>::</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"><</span> 8234 <span class="identifier">iterate</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">3</span><span class="special">>>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8238 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">r</span><span class="special">></span> 8332 8333<span class="identifier">last_of</span><span class="special"><</span><span class="identifier">lit</span><span class="special"><</span><span class="identifier">c1</span><span class="special">>,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">lit</span><span class="special"><</span><span class="identifier">cn</span><span class="special">>,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">r</span><span class="special">>></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"><</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">></span> 8340<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8341<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8342<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8343<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8344 8345<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 8351 <span class="identifier">keyword</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>></span> 8352 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8353 <span class="special">>::</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"><</span> 8359 <span class="identifier">keyword</span><span class="special"><</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>></span> 8360 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8361 <span class="special">>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">></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"><</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">></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"><</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">></span> 8454<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8455<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8456<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8457<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8458<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8459<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8460 8461<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">','</span><span class="special">>,</span> <span class="identifier">int_</span><span class="special">>;</span> 8466 8467<span class="keyword">static_assert</span><span class="special">(</span> 8468 <span class="identifier">is_error</span><span class="special"><</span><span class="identifier">comma_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 8474 <span class="identifier">comma_int</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8475 <span class="special">>::</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"><</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">></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"><</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">></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"><</span> 8509 <span class="identifier">std</span><span class="special">::</span><span class="identifier">intgeral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">>,</span> 8510 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">></span> 8511 <span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">2</span><span class="special">>;</span> 8522<span class="special">};</span> 8523 8524<span class="comment">// Fails to compile</span> 8525<span class="identifier">plus</span><span class="special"><</span><span class="identifier">nullary_metafunction_returning_2</span><span class="special">,</span> <span class="identifier">nullary_metafunction_returning_2</span><span class="special">>::</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"><</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">></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"><</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">></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"><</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">>::</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"><</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">></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"><</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">></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"><</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"><>,</span> <span class="identifier">error</span><span class="special">::</span><span class="identifier">letter_expected</span><span class="special">></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"><</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">></span> 8631<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8632<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8633<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8634<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 8650 <span class="identifier">letter</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8651 <span class="special">>::</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"><</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c</span><span class="special">></span> 8727 8728<span class="identifier">lit</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">char_</span><span class="special"><</span><span class="identifier">c</span><span class="special">>></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"><</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">></span> 8735<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8736<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8737<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8738<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'x'</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'x'</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 8754 <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'x'</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8755 <span class="special">>::</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"><</span><span class="keyword">char</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c</span><span class="special">></span> 8897 8898<span class="identifier">accept_when</span><span class="special"><</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"><</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">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">>>::</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"><</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">></span> 8902<span class="special">></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"><</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">></span> 8909<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8910<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8911<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8912<span class="preprocessor">#include</span> <span class="special"><</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">></span> 8913 8914<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 8920 <span class="identifier">lit</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">>></span> 8921 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8922 <span class="special">>::</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"><</span> 8928 <span class="identifier">lit</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">>></span> 8929 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8930 <span class="special">>::</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"><</span> 8936 <span class="identifier">lit</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">>></span> 8937 <span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 8938 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 9017</pre> 9018<p> 9019 is equivalent to 9020 </p> 9021<pre class="programlisting"><span class="identifier">return_</span><span class="special"><</span><span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 9036<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9037<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9038<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9039<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9040<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9041<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9042 9043<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 9049 <span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">int_</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9050 <span class="special">>::</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"><</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"><</span> 9058 <span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">int_</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9059 <span class="special">>::</span><span class="identifier">type</span> 9060 <span class="special">>::</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"><</span> 9066 <span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">int_</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9067 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></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"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></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"><</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">></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"><</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">></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"><</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">></span> 9293</pre> 9294<p> 9295 is equivalent to 9296 </p> 9297<pre class="programlisting"><span class="identifier">nth_of</span><span class="special"><</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">></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"><</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">></span> 9304<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9305<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9306<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9307<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9308<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9309<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9310<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'('</span><span class="special">>>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">')'</span><span class="special">>>;</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"><</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">>;</span> 9319 9320<span class="keyword">static_assert</span><span class="special">(</span> 9321 <span class="identifier">get_result</span><span class="special"><</span> 9322 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9323 <span class="special">>::</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"><</span> 9329 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9330 <span class="special">>::</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"><</span> 9336 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9337 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">next_char</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>></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"><</span><span class="identifier">get_col</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">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="number">1</span><span class="special">>></span> 9432 9433<span class="identifier">get_line</span><span class="special"><</span><span class="identifier">next_char</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>></span> 9434 9435<span class="identifier">get_line</span><span class="special"><</span><span class="identifier">s</span><span class="special">></span> 9436 9437<span class="identifier">get_prev_char</span><span class="special"><</span><span class="identifier">next_char</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>>::</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"><</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">></span> 9446<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9447<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9448<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9449<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9450 9451<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 9459 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9460 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9461 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9462 <span class="special">>;</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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">>;</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"><</span> 9472 <span class="identifier">next_char</span><span class="special"><</span> 9473 <span class="identifier">source_position</span><span class="special"><</span> 9474 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9475 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9476 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9477 <span class="special">>,</span> 9478 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">></span> 9479 <span class="special">></span> 9480 <span class="special">>::</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"><</span> 9486 <span class="identifier">next_char</span><span class="special"><</span> 9487 <span class="identifier">source_position</span><span class="special"><</span> 9488 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9489 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9490 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9491 <span class="special">>,</span> 9492 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">></span> 9493 <span class="special">></span> 9494 <span class="special">>::</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"><</span> 9500 <span class="identifier">next_char</span><span class="special"><</span> 9501 <span class="identifier">source_position</span><span class="special"><</span> 9502 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9503 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9504 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9505 <span class="special">>,</span> 9506 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'x'</span><span class="special">></span> 9507 <span class="special">></span> 9508 <span class="special">>::</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"><</span><span class="identifier">next_char</span><span class="special"><</span><span class="identifier">returns_source_position</span><span class="special">,</span> <span class="identifier">returns_char</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="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"><</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">></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"><</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">></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"><</span><span class="identifier">next_line</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>>::</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"><</span><span class="number">1</span><span class="special">></span> 9607 9608<span class="identifier">get_line</span><span class="special"><</span><span class="identifier">next_line</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>></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"><</span><span class="identifier">get_line</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">boost</span><span class="special">::</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">int_</span><span class="special"><</span><span class="number">1</span><span class="special">>></span> 9611 9612<span class="identifier">get_prev_char</span><span class="special"><</span><span class="identifier">next_line</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">c</span><span class="special">>>::</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"><</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">></span> 9621<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9622<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9623<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9624<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9625 9626<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 9634 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9635 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9636 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9637 <span class="special">>;</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"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">>;</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"><</span> 9647 <span class="identifier">next_line</span><span class="special"><</span> 9648 <span class="identifier">source_position</span><span class="special"><</span> 9649 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9650 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9651 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9652 <span class="special">>,</span> 9653 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">></span> 9654 <span class="special">></span> 9655 <span class="special">>::</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"><</span> 9661 <span class="identifier">next_line</span><span class="special"><</span> 9662 <span class="identifier">source_position</span><span class="special"><</span> 9663 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9664 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9665 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9666 <span class="special">>,</span> 9667 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">></span> 9668 <span class="special">></span> 9669 <span class="special">>::</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"><</span> 9675 <span class="identifier">next_line</span><span class="special"><</span> 9676 <span class="identifier">source_position</span><span class="special"><</span> 9677 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</span><span class="special">>,</span> 9678 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</span> 9679 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'a'</span><span class="special">></span> 9680 <span class="special">>,</span> 9681 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'\n'</span><span class="special">></span> 9682 <span class="special">></span> 9683 <span class="special">>::</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"><</span><span class="identifier">next_line</span><span class="special"><</span><span class="identifier">returns_source_position</span><span class="special">,</span> <span class="identifier">returns_char</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="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"><</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">></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"><</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">></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"><</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">></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"><=</span> 9816 <span class="identifier">k</span> <span class="special"><</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"><</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">></span> 9820 9821<span class="identifier">transform</span><span class="special"><</span><span class="identifier">sequence</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">>,</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"><</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">>></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"><</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">></span> 9828<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9829<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9830<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9831<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9832<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9833<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9834<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'('</span><span class="special">>>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">')'</span><span class="special">>>;</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"><</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">>;</span> 9844 9845<span class="keyword">static_assert</span><span class="special">(</span> 9846 <span class="identifier">get_result</span><span class="special"><</span> 9847 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9848 <span class="special">>::</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"><</span> 9854 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9855 <span class="special">>::</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"><</span> 9861 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9862 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></span> 9961 9962<span class="identifier">nth_of_c</span><span class="special"><</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">></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"><</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">></span> 9969<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9970<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9971<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9972<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9973<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9974<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9975<span class="preprocessor">#include</span> <span class="special"><</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">></span> 9976 9977<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'('</span><span class="special">>>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">')'</span><span class="special">>>;</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"><</span> 9987 <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">1</span><span class="special">>,</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">>;</span> 9990 9991<span class="keyword">static_assert</span><span class="special">(</span> 9992 <span class="identifier">get_result</span><span class="special"><</span> 9993 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 9994 <span class="special">>::</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"><</span> 10000 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10001 <span class="special">>::</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"><</span> 10007 <span class="identifier">int_in_parens</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10008 <span class="special">>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>;</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">></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"><</span><span class="keyword">char</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">>::</span><span class="identifier">appl</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 10136<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10137<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10138<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10139<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10140<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10141<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10142 10143<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10144<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10145<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'"'</span><span class="special">>,</span> <span class="identifier">repeated</span><span class="special"><</span><span class="identifier">one_char_except_c</span><span class="special"><</span><span class="char">'"'</span><span class="special">>>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'"'</span><span class="special">>>;</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"><</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"><</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"><</span><span class="char">'h'</span><span class="special">>,</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"><</span><span class="char">'e'</span><span class="special">>,</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"><</span><span class="char">'l'</span><span class="special">>,</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"><</span><span class="char">'l'</span><span class="special">>,</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"><</span><span class="char">'o'</span><span class="special">></span> 10160 <span class="special">>,</span> 10161 <span class="identifier">get_result</span><span class="special"><</span> 10162 <span class="identifier">string_literal_parser</span><span class="special">::</span><span class="identifier">apply</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> <span class="identifier">start</span><span class="special">></span> 10163 <span class="special">>::</span><span class="identifier">type</span> 10164 <span class="special">>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">></span> 10249 10250<span class="identifier">one_char_except_c</span><span class="special"><</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">></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"><</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">></span> 10257<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10258<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10259<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10260<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10261<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10262<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10263 10264<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10265<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10266<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10267 10268<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 10274 <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'"'</span><span class="special">>,</span> 10275 <span class="identifier">repeated</span><span class="special"><</span><span class="identifier">one_char_except</span><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'"'</span><span class="special">>>>,</span> 10276 <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'"'</span><span class="special">></span> 10277 <span class="special">>;</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"><</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"><</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"><</span><span class="char">'h'</span><span class="special">>,</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"><</span><span class="char">'e'</span><span class="special">>,</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"><</span><span class="char">'l'</span><span class="special">>,</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"><</span><span class="char">'l'</span><span class="special">>,</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"><</span><span class="char">'o'</span><span class="special">></span> 10287 <span class="special">>,</span> 10288 <span class="identifier">get_result</span><span class="special"><</span> 10289 <span class="identifier">string_literal_parser</span><span class="special">::</span><span class="identifier">apply</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> <span class="identifier">start</span><span class="special">></span> 10290 <span class="special">>::</span><span class="identifier">type</span> 10291 <span class="special">>::</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"><</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">></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"><</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>></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"><</span><span class="identifier">s</span><span class="special">></span> 10336 10337<span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>></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"><</span><span class="identifier">s</span><span class="special">></span> 10340</pre> 10341<p> 10342 The value of <code class="computeroutput"><span class="identifier">get_position</span><span class="special"><</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>></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"><</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">></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"><</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">></span> 10362<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10363<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10364<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10365<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10366<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10367 10368<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span> 10374 <span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</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">></span> 10375 <span class="special">>::</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"><</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"><</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</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">>>::</span><span class="identifier">type</span> 10383 <span class="special">>::</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"><</span><span class="identifier">one_char</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">char</span><span class="special">...</span> <span class="identifier">Cs</span><span class="special">></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"><</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">></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"><</span><span class="identifier">c1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">cn</span><span class="special">></span> 10468</pre> 10469<p> 10470 is equivalent to 10471 </p> 10472<pre class="programlisting"><span class="identifier">one_of</span><span class="special"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="identifier">c1</span><span class="special">>,</span> <span class="comment">/* ... */</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="identifier">cn</span><span class="special">>></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"><</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">></span> 10479<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10480<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10481<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10482<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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">>;</span> 10487 10488<span class="keyword">static_assert</span><span class="special">(</span> 10489 <span class="identifier">get_result</span><span class="special"><</span> 10490 <span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10491 <span class="special">>::</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"><</span><span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</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">></span> 10602<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10603<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10604<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10605<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10606<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">' '</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'\n'</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'\r'</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'\t'</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'\v'</span><span class="special">>>;</span> 10612 10613<span class="keyword">static_assert</span><span class="special">(</span> 10614 <span class="identifier">get_result</span><span class="special"><</span> 10615 <span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10616 <span class="special">>::</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"><</span><span class="identifier">whitespace</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">d</span><span class="special">></span> 10715</pre> 10716<p> 10717 is equivalent to 10718 </p> 10719<pre class="programlisting"><span class="identifier">one_of</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">d</span><span class="special">>></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"><</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">></span> 10726<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10727<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10728<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10729<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10730<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10731<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10732<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10733 10734<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10735<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10736<span class="preprocessor">#include</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">equal_to</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 10737<span class="preprocessor">#include</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">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</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"><</span> 10748 <span class="identifier">middle_of</span><span class="special"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'i'</span><span class="special">>>,</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"><</span><span class="number">0</span><span class="special">></span> 10750 <span class="special">></span> 10751 <span class="special">></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"><</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"><</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">>,</span> 10757 <span class="identifier">get_result</span><span class="special"><</span> 10758 <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10759 <span class="special">>::</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"><</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">></span> 10762 <span class="special">>::</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"><</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"><</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">>,</span> 10769 <span class="identifier">get_result</span><span class="special"><</span> 10770 <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10771 <span class="special">>::</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"><</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">></span> 10774 <span class="special">>::</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"><</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"><</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">>,</span> 10781 <span class="identifier">get_result</span><span class="special"><</span> 10782 <span class="identifier">complex_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 10783 <span class="special">>::</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"><</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">></span> 10786 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</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">></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"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span> 10967 10968<span class="identifier">accept_when</span><span class="special"><</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"><</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">>,</span> 10971 <span class="identifier">errors</span><span class="special">::</span><span class="identifier">unexpected_character</span> 10972<span class="special">></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"><</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">></span> 10979<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10980<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10981<span class="preprocessor">#include</span> <span class="special"><</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">></span> 10982<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</span><span class="char">'0'</span><span class="special">,</span> <span class="char">'9'</span><span class="special">>;</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"><</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 11000 <span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11001 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">></span> 11092 11093<span class="identifier">accept_when</span><span class="special"><</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"><</span><span class="identifier">A</span><span class="special">,</span> <span class="identifier">B</span><span class="special">>,</span> <span class="identifier">errors</span><span class="special">::</span><span class="identifier">unexpected_character</span><span class="special">></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"><</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">></span> 11100<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11101<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11102<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11103<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11104 11105<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'0'</span><span class="special">>,</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">char</span><span class="special">,</span> <span class="char">'9'</span><span class="special">>>;</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"><</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 11124 <span class="identifier">one_digit</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11125 <span class="special">>::</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"><</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">></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"><....>::</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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>::</span><span class="identifier">type</span></code> is <code class="computeroutput"><span class="identifier">reject</span><span class="special"><</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">></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"><</span><span class="identifier">m</span><span class="special">,</span> <span class="identifier">p</span><span class="special">>::</span><span class="identifier">type</span> 11227 11228<span class="identifier">reject</span><span class="special"><</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">></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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">></span> 11328 11329<span class="identifier">last_of</span><span class="special"><</span><span class="identifier">look_ahead</span><span class="special"><</span><span class="identifier">p</span><span class="special">>,</span> <span class="identifier">repeated</span><span class="special"><</span><span class="identifier">p</span><span class="special">>></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"><</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">></span> 11336<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11337<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11338<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11339<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11340<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11341 11342<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11343<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11344<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">digit_val</span><span class="special">>;</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"><</span> 11352 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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"><</span><span class="number">1</span><span class="special">>,</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"><</span><span class="number">2</span><span class="special">>,</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"><</span><span class="number">3</span><span class="special">>,</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"><</span><span class="number">4</span><span class="special">></span> 11358 <span class="special">></span> 11359 <span class="special">>::</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"><</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 11445</pre> 11446<p> 11447 is equivalent to 11448 </p> 11449<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">p</span><span class="special">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 11456<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11457<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11458<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11459<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11460<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11461<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11462<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11463<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11464 11465<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11466<span class="preprocessor">#include</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">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">plus_int</span><span class="special">>;</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"><</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"><</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">>,</span> 11479 <span class="identifier">get_result</span><span class="special"><</span> 11480 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11481 <span class="special">>::</span><span class="identifier">type</span> 11482 <span class="special">>::</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"><</span> 11488 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11489 <span class="special">>::</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"><</span><span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">plus</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">mpl</span><span class="special">::</span><span class="identifier">_2</span><span class="special">>>::</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"><</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">></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"><</span><span class="identifier">p</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></span> 11588</pre> 11589<p> 11590 is equivalent to 11591 </p> 11592<pre class="programlisting"><span class="identifier">first_of</span><span class="special"><</span><span class="identifier">repeated</span><span class="special"><</span><span class="identifier">p</span><span class="special">>,</span> <span class="identifier">fail_at_first_char_expected</span><span class="special"><</span><span class="identifier">p</span><span class="special">></span> <span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 11599<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11600<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11601<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11602<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11603<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11604<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11605<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11606<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11607 11608<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11609<span class="preprocessor">#include</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">vector_c</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</span><span class="identifier">plus_token</span><span class="special">,</span> <span class="identifier">int_token</span><span class="special">>;</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"><</span><span class="identifier">plus_int</span><span class="special">>;</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"><</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"><</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">>,</span> 11622 <span class="identifier">get_result</span><span class="special"><</span> 11623 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11624 <span class="special">>::</span><span class="identifier">type</span> 11625 <span class="special">>::</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"><</span> 11631 <span class="identifier">ints</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 11632 <span class="special">>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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"><</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">></span> 11722</pre> 11723<p> 11724 is equivalent to 11725 </p> 11726<pre class="programlisting"><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">one_of</span><span class="special"><</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">>></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"><</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">></span> 11733<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11734<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11735<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11736<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11737<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11738 11739<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11740<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11741<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'a'</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'b'</span><span class="special">>>;</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"><</span> 11749 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'b'</span><span class="special">>,</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'b'</span><span class="special">></span> 11756 <span class="special">></span> 11757 <span class="special">>::</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"><</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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"><</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">></span> 11853</pre> 11854<p> 11855 is equivalent to 11856 </p> 11857<pre class="programlisting"><span class="identifier">repeated</span><span class="special"><</span><span class="identifier">one_of</span><span class="special"><</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">>></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"><</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">></span> 11864<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11865<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11866<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11867<span class="preprocessor">#include</span> <span class="special"><</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">></span> 11868 11869<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11870<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 11871<span class="preprocessor">#include</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="keyword">char</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'a'</span><span class="special">>,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'b'</span><span class="special">>>;</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"><</span> 11879 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'b'</span><span class="special">>,</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'a'</span><span class="special">>,</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"><</span><span class="char">'b'</span><span class="special">></span> 11886 <span class="special">></span> 11887 <span class="special">>::</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"><</span> 11893 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">as_and_bs</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><></span> 11895 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</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">></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"><</span><span class="identifier">p</span><span class="special">></span> 11992 11993<span class="identifier">foldl</span><span class="special"><</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"><</span><span class="identifier">_2</span><span class="special">,</span> <span class="identifier">_1</span><span class="special">></span> 11997<span class="special">></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"><</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">></span> 12004<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12005<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12006<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12007<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12008 12009<span class="preprocessor">#include</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">equal</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 12010<span class="preprocessor">#include</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">vector</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 12011<span class="preprocessor">#include</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="keyword">int</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">digit_val</span><span class="special">>;</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"><</span> 12019 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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"><</span><span class="number">1</span><span class="special">>,</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"><</span><span class="number">2</span><span class="special">>,</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"><</span><span class="number">3</span><span class="special">>,</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"><</span><span class="number">4</span><span class="special">></span> 12025 <span class="special">></span> 12026 <span class="special">>::</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"><</span> 12032 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">digits</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><></span> 12034 <span class="special">>::</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"><</span><span class="keyword">class</span> <span class="identifier">C</span><span class="special">></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"><</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">></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"><</span><span class="identifier">return_</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span> 12112 12113<span class="identifier">c</span> 12114 12115<span class="identifier">get_remaining</span><span class="special"><</span><span class="identifier">return_</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span> 12116 12117<span class="identifier">s</span> 12118 12119<span class="identifier">get_position</span><span class="special"><</span><span class="identifier">return_</span><span class="special"><</span><span class="identifier">c</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</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"><</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">></span> 12128<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12129<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12130<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12131<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12132<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12133 12134<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>;</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"><</span><span class="identifier">int_</span><span class="special">,</span> <span class="identifier">return_</span><span class="special"><</span><span class="identifier">default_value</span><span class="special">>>;</span> 12141 12142<span class="keyword">static_assert</span><span class="special">(</span> 12143 <span class="identifier">get_result</span><span class="special"><</span> 12144 <span class="identifier">optional_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 12145 <span class="special">>::</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"><</span> 12151 <span class="identifier">optional_number</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 12152 <span class="special">>::</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"><</span><span class="keyword">class</span><span class="special">...</span> <span class="identifier">Ps</span><span class="special">></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"><</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">></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">></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"><</span><span class="identifier">p0</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">p1</span><span class="special">></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"><</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">></span> 12248<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12249<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12250<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12251<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12252<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12253<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12254<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12255 12256<span class="preprocessor">#include</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">at</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>>;</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"><</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">>;</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"><</span> 12267 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span><span class="special">,</span> 12268 <span class="number">0</span> 12269 <span class="special">>::</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"><</span> 12275 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span><span class="special">,</span> 12276 <span class="number">1</span> 12277 <span class="special">>::</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"><</span> 12283 <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span><span class="special">,</span> 12284 <span class="number">2</span> 12285 <span class="special">>::</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"><</span><span class="identifier">a_plus_b</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">class</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">P1</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">class</span> <span class="identifier">Pn</span><span class="special">></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"><</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">></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">></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"><</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">></span></code> 12388 accepts the input: 12389 </p> 12390<pre class="programlisting"><span class="identifier">return_</span><span class="special"><</span> 12391 <span class="identifier">t</span><span class="special"><</span> 12392 <span class="identifier">mpl</span><span class="special">::</span><span class="identifier">at_c</span><span class="special"><</span><span class="number">0</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">sequence</span><span class="special"><</span><span class="identifier">p1</span><span class="special">,...,</span><span class="identifier">pn</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>::</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"><</span><span class="identifier">n</span><span class="special">,</span> <span class="identifier">get_result</span><span class="special"><</span><span class="identifier">sequence</span><span class="special"><</span><span class="identifier">p1</span><span class="special">,...,</span><span class="identifier">pn</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 12395 <span class="special">></span> 12396<span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</span><span class="identifier">p1</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">pn</span><span class="special">></span></code> 12400 rejects the input: 12401 </p> 12402<pre class="programlisting"><span class="identifier">sequence</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">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</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"><</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">></span> 12409<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12410<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12411<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12412<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12413<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12414<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12415 12416<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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">></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"><</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">></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"><</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">></span> <span class="special">{};</span> 12425 12426<span class="keyword">typedef</span> 12427 <span class="identifier">sequence_apply2</span><span class="special"><</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"><</span><span class="identifier">lit_c</span><span class="special"><</span><span class="char">'+'</span><span class="special">>,</span> <span class="identifier">int_</span><span class="special">,</span> <span class="identifier">lit_c</span><span class="special"><</span><span class="char">'i'</span><span class="special">>>></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"><</span> 12432 <span class="identifier">complex_c</span><span class="special"><</span><span class="number">1</span><span class="special">,</span> <span class="number">2</span><span class="special">>,</span> 12433 <span class="identifier">get_result</span><span class="special"><</span> 12434 <span class="identifier">complex_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 12435 <span class="special">>::</span><span class="identifier">type</span><span class="special">::</span><span class="identifier">type</span> 12436 <span class="special">>::</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"><</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">></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"><</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">></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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</span><span class="identifier">source_position</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</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"><>,</span> <span class="identifier">errors</span><span class="special">::</span><span class="identifier">whitespace_expected</span><span class="special">></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"><</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">></span> 12677<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12678<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12679<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12680<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12681 12682<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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"><</span><span class="identifier">space</span><span class="special">::</span><span class="identifier">apply</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">>>::</span><span class="identifier">type</span> 12690 <span class="special">>::</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"><</span><span class="identifier">space</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</span><span class="identifier">space</span><span class="special">></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"><</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">></span> 12744<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12745<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12746<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12747<span class="preprocessor">#include</span> <span class="special"><</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">></span> 12748 12749<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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"><</span><span class="identifier">spaces</span><span class="special">::</span><span class="identifier">apply</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">>>::</span><span class="identifier">type</span> 12757 <span class="special">>::</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"><</span><span class="identifier">spaces</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</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">></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"><</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">></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"><</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">></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"><</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">></span> 12876 12877<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</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">>;</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"><</span> 12886 <span class="identifier">string</span><span class="special"><</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">>,</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">>::</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"><</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">></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"><</span><span class="keyword">class</span> <span class="identifier">P</span><span class="special">></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"><</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">></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"><</span><span class="identifier">p</span><span class="special">></span> 13003 13004<span class="identifier">first_of</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">spaces</span><span class="special">></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"><</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">></span> 13011<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13012<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13013<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13014<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13015<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13016<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13017 13018<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">int_</span><span class="special">>;</span> 13023 13024<span class="keyword">static_assert</span><span class="special">(</span> 13025 <span class="identifier">get_result</span><span class="special"><</span> 13026 <span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13027 <span class="special">>::</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"><</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"><</span><span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</span><span class="identifier">type</span> 13035 <span class="special">>::</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"><</span> 13041 <span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13042 <span class="special">>::</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"><</span><span class="identifier">int_token</span><span class="special">::</span><span class="identifier">apply</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">>>::</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"><</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">></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"><</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">></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"><</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">f</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">get_message</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>,</span> <span class="identifier">get_position</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>></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"><</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">></span> 13151<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13152<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13153<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13154<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13155<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13156<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13157<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13158<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13159<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13160<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13161<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13162 13163<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="keyword">class</span><span class="special">></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"><</span><span class="identifier">keyword</span><span class="special"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)>>;</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"><</span><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">letter</span><span class="special">>>;</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"><</span> 13182 <span class="identifier">keyword_name</span><span class="special">,</span> 13183 <span class="identifier">transform_error_message</span><span class="special"><</span><span class="identifier">name_token</span><span class="special">,</span> <span class="identifier">return_name_expected</span><span class="special">></span> 13184 <span class="special">>;</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"><</span> 13188 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13189 <span class="special">>::</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 <a name>\""</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"><</span> 13195 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13196 <span class="special">>::</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"><</span> 13202 <span class="identifier">get_message</span><span class="special"><</span> 13203 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13204 <span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 13205 <span class="identifier">name_expected</span> 13206 <span class="special">>::</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"><</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">></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"><</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">></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"><</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>::</span><span class="identifier">type</span><span class="special">></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"><</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">></span> 13314<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13315<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13316<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13317<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13318<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13319<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13320<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13321<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13322<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13323<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13324<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13325<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13326 13327<span class="preprocessor">#include</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">lambda</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 13328 13329<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">keyword</span><span class="special"><</span><span class="identifier">BOOST_METAPARSE_STRING</span><span class="special">(</span><span class="string">"name"</span><span class="special">)>>;</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"><</span><span class="identifier">repeated1</span><span class="special"><</span><span class="identifier">letter</span><span class="special">>>;</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"><</span> 13340 <span class="identifier">keyword_name</span><span class="special">,</span> 13341 <span class="identifier">transform_error</span><span class="special"><</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"><</span> 13344 <span class="identifier">reject</span><span class="special"><</span><span class="identifier">name_expected</span><span class="special">,</span> <span class="identifier">get_position</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">_1</span><span class="special">></span> <span class="special">></span> 13345 <span class="special">>::</span><span class="identifier">type</span> 13346 <span class="special">></span> 13347 <span class="special">>;</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"><</span> 13351 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13352 <span class="special">>::</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 <a name>\""</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"><</span> 13358 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13359 <span class="special">>::</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"><</span> 13365 <span class="identifier">get_message</span><span class="special"><</span> 13366 <span class="identifier">name_parser</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13367 <span class="special">>::</span><span class="identifier">type</span><span class="special">,</span> 13368 <span class="identifier">name_expected</span> 13369 <span class="special">>::</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"><</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> 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"><</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">></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"><</span><span class="identifier">transform</span><span class="special"><</span><span class="identifier">p</span><span class="special">,</span> <span class="identifier">t</span><span class="special">>::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</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"><</span><span class="identifier">get_result</span><span class="special"><</span><span class="identifier">p</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">>>::</span><span class="identifier">type</span><span class="special">>::</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"><</span><span class="identifier">s</span><span class="special">,</span> <span class="identifier">pos</span><span class="special">></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"><</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">></span> 13481<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13482<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13483<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13484<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13485<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13486 13487<span class="preprocessor">#include</span> <span class="special"><</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">></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"><</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"><>>;</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"><</span> 13495 <span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13496 <span class="special">>::</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"><</span><span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">>>::</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"><</span> 13507 <span class="identifier">digit_value</span><span class="special">::</span><span class="identifier">apply</span><span class="special"><</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">></span> 13508 <span class="special">>::</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"><</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">></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"><</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">></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"><</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">></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"><</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">></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"><</span><span class="identifier">t</span><span class="special">,</span> <span class="identifier">c</span><span class="special">></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"><</span><span class="identifier">is_error</span><span class="special"><</span><span class="identifier">t</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">t</span><span class="special">,</span> <span class="identifier">c</span><span class="special">></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"><</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">></span> 13670<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13671<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13672<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13673<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13674<span class="preprocessor">#include</span> <span class="special"><</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">></span> 13675 13676<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">type_traits</span><span class="special">></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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">11</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">>;</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"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">integral_constant</span><span class="special"><</span><span class="keyword">int</span><span class="special">,</span> <span class="number">13</span><span class="special">>,</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">>;</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"><</span><span class="identifier">sample_error</span><span class="special">,</span> <span class="identifier">start</span><span class="special">>;</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"><</span><span class="identifier">accept2</span><span class="special">,</span> <span class="identifier">unless_error</span><span class="special"><</span><span class="identifier">accept1</span><span class="special">,</span> <span class="identifier">accept2</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">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"><</span><span class="identifier">reject1</span><span class="special">,</span> <span class="identifier">unless_error</span><span class="special"><</span><span class="identifier">reject1</span><span class="special">,</span> <span class="identifier">accept2</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">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"><</span> 13705 <span class="identifier">accept2</span><span class="special">,</span> 13706 <span class="identifier">unless_error</span><span class="special"><</span><span class="identifier">returns_accept1</span><span class="special">,</span> <span class="identifier">returns_accept2</span><span class="special">>::</span><span class="identifier">type</span> 13707 <span class="special">>::</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"><</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">></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"><</span><span class="identifier">Line</span><span class="special">,</span> <span class="identifier">Col</span><span class="special">></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"><</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">></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"><</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">></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