1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Auto Parser</title> 5<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css"> 6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1"> 7<link rel="home" href="../../../index.html" title="Spirit 2.5.8"> 8<link rel="up" href="../reference.html" title="Reference"> 9<link rel="prev" href="action.html" title="Semantic Actions with Parsers"> 10<link rel="next" href="auxiliary.html" title="Auxiliary Parsers"> 11</head> 12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> 13<table cellpadding="2" width="100%"><tr> 14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td> 15<td align="center"><a href="../../../../../../../index.html">Home</a></td> 16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td> 17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td> 18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td> 19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td> 20</tr></table> 21<hr> 22<div class="spirit-nav"> 23<a accesskey="p" href="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h4 class="title"> 27<a name="spirit.qi.reference.auto"></a><a class="link" href="auto.html" title="Auto Parser">Auto Parser</a> 28</h4></div></div></div> 29<h6> 30<a name="spirit.qi.reference.auto.h0"></a> 31 <span class="phrase"><a name="spirit.qi.reference.auto.description"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.description">Description</a> 32 </h6> 33<p> 34 This module includes the description of the <code class="computeroutput"><span class="identifier">auto_</span></code> 35 parser. This parser can be used to automatically create a parser based 36 on the supplied attribute type. 37 </p> 38<h6> 39<a name="spirit.qi.reference.auto.h1"></a> 40 <span class="phrase"><a name="spirit.qi.reference.auto.header"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.header">Header</a> 41 </h6> 42<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/qi/auto.hpp></span> 43<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 44</pre> 45<p> 46 Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>. 47 </p> 48<h6> 49<a name="spirit.qi.reference.auto.h2"></a> 50 <span class="phrase"><a name="spirit.qi.reference.auto.namespace"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.namespace">Namespace</a> 51 </h6> 52<div class="informaltable"><table class="table"> 53<colgroup><col></colgroup> 54<thead><tr><th> 55 <p> 56 Name 57 </p> 58 </th></tr></thead> 59<tbody><tr><td> 60 <p> 61 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">auto_</span> <span class="comment">// alias: 62 boost::spirit::qi::auto_</span></code> 63 </p> 64 </td></tr></tbody> 65</table></div> 66<h6> 67<a name="spirit.qi.reference.auto.h3"></a> 68 <span class="phrase"><a name="spirit.qi.reference.auto.model_of"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.model_of">Model 69 of</a> 70 </h6> 71<div class="blockquote"><blockquote class="blockquote"><p> 72 <a class="link" href="parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a> 73 </p></blockquote></div> 74<h6> 75<a name="spirit.qi.reference.auto.h4"></a> 76 <span class="phrase"><a name="spirit.qi.reference.auto.expression_semantics"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.expression_semantics">Expression 77 Semantics</a> 78 </h6> 79<p> 80 Semantics of an expression is defined only where it differs from, or is 81 not defined in <a class="link" href="../../karma/reference/generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>. 82 </p> 83<div class="informaltable"><table class="table"> 84<colgroup> 85<col> 86<col> 87</colgroup> 88<thead><tr> 89<th> 90 <p> 91 Expression 92 </p> 93 </th> 94<th> 95 <p> 96 Description 97 </p> 98 </th> 99</tr></thead> 100<tbody><tr> 101<td> 102 <p> 103 <code class="computeroutput"><span class="identifier">auto_</span></code> 104 </p> 105 </td> 106<td> 107 <p> 108 Create a parser instance compatible with the supplied attribute 109 type and use it for input matching. 110 </p> 111 </td> 112</tr></tbody> 113</table></div> 114<h6> 115<a name="spirit.qi.reference.auto.h5"></a> 116 <span class="phrase"><a name="spirit.qi.reference.auto.additional_requirements"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.additional_requirements">Additional 117 Requirements</a> 118 </h6> 119<p> 120 The <code class="computeroutput"><span class="identifier">auto_</span></code> parsers can be 121 used to match input for any data type for which a mapping to a parser type 122 is defined (the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_parser_exists</span></code> 123 returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>). The following table outlines 124 the predefined mapping rules from the attribute type to the parser type. 125 These rules are applied recursively to create the parser type which can 126 be used to match input for the given attribute type. 127 </p> 128<div class="informaltable"><table class="table"> 129<colgroup> 130<col> 131<col> 132</colgroup> 133<thead><tr> 134<th> 135 <p> 136 Attribute type 137 </p> 138 </th> 139<th> 140 <p> 141 Parser type 142 </p> 143 </th> 144</tr></thead> 145<tbody> 146<tr> 147<td> 148 <p> 149 <code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">wchar_t</span></code> 150 </p> 151 </td> 152<td> 153 <p> 154 <code class="computeroutput"><span class="identifier">standard</span><span class="special">::</span><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">standard_wide</span><span class="special">::</span><span class="identifier">char_</span></code> 155 </p> 156 </td> 157</tr> 158<tr> 159<td> 160 <p> 161 <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code> 162 </p> 163 </td> 164<td> 165 <p> 166 <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code> 167 </p> 168 </td> 169</tr> 170<tr> 171<td> 172 <p> 173 <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>, 174 <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>, 175 <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code> 176 </p> 177 </td> 178<td> 179 <p> 180 <code class="computeroutput"><span class="identifier">ushort_</span></code>, <code class="computeroutput"><span class="identifier">uint_</span></code>, <code class="computeroutput"><span class="identifier">ulong_</span></code> 181 </p> 182 </td> 183</tr> 184<tr> 185<td> 186 <p> 187 <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code>, <code class="computeroutput"><span class="keyword">long</span> 188 <span class="keyword">double</span></code> 189 </p> 190 </td> 191<td> 192 <p> 193 <code class="computeroutput"><span class="identifier">float_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, <code class="computeroutput"><span class="identifier">long_double</span></code> 194 </p> 195 </td> 196</tr> 197<tr> 198<td> 199 <p> 200 <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>, 201 <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span> 202 <span class="keyword">long</span></code> 203 </p> 204 </td> 205<td> 206 <p> 207 <code class="computeroutput"><span class="identifier">long_long</span></code>, <code class="computeroutput"><span class="identifier">ulong_long</span></code> 208 </p> 209 </td> 210</tr> 211<tr> 212<td> 213 <p> 214 <code class="computeroutput"><span class="keyword">bool</span></code> 215 </p> 216 </td> 217<td> 218 <p> 219 <code class="computeroutput"><span class="identifier">bool_</span></code> 220 </p> 221 </td> 222</tr> 223<tr> 224<td> 225 <p> 226 Any (STL) container 227 </p> 228 </td> 229<td> 230 <p> 231 Kleene Star (unary <code class="computeroutput"><span class="char">'*'</span></code>) 232 </p> 233 </td> 234</tr> 235<tr> 236<td> 237 <p> 238 Any Fusion sequence 239 </p> 240 </td> 241<td> 242 <p> 243 Sequence operator (<code class="computeroutput"><span class="char">'>>'</span></code>) 244 </p> 245 </td> 246</tr> 247<tr> 248<td> 249 <p> 250 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special"><></span></code> 251 </p> 252 </td> 253<td> 254 <p> 255 Optional operator (unary <code class="computeroutput"><span class="char">'-'</span></code>) 256 </p> 257 </td> 258</tr> 259<tr> 260<td> 261 <p> 262 <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special"><></span></code> 263 </p> 264 </td> 265<td> 266 <p> 267 Alternative operator (<code class="computeroutput"><span class="char">'|'</span></code>) 268 </p> 269 </td> 270</tr> 271</tbody> 272</table></div> 273<p> 274 It is possible to add support for any custom data type by implementing 275 a specialization of the customization point <a class="link" href="../../advanced/customize/auto/create_parser.html" title="Define a Custom Attribute Mapping for a Parser"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_parser</span></code></a>. This customization 276 can be used also to redefined any of the predefined mappings. 277 </p> 278<h6> 279<a name="spirit.qi.reference.auto.h6"></a> 280 <span class="phrase"><a name="spirit.qi.reference.auto.attributes"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.attributes">Attributes</a> 281 </h6> 282<div class="informaltable"><table class="table"> 283<colgroup> 284<col> 285<col> 286</colgroup> 287<thead><tr> 288<th> 289 <p> 290 Expression 291 </p> 292 </th> 293<th> 294 <p> 295 Attribute 296 </p> 297 </th> 298</tr></thead> 299<tbody><tr> 300<td> 301 <p> 302 <code class="computeroutput"><span class="identifier">auto_</span></code> 303 </p> 304 </td> 305<td> 306 <p> 307 <code class="computeroutput"><span class="identifier">hold_any</span></code> 308 </p> 309 </td> 310</tr></tbody> 311</table></div> 312<div class="important"><table border="0" summary="Important"> 313<tr> 314<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../images/important.png"></td> 315<th align="left">Important</th> 316</tr> 317<tr><td align="left" valign="top"><p> 318 The attribute type <code class="computeroutput"><span class="identifier">hold_any</span></code> 319 exposed by the <code class="computeroutput"><span class="identifier">auto_</span></code> 320 parser is semantically and syntactically equivalent to the type implemented 321 by <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. It has 322 been added to <span class="emphasis"><em>Spirit</em></span> as it has better a performance 323 and a smaller footprint if compared to <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. 324 </p></td></tr> 325</table></div> 326<h6> 327<a name="spirit.qi.reference.auto.h7"></a> 328 <span class="phrase"><a name="spirit.qi.reference.auto.complexity"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.complexity">Complexity</a> 329 </h6> 330<div class="blockquote"><blockquote class="blockquote"><p> 331 The complexity of the <code class="computeroutput"><span class="identifier">auto_</span></code> 332 parser depends on the supplied attribute type. Each attribute type results 333 in a different parser type to be instantiated which defines the overall 334 complexity. 335 </p></blockquote></div> 336<h6> 337<a name="spirit.qi.reference.auto.h8"></a> 338 <span class="phrase"><a name="spirit.qi.reference.auto.example"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.example">Example</a> 339 </h6> 340<div class="note"><table border="0" summary="Note"> 341<tr> 342<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td> 343<th align="left">Note</th> 344</tr> 345<tr><td align="left" valign="top"><p> 346 The test harness for the example(s) below is presented in the <a class="link" href="basics.html#spirit.qi.reference.basics.examples">Basics 347 Examples</a> section. 348 </p></td></tr> 349</table></div> 350<p> 351 Some includes: 352 </p> 353<p> 354</p> 355<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 356<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 357<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 358<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 359<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">adapt_struct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 360<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assert</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 361<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">other</span><span class="special">/</span><span class="identifier">endian</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span> 362<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> 363<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">string</span><span class="special">></span> 364<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">cstdlib</span><span class="special">></span> 365</pre> 366<p> 367 </p> 368<p> 369 Some using declarations: 370 </p> 371<p> 372</p> 373<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">auto_</span><span class="special">;</span> 374</pre> 375<p> 376 </p> 377<p> 378 And a class definition used in the examples: 379 </p> 380<p> 381</p> 382<pre class="programlisting"><span class="comment">// a simple complex number representation z = a + bi</span> 383<span class="keyword">struct</span> <span class="identifier">complex</span> 384<span class="special">{</span> 385 <span class="identifier">complex</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">)</span> 386 <span class="special">:</span> <span class="identifier">a</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">b</span><span class="special">)</span> 387 <span class="special">{}</span> 388 389 <span class="keyword">double</span> <span class="identifier">a</span><span class="special">;</span> 390 <span class="keyword">double</span> <span class="identifier">b</span><span class="special">;</span> 391<span class="special">};</span> 392</pre> 393<p> 394 </p> 395<p> 396 The following construct is required to allow the <code class="computeroutput"><span class="identifier">complex</span></code> 397 data structure to be utilized as a <a href="../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a> 398 sequence. This is required as we will emit output for this data structure 399 with a <span class="emphasis"><em>Spirit.Qi</em></span> sequence: <code class="computeroutput"><span class="char">'{'</span> 400 <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">','</span> <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">'}'</span></code>. 401 </p> 402<p> 403</p> 404<pre class="programlisting"><span class="identifier">BOOST_FUSION_ADAPT_STRUCT</span><span class="special">(</span> 405 <span class="identifier">complex</span><span class="special">,</span> 406 <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span> 407 <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span> 408<span class="special">)</span> 409</pre> 410<p> 411 </p> 412<p> 413 We add a specialization for the create_parser customization point defining 414 a custom output format for the complex type. Generally, any specialization 415 for create_parser is expected to return the proto expression to be used 416 to match input for the type the customization point has been specialized 417 for. 418 </p> 419<p> 420 We need to utilize <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span></code> 421 as the expression contains literals (the <code class="computeroutput"><span class="char">'{'</span></code>, 422 <code class="computeroutput"><span class="char">','</span></code>, and <code class="computeroutput"><span class="char">'}'</span></code>) 423 which normally get embedded in the proto expression by reference only. 424 The deep copy converts the proto tree to hold this by value. The deep copy 425 operation can be left out for simpler proto expressions (not containing 426 references to temporaries). Alternatively you could use the <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">make_expr</span></code> facility to build the required 427 proto expression. 428 </p> 429<p> 430</p> 431<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">traits</span> 432<span class="special">{</span> 433 <span class="keyword">template</span> <span class="special"><></span> 434 <span class="keyword">struct</span> <span class="identifier">create_parser</span><span class="special"><</span><span class="identifier">complex</span><span class="special">></span> 435 <span class="special">{</span> 436 <span class="keyword">typedef</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special"><</span> 437 <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="char">'{'</span> <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">','</span> <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">'}'</span><span class="special">)</span> 438 <span class="special">>::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span> 439 440 <span class="keyword">static</span> <span class="identifier">type</span> <span class="identifier">call</span><span class="special">()</span> 441 <span class="special">{</span> 442 <span class="keyword">return</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special">(</span> 443 <span class="char">'{'</span> <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">','</span> <span class="special">>></span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">>></span> <span class="char">'}'</span><span class="special">);</span> 444 <span class="special">}</span> 445 <span class="special">};</span> 446<span class="special">}}}</span> 447</pre> 448<p> 449 </p> 450<p> 451 Some usage examples of <code class="computeroutput"><span class="identifier">auto_</span></code> 452 parsers: 453 </p> 454<p> 455 Parse a simple integer using the generated parser component <code class="computeroutput"><span class="identifier">int_</span></code>: 456 </p> 457<p> 458</p> 459<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span> 460<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"123"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="identifier">i</span><span class="special">);</span> 461<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">i</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints: 123</span> 462</pre> 463<p> 464 </p> 465<p> 466 Parse an instance of the <code class="computeroutput"><span class="identifier">complex</span></code> 467 data type as defined above using the parser as generated by the defined 468 customization point: 469 </p> 470<p> 471</p> 472<pre class="programlisting"><span class="identifier">complex</span> <span class="identifier">c</span><span class="special">;</span> 473<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span> 474<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">a</span> <span class="special"><<</span> <span class="string">","</span> <span class="special"><<</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">b</span> <span class="special"><<</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span> <span class="comment">// prints: 1.2,2.4</span> 475</pre> 476<p> 477 </p> 478</div> 479<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 480<td align="left"></td> 481<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p> 482 Distributed under the Boost Software License, Version 1.0. (See accompanying 483 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>) 484 </p> 485</div></td> 486</tr></table> 487<hr> 488<div class="spirit-nav"> 489<a accesskey="p" href="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.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="auxiliary.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a> 490</div> 491</body> 492</html> 493