1<html> 2<head> 3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 4<title>Boost Macro Reference</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="Boost.Config"> 8<link rel="up" href="../index.html" title="Boost.Config"> 9<link rel="prev" href="../index.html" title="Boost.Config"> 10<link rel="next" href="build_config.html" title="Build Time Configuration"> 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="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 24</div> 25<div class="section"> 26<div class="titlepage"><div><div><h2 class="title" style="clear: both"> 27<a name="boost_config.boost_macro_reference"></a><a class="link" href="boost_macro_reference.html" title="Boost Macro Reference">Boost Macro Reference</a> 28</h2></div></div></div> 29<div class="toc"><dl class="toc"> 30<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects">Macros 31 that describe C++03 defects</a></span></dt> 32<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features">Macros 33 that describe optional features</a></span></dt> 34<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features">Macros 35 that describe possible C++ future features</a></span></dt> 36<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported">Macros 37 that describe C++11 features not supported</a></span></dt> 38<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers">Macros 39 that allow use of C++11 features with C++03 compilers</a></span></dt> 40<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported">Macros 41 that describe C++14 features not supported</a></span></dt> 42<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers">Macros 43 that allow use of C++14 features with C++11 or earlier compilers</a></span></dt> 44<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported">Macros 45 that describe C++17 features not supported</a></span></dt> 46<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers">Macros 47 that allow use of C++17 features with C++14 or earlier compilers</a></span></dt> 48<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_">Macros 49 that describe features that have been removed from the standard.</a></span></dt> 50<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros">Boost 51 Helper Macros</a></span></dt> 52<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost 53 Informational Macros</a></span></dt> 54<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost 55 Deprecated Macros</a></span></dt> 56<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros 57 for libraries with separate source code</a></span></dt> 58</dl></div> 59<div class="section"> 60<div class="titlepage"><div><div><h3 class="title"> 61<a name="boost_config.boost_macro_reference.macros_that_describe_c__03_defects"></a><a name="config_defects"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects" title="Macros that describe C++03 defects">Macros 62 that describe C++03 defects</a> 63</h3></div></div></div> 64<p> 65 The following macros all describe features that are required by the C++03 66 standard, if one of the following macros is defined, then it represents a 67 defect in the compiler's conformance with the 2003 standard. 68 </p> 69<div class="informaltable"><table class="table"> 70<colgroup> 71<col> 72<col> 73<col> 74</colgroup> 75<thead><tr> 76<th> 77 <p> 78 Macro 79 </p> 80 </th> 81<th> 82 <p> 83 Section 84 </p> 85 </th> 86<th> 87 <p> 88 Description 89 </p> 90 </th> 91</tr></thead> 92<tbody> 93<tr> 94<td> 95 <p> 96 <code class="computeroutput"><span class="identifier">BOOST_BCB_PARTIAL_SPECIALIZATION_BUG</span></code> 97 </p> 98 </td> 99<td> 100 <p> 101 Compiler 102 </p> 103 </td> 104<td> 105 <p> 106 The compiler exhibits certain partial specialisation bug - probably 107 Borland C++ Builder specific. 108 </p> 109 </td> 110</tr> 111<tr> 112<td> 113 <p> 114 <code class="computeroutput"><span class="identifier">BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL</span></code> 115 </p> 116 </td> 117<td> 118 <p> 119 Compiler 120 </p> 121 </td> 122<td> 123 <p> 124 Argument dependent lookup fails if there is a using declaration 125 for the symbol being looked up in the current scope. For example, 126 using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">get_pointer</span></code>; prevents ADL from 127 finding overloads of <code class="computeroutput"><span class="identifier">get_pointer</span></code> 128 in namespaces nested inside boost (but not elsewhere). Probably 129 Borland specific. 130 </p> 131 </td> 132</tr> 133<tr> 134<td> 135 <p> 136 <code class="computeroutput"><span class="identifier">BOOST_NO_ADL_BARRIER</span></code> 137 </p> 138 </td> 139<td> 140 <p> 141 Compiler 142 </p> 143 </td> 144<td> 145 <p> 146 The compiler locates and searches namespaces that it should <span class="emphasis"><em>*not*</em></span> 147 in fact search when performing argument dependent lookup. 148 </p> 149 </td> 150</tr> 151<tr> 152<td> 153 <p> 154 <code class="computeroutput"><span class="identifier">BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP</span></code> 155 </p> 156 </td> 157<td> 158 <p> 159 Compiler 160 </p> 161 </td> 162<td> 163 <p> 164 Compiler does not implement argument-dependent lookup (also named 165 Koenig lookup); see std::3.4.2 [basic.koenig.lookup] 166 </p> 167 </td> 168</tr> 169<tr> 170<td> 171 <p> 172 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code> 173 </p> 174 </td> 175<td> 176 <p> 177 Standard library 178 </p> 179 </td> 180<td> 181 <p> 182 If the compiler / library supplies non-standard or broken <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>. 183 </p> 184 </td> 185</tr> 186<tr> 187<td> 188 <p> 189 <code class="computeroutput"><span class="identifier">BOOST_NO_COMPLETE_VALUE_INITIALIZATION</span></code> 190 </p> 191 </td> 192<td> 193 <p> 194 Compiler 195 </p> 196 </td> 197<td> 198 <p> 199 Compiler has not completely implemented value-initialization. See 200 also <a href="../../../../utility/value_init.htm#compiler_issues" target="_top">The 201 Utility/Value Init docs</a> 202 </p> 203 </td> 204</tr> 205<tr> 206<td> 207 <p> 208 <code class="computeroutput"><span class="identifier">BOOST_NO_CTYPE_FUNCTIONS</span></code> 209 </p> 210 </td> 211<td> 212 <p> 213 Platform 214 </p> 215 </td> 216<td> 217 <p> 218 The Platform does not provide functions for the character-classifying 219 operations <code class="computeroutput"><span class="special"><</span><span class="identifier">ctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> and <code class="computeroutput"><span class="special"><</span><span class="identifier">cctype</span><span class="special">></span></code>, 220 only macros. 221 </p> 222 </td> 223</tr> 224<tr> 225<td> 226 <p> 227 <code class="computeroutput"><span class="identifier">BOOST_NO_CV_SPECIALIZATIONS</span></code> 228 </p> 229 </td> 230<td> 231 <p> 232 Compiler 233 </p> 234 </td> 235<td> 236 <p> 237 If template specialisations for cv-qualified types conflict with 238 a specialisation for a cv-unqualififed type. 239 </p> 240 </td> 241</tr> 242<tr> 243<td> 244 <p> 245 <code class="computeroutput"><span class="identifier">BOOST_NO_CV_VOID_SPECIALIZATIONS</span></code> 246 </p> 247 </td> 248<td> 249 <p> 250 Compiler 251 </p> 252 </td> 253<td> 254 <p> 255 If template specialisations for cv-void types conflict with a specialisation 256 for void. 257 </p> 258 </td> 259</tr> 260<tr> 261<td> 262 <p> 263 <code class="computeroutput"><span class="identifier">BOOST_NO_CWCHAR</span></code> 264 </p> 265 </td> 266<td> 267 <p> 268 Platform 269 </p> 270 </td> 271<td> 272 <p> 273 The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wchar</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 274 and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwchar</span><span class="special">></span></code>. 275 </p> 276 </td> 277</tr> 278<tr> 279<td> 280 <p> 281 <code class="computeroutput"><span class="identifier">BOOST_NO_CWCTYPE</span></code> 282 </p> 283 </td> 284<td> 285 <p> 286 Platform 287 </p> 288 </td> 289<td> 290 <p> 291 The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 292 and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwctype</span><span class="special">></span></code>. 293 </p> 294 </td> 295</tr> 296<tr> 297<td> 298 <p> 299 <code class="computeroutput"><span class="identifier">BOOST_NO_FENV_H</span></code> 300 </p> 301 </td> 302<td> 303 <p> 304 Platform, Standard library 305 </p> 306 </td> 307<td> 308 <p> 309 The C standard library doesn't provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 310 <a href="../../../../../boost/detail/fenv.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> 311 should be included instead of <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 312 for maximum portability on platforms which do provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 313 </p> 314 </td> 315</tr> 316<tr> 317<td> 318 <p> 319 <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_NESTED_DERIVATIONS</span></code> 320 </p> 321 </td> 322<td> 323 <p> 324 Compiler 325 </p> 326 </td> 327<td> 328 <p> 329 The compiler fails to compile a nested class that has a dependent 330 base class: 331</p> 332<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> 333<span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">:</span> <span class="special">{</span> 334 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">U</span><span class="special">></span> 335 <span class="keyword">struct</span> <span class="identifier">bar</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">U</span> <span class="special">{};</span> 336</pre> 337<p> 338 }; 339 </p> 340 </td> 341</tr> 342<tr> 343<td> 344 <p> 345 <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS</span></code> 346 </p> 347 </td> 348<td> 349 <p> 350 Compiler 351 </p> 352 </td> 353<td> 354 <p> 355 Template value parameters cannot have a dependent type, for example: 356</p> 357<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-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">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">></span> 358<span class="keyword">class</span> <span class="identifier">X</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span> 359</pre> 360<p> 361 </p> 362 </td> 363</tr> 364<tr> 365<td> 366 <p> 367 <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTION_STD_NAMESPACE</span></code> 368 </p> 369 </td> 370<td> 371 <p> 372 Standard Library 373 </p> 374 </td> 375<td> 376 <p> 377 The standard library does not put some or all of the contents of 378 <code class="computeroutput"><span class="special"><</span><span class="identifier">exception</span><span class="special">></span></code> in namespace std. 379 </p> 380 </td> 381</tr> 382<tr> 383<td> 384 <p> 385 <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTIONS</span></code> 386 </p> 387 </td> 388<td> 389 <p> 390 Compiler 391 </p> 392 </td> 393<td> 394 <p> 395 The compiler does not support exception handling (this setting 396 is typically required by many C++ compilers for embedded platforms). 397 Note that there is no requirement for boost libraries to honor 398 this configuration setting - indeed doing so may be impossible 399 in some cases. Those libraries that do honor this will typically 400 abort if a critical error occurs - you have been warned! 401 </p> 402 </td> 403</tr> 404<tr> 405<td> 406 <p> 407 <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_ORDERING</span></code> 408 </p> 409 </td> 410<td> 411 <p> 412 Compiler 413 </p> 414 </td> 415<td> 416 <p> 417 The compiler does not perform function template ordering or its 418 function template ordering is incorrect. 419</p> 420<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// #1</span> 421<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">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">);</span> 422 423<span class="comment">// #2</span> 424<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">U</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">(*)(</span><span class="identifier">U</span><span class="special">));</span> 425 426<span class="keyword">void</span> <span class="identifier">bar</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span> 427 428<span class="identifier">f</span><span class="special">(&</span><span class="identifier">bar</span><span class="special">);</span> <span class="comment">// should choose #2.</span> 429</pre> 430<p> 431 </p> 432 </td> 433</tr> 434<tr> 435<td> 436 <p> 437 <code class="computeroutput"><span class="identifier">BOOST_NO_INCLASS_MEMBER_INITIALIZATION</span></code> 438 </p> 439 </td> 440<td> 441 <p> 442 Compiler 443 </p> 444 </td> 445<td> 446 <p> 447 Compiler violates std::9.4.2/4. 448 </p> 449 </td> 450</tr> 451<tr> 452<td> 453 <p> 454 <code class="computeroutput"><span class="identifier">BOOST_NO_INTRINSIC_WCHAR_T</span></code> 455 </p> 456 </td> 457<td> 458 <p> 459 Compiler 460 </p> 461 </td> 462<td> 463 <p> 464 The C++ implementation does not provide <code class="computeroutput"><span class="keyword">wchar_t</span></code>, 465 or it is really a synonym for another integral type. Use this symbol 466 to decide whether it is appropriate to explicitly specialize a 467 template on <code class="computeroutput"><span class="keyword">wchar_t</span></code> 468 if there is already a specialization for other integer types. 469 </p> 470 </td> 471</tr> 472<tr> 473<td> 474 <p> 475 <code class="computeroutput"><span class="identifier">BOOST_NO_IOSFWD</span></code> 476 </p> 477 </td> 478<td> 479 <p> 480 std lib 481 </p> 482 </td> 483<td> 484 <p> 485 The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iosfwd</span><span class="special">></span></code>. 486 </p> 487 </td> 488</tr> 489<tr> 490<td> 491 <p> 492 <code class="computeroutput"><span class="identifier">BOOST_NO_IOSTREAM</span></code> 493 </p> 494 </td> 495<td> 496 <p> 497 std lib 498 </p> 499 </td> 500<td> 501 <p> 502 The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iostream</span><span class="special">></span></code>, 503 <code class="computeroutput"><span class="special"><</span><span class="identifier">istream</span><span class="special">></span></code> or <code class="computeroutput"><span class="special"><</span><span class="identifier">ostream</span><span class="special">></span></code>. 504 </p> 505 </td> 506</tr> 507<tr> 508<td> 509 <p> 510 <code class="computeroutput"><span class="identifier">BOOST_NO_IS_ABSTRACT</span></code> 511 </p> 512 </td> 513<td> 514 <p> 515 Compiler 516 </p> 517 </td> 518<td> 519 <p> 520 The C++ compiler does not support SFINAE with abstract types, this 521 is covered by <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337" target="_top">Core 522 Language DR337</a>, but is not part of the current standard. 523 Fortunately most compilers that support SFINAE also support this 524 DR. See also BOOST_NO_SFINAE and BOOST_NO_SFINAE_EXPR 525 </p> 526 </td> 527</tr> 528<tr> 529<td> 530 <p> 531 <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS</span></code> 532 </p> 533 </td> 534<td> 535 <p> 536 Standard library 537 </p> 538 </td> 539<td> 540 <p> 541 The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code> 542 header. Never check for this symbol in library code; always include 543 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, which guarantees to provide 544 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>. 545 </p> 546 </td> 547</tr> 548<tr> 549<td> 550 <p> 551 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code> 552 </p> 553 </td> 554<td> 555 <p> 556 Standard library 557 </p> 558 </td> 559<td> 560 <p> 561 C++11 additions to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code> 562 are not available for use. <code class="computeroutput"><span class="keyword">static</span> 563 <span class="identifier">function</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">()</span></code> the lowest finite value representable 564 by the numeric type. <code class="computeroutput"><span class="keyword">static</span> 565 <span class="keyword">int</span> <span class="keyword">const</span> 566 <span class="identifier">max_digits10</span></code> the number 567 of decimal digits that are required to make sure that two distinct 568 values of the type have distinct decimal representations. <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span> 569 <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char16_t</span><span class="special">>;</span></code>, see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>, 570 <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span> 571 <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char32_t</span><span class="special">>;</span></code> see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>. 572 Replaces BOOST_NO_NUMERIC_LIMITS_LOWEST. 573 </p> 574 </td> 575</tr> 576<tr> 577<td> 578 <p> 579 <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS</span></code> 580 </p> 581 </td> 582<td> 583 <p> 584 Standard library 585 </p> 586 </td> 587<td> 588 <p> 589 Constants such as <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_signed</span></code> 590 are not available for use at compile-time. 591 </p> 592 </td> 593</tr> 594<tr> 595<td> 596 <p> 597 <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG_NUMERIC_LIMITS</span></code> 598 </p> 599 </td> 600<td> 601 <p> 602 Standard library 603 </p> 604 </td> 605<td> 606 <p> 607 There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">long</span> 608 <span class="keyword">long</span><span class="special">></span></code> 609 and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span> 610 <span class="keyword">long</span> <span class="keyword">long</span><span class="special">></span></code>. <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 611 will then add these specializations as a standard library "fix" 612 only if the compiler supports the <code class="computeroutput"><span class="keyword">long</span> 613 <span class="keyword">long</span></code> datatype. 614 </p> 615 </td> 616</tr> 617<tr> 618<td> 619 <p> 620 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS</span></code> 621 </p> 622 </td> 623<td> 624 <p> 625 Compiler 626 </p> 627 </td> 628<td> 629 <p> 630 The compiler does not support the specialization of individual 631 member functions of template classes. 632 </p> 633 </td> 634</tr> 635<tr> 636<td> 637 <p> 638 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_KEYWORD</span></code> 639 </p> 640 </td> 641<td> 642 <p> 643 Compiler 644 </p> 645 </td> 646<td> 647 <p> 648 If the compiler supports member templates, but not the template 649 keyword when accessing member template classes. 650 </p> 651 </td> 652</tr> 653<tr> 654<td> 655 <p> 656 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_FRIENDS</span></code> 657 </p> 658 </td> 659<td> 660 <p> 661 Compiler 662 </p> 663 </td> 664<td> 665 <p> 666 Member template friend syntax (<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> 667 <span class="identifier">P</span><span class="special">></span> 668 <span class="keyword">friend</span> <span class="keyword">class</span> 669 <span class="identifier">frd</span><span class="special">;</span></code>) 670 described in the C++ Standard, 14.5.3, not supported. 671 </p> 672 </td> 673</tr> 674<tr> 675<td> 676 <p> 677 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code> 678 </p> 679 </td> 680<td> 681 <p> 682 Compiler 683 </p> 684 </td> 685<td> 686 <p> 687 Member template functions not fully supported. 688 </p> 689 </td> 690</tr> 691<tr> 692<td> 693 <p> 694 <code class="computeroutput"><span class="identifier">BOOST_NO_MS_INT64_NUMERIC_LIMITS</span></code> 695 </p> 696 </td> 697<td> 698 <p> 699 Standard library 700 </p> 701 </td> 702<td> 703 <p> 704 There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">__int64</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span> 705 <span class="identifier">__int64</span><span class="special">></span></code>. 706 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> will then add these specializations 707 as a standard library "fix", only if the compiler supports 708 the <code class="computeroutput"><span class="identifier">__int64</span></code> datatype. 709 </p> 710 </td> 711</tr> 712<tr> 713<td> 714 <p> 715 <code class="computeroutput"><span class="identifier">BOOST_NO_NESTED_FRIENDSHIP</span></code> 716 </p> 717 </td> 718<td> 719 <p> 720 Compiler 721 </p> 722 </td> 723<td> 724 <p> 725 Compiler doesn't allow a nested class to access private members 726 of its containing class. Probably Borland/CodeGear specific. 727 </p> 728 </td> 729</tr> 730<tr> 731<td> 732 <p> 733 <code class="computeroutput"><span class="identifier">BOOST_NO_OPERATORS_IN_NAMESPACE</span></code> 734 </p> 735 </td> 736<td> 737 <p> 738 Compiler 739 </p> 740 </td> 741<td> 742 <p> 743 Compiler requires inherited operator friend functions to be defined 744 at namespace scope, then using'ed to boost. Probably GCC specific. 745 See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example. 746 </p> 747 </td> 748</tr> 749<tr> 750<td> 751 <p> 752 <code class="computeroutput"><span class="identifier">BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS</span></code> 753 </p> 754 </td> 755<td> 756 <p> 757 Compiler 758 </p> 759 </td> 760<td> 761 <p> 762 The compiler does not correctly handle partial specializations 763 which depend upon default arguments in the primary template. 764 </p> 765 </td> 766</tr> 767<tr> 768<td> 769 <p> 770 <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_CONST</span></code> 771 </p> 772 </td> 773<td> 774 <p> 775 Compiler 776 </p> 777 </td> 778<td> 779 <p> 780 The compiler does not correctly handle pointers to const member 781 functions, preventing use of these in overloaded function templates. 782 See <a href="../../../../../boost/functional.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">functional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example. 783 </p> 784 </td> 785</tr> 786<tr> 787<td> 788 <p> 789 <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS</span></code> 790 </p> 791 </td> 792<td> 793 <p> 794 Compiler 795 </p> 796 </td> 797<td> 798 <p> 799 Pointers to members don't work when used as template parameters. 800 </p> 801 </td> 802</tr> 803<tr> 804<td> 805 <p> 806 <code class="computeroutput"><span class="identifier">BOOST_NO_PRIVATE_IN_AGGREGATE</span></code> 807 </p> 808 </td> 809<td> 810 <p> 811 Compiler 812 </p> 813 </td> 814<td> 815 <p> 816 The compiler misreads 8.5.1, treating classes as non-aggregate 817 if they contain private or protected member functions. 818 </p> 819 </td> 820</tr> 821<tr> 822<td> 823 <p> 824 <code class="computeroutput"><span class="identifier">BOOST_NO_RESTRICT_REFERENCES</span></code> 825 </p> 826 </td> 827<td> 828 <p> 829 Compiler 830 </p> 831 </td> 832<td> 833 <p> 834 Compiler-specific <code class="computeroutput"><span class="identifier">restrict</span></code> 835 keyword can not be applied to references. 836 </p> 837 </td> 838</tr> 839<tr> 840<td> 841 <p> 842 <code class="computeroutput"><span class="identifier">BOOST_NO_RTTI</span></code> 843 </p> 844 </td> 845<td> 846 <p> 847 Compiler 848 </p> 849 </td> 850<td> 851 <p> 852 The compiler may (or may not) have the typeid operator, but RTTI 853 on the dynamic type of an object is not supported. 854 </p> 855 </td> 856</tr> 857<tr> 858<td> 859 <p> 860 <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE</span></code> 861 </p> 862 </td> 863<td> 864 <p> 865 Compiler 866 </p> 867 </td> 868<td> 869 <p> 870 The compiler does not support the "Substitution Failure Is 871 Not An Error" meta-programming idiom. This is the lightweight 872 pre-C++11 version of SFINAE. 873 </p> 874 </td> 875</tr> 876<tr> 877<td> 878 <p> 879 <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE_EXPR</span></code> 880 </p> 881 </td> 882<td> 883 <p> 884 Compiler 885 </p> 886 </td> 887<td> 888 <p> 889 The compiler does not support usage of SFINAE with arbitrary expressions. 890 This is the post-C++11 SFINAE, but excludes a few specific corner 891 cases, see also BOOST_NO_CXX11_SFINAE_EXPR. 892 </p> 893 </td> 894</tr> 895<tr> 896<td> 897 <p> 898 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ALLOCATOR</span></code> 899 </p> 900 </td> 901<td> 902 <p> 903 Standard library 904 </p> 905 </td> 906<td> 907 <p> 908 The C++ standard library does not provide a standards conforming 909 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>. 910 </p> 911 </td> 912</tr> 913<tr> 914<td> 915 <p> 916 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_DISTANCE</span></code> 917 </p> 918 </td> 919<td> 920 <p> 921 Standard library 922 </p> 923 </td> 924<td> 925 <p> 926 The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span></code>. 927 </p> 928 </td> 929</tr> 930<tr> 931<td> 932 <p> 933 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR</span></code> 934 </p> 935 </td> 936<td> 937 <p> 938 Standard library 939 </p> 940 </td> 941<td> 942 <p> 943 The C++ implementation fails to provide the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code> 944 class. Note that post C++17, this macro is re-purposed to indicate 945 that std::iterator has been removed or deprecated. 946 </p> 947 </td> 948</tr> 949<tr> 950<td> 951 <p> 952 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR_TRAITS</span></code> 953 </p> 954 </td> 955<td> 956 <p> 957 Standard library 958 </p> 959 </td> 960<td> 961 <p> 962 The compiler does not provide a standard compliant implementation 963 of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>. Note that the 964 compiler may still have a non-standard implementation. 965 </p> 966 </td> 967</tr> 968<tr> 969<td> 970 <p> 971 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_LOCALE</span></code> 972 </p> 973 </td> 974<td> 975 <p> 976 Standard library 977 </p> 978 </td> 979<td> 980 <p> 981 The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span></code>. 982 </p> 983 </td> 984</tr> 985<tr> 986<td> 987 <p> 988 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MESSAGES</span></code> 989 </p> 990 </td> 991<td> 992 <p> 993 Standard library 994 </p> 995 </td> 996<td> 997 <p> 998 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">messages</span></code> 999 facet. 1000 </p> 1001 </td> 1002</tr> 1003<tr> 1004<td> 1005 <p> 1006 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MIN_MAX</span></code> 1007 </p> 1008 </td> 1009<td> 1010 <p> 1011 Standard library 1012 </p> 1013 </td> 1014<td> 1015 <p> 1016 The C++ standard library does not provide the <code class="computeroutput"><span class="identifier">min</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> template functions that should 1017 be in <code class="computeroutput"><span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span></code>. 1018 </p> 1019 </td> 1020</tr> 1021<tr> 1022<td> 1023 <p> 1024 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN</span></code> 1025 </p> 1026 </td> 1027<td> 1028 <p> 1029 Standard library 1030 </p> 1031 </td> 1032<td> 1033 <p> 1034 Defined if the standard library's output iterators are not assignable. 1035 </p> 1036 </td> 1037</tr> 1038<tr> 1039<td> 1040 <p> 1041 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_TYPEINFO</span></code> 1042 </p> 1043 </td> 1044<td> 1045 <p> 1046 Standard library 1047 </p> 1048 </td> 1049<td> 1050 <p> 1051 The <typeinfo> header declares <code class="computeroutput"><span class="identifier">type_info</span></code> 1052 in the global namespace instead of namespace std. 1053 </p> 1054 </td> 1055</tr> 1056<tr> 1057<td> 1058 <p> 1059 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_USE_FACET</span></code> 1060 </p> 1061 </td> 1062<td> 1063 <p> 1064 Standard library 1065 </p> 1066 </td> 1067<td> 1068 <p> 1069 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>. 1070 </p> 1071 </td> 1072</tr> 1073<tr> 1074<td> 1075 <p> 1076 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTREAMBUF</span></code> 1077 </p> 1078 </td> 1079<td> 1080 <p> 1081 Standard library 1082 </p> 1083 </td> 1084<td> 1085 <p> 1086 The standard library's implementation of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_streambuf</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span></code> is either missing, incomplete, 1087 or buggy. 1088 </p> 1089 </td> 1090</tr> 1091<tr> 1092<td> 1093 <p> 1094 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTRING</span></code> 1095 </p> 1096 </td> 1097<td> 1098 <p> 1099 Standard library 1100 </p> 1101 </td> 1102<td> 1103 <p> 1104 The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span></code>. 1105 </p> 1106 </td> 1107</tr> 1108<tr> 1109<td> 1110 <p> 1111 <code class="computeroutput"><span class="identifier">BOOST_NO_STDC_NAMESPACE</span></code> 1112 </p> 1113 </td> 1114<td> 1115 <p> 1116 Compiler, Platform 1117 </p> 1118 </td> 1119<td> 1120 <p> 1121 The contents of C++ standard headers for C library functions (the 1122 <code class="computeroutput"><span class="special"><</span><span class="identifier">c</span><span class="special">...></span></code> headers) have not been placed 1123 in namespace std. This test is difficult - some libraries "fake" 1124 the std C functions by adding using declarations to import them 1125 into namespace std, unfortunately they don't necessarily catch 1126 all of them... 1127 </p> 1128 </td> 1129</tr> 1130<tr> 1131<td> 1132 <p> 1133 <code class="computeroutput"><span class="identifier">BOOST_NO_STRINGSTREAM</span></code> 1134 </p> 1135 </td> 1136<td> 1137 <p> 1138 Standard library 1139 </p> 1140 </td> 1141<td> 1142 <p> 1143 The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">sstream</span><span class="special">></span></code> 1144 header. 1145 </p> 1146 </td> 1147</tr> 1148<tr> 1149<td> 1150 <p> 1151 <code class="computeroutput"><span class="identifier">BOOST_NO_SWPRINTF</span></code> 1152 </p> 1153 </td> 1154<td> 1155 <p> 1156 Platform 1157 </p> 1158 </td> 1159<td> 1160 <p> 1161 The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">swprintf</span></code>. 1162 </p> 1163 </td> 1164</tr> 1165<tr> 1166<td> 1167 <p> 1168 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION</span></code> 1169 </p> 1170 </td> 1171<td> 1172 <p> 1173 Compiler 1174 </p> 1175 </td> 1176<td> 1177 <p> 1178 Class template partial specialization (14.5.4 [temp.class.spec]) 1179 not supported. 1180 </p> 1181 </td> 1182</tr> 1183<tr> 1184<td> 1185 <p> 1186 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_IOSTREAMS</span></code> 1187 </p> 1188 </td> 1189<td> 1190 <p> 1191 Standard library 1192 </p> 1193 </td> 1194<td> 1195 <p> 1196 The standard library does not provide templated iostream classes. 1197 </p> 1198 </td> 1199</tr> 1200<tr> 1201<td> 1202 <p> 1203 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS</span></code> 1204 </p> 1205 </td> 1206<td> 1207 <p> 1208 Standard library 1209 </p> 1210 </td> 1211<td> 1212 <p> 1213 The standard library does not provide templated iterator constructors 1214 for its containers. 1215 </p> 1216 </td> 1217</tr> 1218<tr> 1219<td> 1220 <p> 1221 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_TEMPLATES</span></code> 1222 </p> 1223 </td> 1224<td> 1225 <p> 1226 Compiler 1227 </p> 1228 </td> 1229<td> 1230 <p> 1231 The compiler does not support template template parameters. 1232 </p> 1233 </td> 1234</tr> 1235<tr> 1236<td> 1237 <p> 1238 <code class="computeroutput"><span class="identifier">BOOST_NO_TYPEID</span></code> 1239 </p> 1240 </td> 1241<td> 1242 <p> 1243 Compiler 1244 </p> 1245 </td> 1246<td> 1247 <p> 1248 The compiler does not support the typeid operator at all. 1249 </p> 1250 </td> 1251</tr> 1252<tr> 1253<td> 1254 <p> 1255 <code class="computeroutput"><span class="identifier">BOOST_NO_TYPENAME_WITH_CTOR</span></code> 1256 </p> 1257 </td> 1258<td> 1259 <p> 1260 Compiler 1261 </p> 1262 </td> 1263<td> 1264 <p> 1265 The typename keyword cannot be used when creating a temporary of 1266 a Dependent type. 1267 </p> 1268 </td> 1269</tr> 1270<tr> 1271<td> 1272 <p> 1273 <code class="computeroutput"><span class="identifier">BOOST_NO_UNREACHABLE_RETURN_DETECTION</span></code> 1274 </p> 1275 </td> 1276<td> 1277 <p> 1278 Compiler 1279 </p> 1280 </td> 1281<td> 1282 <p> 1283 If a return is unreachable, then no return statement should be 1284 required, however some compilers insist on it, while other issue 1285 a bunch of warnings if it is in fact present. 1286 </p> 1287 </td> 1288</tr> 1289<tr> 1290<td> 1291 <p> 1292 <code class="computeroutput"><span class="identifier">BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE</span></code> 1293 </p> 1294 </td> 1295<td> 1296 <p> 1297 Compiler 1298 </p> 1299 </td> 1300<td> 1301 <p> 1302 The compiler will not accept a using declaration that brings a 1303 function from a typename used as a base class into a derived class 1304 if functions of the same name are present in the derived class. 1305 </p> 1306 </td> 1307</tr> 1308<tr> 1309<td> 1310 <p> 1311 <code class="computeroutput"><span class="identifier">BOOST_NO_USING_TEMPLATE</span></code> 1312 </p> 1313 </td> 1314<td> 1315 <p> 1316 Compiler 1317 </p> 1318 </td> 1319<td> 1320 <p> 1321 The compiler will not accept a using declaration that imports a 1322 template class or function from another namespace. Originally a 1323 Borland specific problem with imports to/from the global namespace, 1324 extended to MSVC6 which has a specific issue with importing template 1325 classes (but not functions). 1326 </p> 1327 </td> 1328</tr> 1329<tr> 1330<td> 1331 <p> 1332 <code class="computeroutput"><span class="identifier">BOOST_NO_VOID_RETURNS</span></code> 1333 </p> 1334 </td> 1335<td> 1336 <p> 1337 Compiler 1338 </p> 1339 </td> 1340<td> 1341 <p> 1342 The compiler does not allow a void function to return the result 1343 of calling another void function. 1344</p> 1345<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{}</span> 1346<span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span> <span class="special">}</span> 1347</pre> 1348<p> 1349 </p> 1350 </td> 1351</tr> 1352</tbody> 1353</table></div> 1354</div> 1355<div class="section"> 1356<div class="titlepage"><div><div><h3 class="title"> 1357<a name="boost_config.boost_macro_reference.macros_that_describe_optional_features"></a><a name="config_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features" title="Macros that describe optional features">Macros 1358 that describe optional features</a> 1359</h3></div></div></div> 1360<p> 1361 The following macros describe features that are not required by the C++ standard. 1362 The macro is only defined if the feature is present. 1363 </p> 1364<div class="informaltable"><table class="table"> 1365<colgroup> 1366<col> 1367<col> 1368<col> 1369</colgroup> 1370<thead><tr> 1371<th> 1372 <p> 1373 Macro 1374 </p> 1375 </th> 1376<th> 1377 <p> 1378 Section 1379 </p> 1380 </th> 1381<th> 1382 <p> 1383 Description 1384 </p> 1385 </th> 1386</tr></thead> 1387<tbody> 1388<tr> 1389<td> 1390 <p> 1391 <code class="computeroutput"><span class="identifier">BOOST_HAS_BETHREADS</span></code> 1392 </p> 1393 </td> 1394<td> 1395 <p> 1396 Platform 1397 </p> 1398 </td> 1399<td> 1400 <p> 1401 The platform supports BeOS style threads. 1402 </p> 1403 </td> 1404</tr> 1405<tr> 1406<td> 1407 <p> 1408 <code class="computeroutput"><span class="identifier">BOOST_HAS_CLOCK_GETTIME</span></code> 1409 </p> 1410 </td> 1411<td> 1412 <p> 1413 Platform 1414 </p> 1415 </td> 1416<td> 1417 <p> 1418 The platform has the POSIX API <code class="computeroutput"><span class="identifier">clock_gettime</span></code>. 1419 </p> 1420 </td> 1421</tr> 1422<tr> 1423<td> 1424 <p> 1425 <code class="computeroutput"><span class="identifier">BOOST_HAS_DIRENT_H</span></code> 1426 </p> 1427 </td> 1428<td> 1429 <p> 1430 Platform 1431 </p> 1432 </td> 1433<td> 1434 <p> 1435 The platform has the POSIX header <code class="computeroutput"><span class="special"><</span><span class="identifier">dirent</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 1436 </p> 1437 </td> 1438</tr> 1439<tr> 1440<td> 1441 <p> 1442 <code class="computeroutput"><span class="identifier">BOOST_HAS_EXPM1</span></code> 1443 </p> 1444 </td> 1445<td> 1446 <p> 1447 Platform 1448 </p> 1449 </td> 1450<td> 1451 <p> 1452 The platform has the functions <code class="computeroutput"><span class="identifier">expm1</span></code>, 1453 <code class="computeroutput"><span class="identifier">expm1f</span></code> and <code class="computeroutput"><span class="identifier">expm1l</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 1454 </p> 1455 </td> 1456</tr> 1457<tr> 1458<td> 1459 <p> 1460 <code class="computeroutput"><span class="identifier">BOOST_HAS_FLOAT128</span></code> 1461 </p> 1462 </td> 1463<td> 1464 <p> 1465 Compiler 1466 </p> 1467 </td> 1468<td> 1469 <p> 1470 The compiler has <code class="computeroutput"><span class="identifier">__float128</span></code> 1471 as a native type which is distinct from all the regular C++ floating 1472 point types. 1473 </p> 1474 </td> 1475</tr> 1476<tr> 1477<td> 1478 <p> 1479 <code class="computeroutput"><span class="identifier">BOOST_HAS_FTIME</span></code> 1480 </p> 1481 </td> 1482<td> 1483 <p> 1484 Platform 1485 </p> 1486 </td> 1487<td> 1488 <p> 1489 The platform has the Win32 API type FTIME. 1490 </p> 1491 </td> 1492</tr> 1493<tr> 1494<td> 1495 <p> 1496 <code class="computeroutput"><span class="identifier">BOOST_HAS_GETSYSTEMTIMEASFILETIME</span></code> 1497 </p> 1498 </td> 1499<td> 1500 <p> 1501 Platform 1502 </p> 1503 </td> 1504<td> 1505 <p> 1506 The platform has the Win32 API GetSystemTimeAsFileTime. 1507 </p> 1508 </td> 1509</tr> 1510<tr> 1511<td> 1512 <p> 1513 <code class="computeroutput"><span class="identifier">BOOST_HAS_GETTIMEOFDAY</span></code> 1514 </p> 1515 </td> 1516<td> 1517 <p> 1518 Platform 1519 </p> 1520 </td> 1521<td> 1522 <p> 1523 The platform has the POSIX API <code class="computeroutput"><span class="identifier">gettimeofday</span></code>. 1524 </p> 1525 </td> 1526</tr> 1527<tr> 1528<td> 1529 <p> 1530 <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code> 1531 </p> 1532 </td> 1533<td> 1534 <p> 1535 Standard library 1536 </p> 1537 </td> 1538<td> 1539 <p> 1540 The C++ implementation provides the (SGI) hash_set and hash_map 1541 classes. When defined, <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code> 1542 and <code class="computeroutput"><span class="identifier">BOOST_HASH_LIST_HEADER</span></code> 1543 will contain the names of the header needed to access hash_set 1544 and hash_map; <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code> 1545 will provide the namespace in which the two class templates reside. 1546 </p> 1547 </td> 1548</tr> 1549<tr> 1550<td> 1551 <p> 1552 <code class="computeroutput"><span class="identifier">BOOST_HAS_INT128</span></code> 1553 </p> 1554 </td> 1555<td> 1556 <p> 1557 Compiler 1558 </p> 1559 </td> 1560<td> 1561 <p> 1562 The compiler has <code class="computeroutput"><span class="identifier">__int128</span></code> 1563 and <code class="computeroutput"><span class="keyword">unsigned</span> <span class="identifier">__int128</span></code> 1564 as native types which are distinct from all the regular C++ integer 1565 types. 1566 </p> 1567 </td> 1568</tr> 1569<tr> 1570<td> 1571 <p> 1572 <code class="computeroutput"><span class="identifier">BOOST_HAS_LOG1P</span></code> 1573 </p> 1574 </td> 1575<td> 1576 <p> 1577 Platform 1578 </p> 1579 </td> 1580<td> 1581 <p> 1582 The platform has the functions <code class="computeroutput"><span class="identifier">log1p</span></code>, 1583 <code class="computeroutput"><span class="identifier">log1pf</span></code> and <code class="computeroutput"><span class="identifier">log1pl</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 1584 </p> 1585 </td> 1586</tr> 1587<tr> 1588<td> 1589 <p> 1590 <code class="computeroutput"><span class="identifier">BOOST_HAS_MACRO_USE_FACET</span></code> 1591 </p> 1592 </td> 1593<td> 1594 <p> 1595 Standard library 1596 </p> 1597 </td> 1598<td> 1599 <p> 1600 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>, 1601 but has a macro <code class="computeroutput"><span class="identifier">_USE</span><span class="special">(</span><span class="identifier">loc</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">)</span></code> that does the job. This is primarily 1602 for the Dinkumware std lib. 1603 </p> 1604 </td> 1605</tr> 1606<tr> 1607<td> 1608 <p> 1609 <code class="computeroutput"><span class="identifier">BOOST_HAS_MS_INT64</span></code> 1610 </p> 1611 </td> 1612<td> 1613 <p> 1614 Compiler 1615 </p> 1616 </td> 1617<td> 1618 <p> 1619 The compiler supports the <code class="computeroutput"><span class="identifier">__int64</span></code> 1620 data type. 1621 </p> 1622 </td> 1623</tr> 1624<tr> 1625<td> 1626 <p> 1627 <code class="computeroutput"><span class="identifier">BOOST_HAS_NANOSLEEP</span></code> 1628 </p> 1629 </td> 1630<td> 1631 <p> 1632 Platform 1633 </p> 1634 </td> 1635<td> 1636 <p> 1637 The platform has the POSIX API nanosleep. 1638 </p> 1639 </td> 1640</tr> 1641<tr> 1642<td> 1643 <p> 1644 <code class="computeroutput"><span class="identifier">BOOST_HAS_NL_TYPES_H</span></code> 1645 </p> 1646 </td> 1647<td> 1648 <p> 1649 Platform 1650 </p> 1651 </td> 1652<td> 1653 <p> 1654 The platform has an <code class="computeroutput"><span class="special"><</span><span class="identifier">nl_types</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 1655 </p> 1656 </td> 1657</tr> 1658<tr> 1659<td> 1660 <p> 1661 <code class="computeroutput"><span class="identifier">BOOST_HAS_NRVO</span></code> 1662 </p> 1663 </td> 1664<td> 1665 <p> 1666 Compiler 1667 </p> 1668 </td> 1669<td> 1670 <p> 1671 Indicated that the compiler supports the named return value optimization 1672 (NRVO). Used to select the most efficient implementation for some 1673 function. See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example. 1674 </p> 1675 </td> 1676</tr> 1677<tr> 1678<td> 1679 <p> 1680 <code class="computeroutput"><span class="identifier">BOOST_HAS_PARTIAL_STD_ALLOCATOR</span></code> 1681 </p> 1682 </td> 1683<td> 1684 <p> 1685 Standard Library 1686 </p> 1687 </td> 1688<td> 1689 <p> 1690 The standard library has a partially conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code> 1691 class, but without any of the member templates. 1692 </p> 1693 </td> 1694</tr> 1695<tr> 1696<td> 1697 <p> 1698 <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_ONCE</span></code> 1699 </p> 1700 </td> 1701<td> 1702 <p> 1703 Compiler 1704 </p> 1705 </td> 1706<td> 1707 <p> 1708 The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span> 1709 <span class="identifier">once</span></code> directive which 1710 tells that the containing header should be included only once while 1711 preprocessing the current translation unit. The pragma may improve 1712 compile times of large projects with some compilers. 1713 </p> 1714 </td> 1715</tr> 1716<tr> 1717<td> 1718 <p> 1719 <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_DETECT_MISMATCH</span></code> 1720 </p> 1721 </td> 1722<td> 1723 <p> 1724 Compiler 1725 </p> 1726 </td> 1727<td> 1728 <p> 1729 The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span> 1730 <span class="identifier">detect_mismatch</span><span class="special">(</span><span class="string">"name"</span><span class="special">,</span> 1731 <span class="string">"value"</span><span class="special">)</span></code> 1732 directive which tells that the link stage should be terminated 1733 with error if values for provided <code class="computeroutput"><span class="string">"name"</span></code> 1734 missmatch. This pragma may be a help in preventing ODR violations 1735 and ensuring that different modules are compiled with same flags. 1736 </p> 1737 </td> 1738</tr> 1739<tr> 1740<td> 1741 <p> 1742 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_DELAY_NP</span></code> 1743 </p> 1744 </td> 1745<td> 1746 <p> 1747 Platform 1748 </p> 1749 </td> 1750<td> 1751 <p> 1752 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_delay_np</span></code>. 1753 </p> 1754 </td> 1755</tr> 1756<tr> 1757<td> 1758 <p> 1759 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE</span></code> 1760 </p> 1761 </td> 1762<td> 1763 <p> 1764 Platform 1765 </p> 1766 </td> 1767<td> 1768 <p> 1769 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_mutexattr_settype</span></code>. 1770 </p> 1771 </td> 1772</tr> 1773<tr> 1774<td> 1775 <p> 1776 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_YIELD</span></code> 1777 </p> 1778 </td> 1779<td> 1780 <p> 1781 Platform 1782 </p> 1783 </td> 1784<td> 1785 <p> 1786 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_yield</span></code>. 1787 </p> 1788 </td> 1789</tr> 1790<tr> 1791<td> 1792 <p> 1793 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREADS</span></code> 1794 </p> 1795 </td> 1796<td> 1797 <p> 1798 Platform 1799 </p> 1800 </td> 1801<td> 1802 <p> 1803 The platform support POSIX style threads. 1804 </p> 1805 </td> 1806</tr> 1807<tr> 1808<td> 1809 <p> 1810 <code class="computeroutput"><span class="identifier">BOOST_HAS_SCHED_YIELD</span></code> 1811 </p> 1812 </td> 1813<td> 1814 <p> 1815 Platform 1816 </p> 1817 </td> 1818<td> 1819 <p> 1820 The platform has the POSIX API <code class="computeroutput"><span class="identifier">sched_yield</span></code>. 1821 </p> 1822 </td> 1823</tr> 1824<tr> 1825<td> 1826 <p> 1827 <code class="computeroutput"><span class="identifier">BOOST_HAS_SGI_TYPE_TRAITS</span></code> 1828 </p> 1829 </td> 1830<td> 1831 <p> 1832 Compiler, Standard library 1833 </p> 1834 </td> 1835<td> 1836 <p> 1837 The compiler has native support for SGI style type traits. 1838 </p> 1839 </td> 1840</tr> 1841<tr> 1842<td> 1843 <p> 1844 <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code> 1845 </p> 1846 </td> 1847<td> 1848 <p> 1849 Platform 1850 </p> 1851 </td> 1852<td> 1853 <p> 1854 The platform has a <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 1855 </p> 1856 </td> 1857</tr> 1858<tr> 1859<td> 1860 <p> 1861 <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code> 1862 </p> 1863 </td> 1864<td> 1865 <p> 1866 Standard library 1867 </p> 1868 </td> 1869<td> 1870 <p> 1871 The C++ implementation provides the (SGI) slist class. When defined, 1872 <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code> 1873 will contain the name of the header needed to access <code class="computeroutput"><span class="identifier">slist</span></code> and <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code> 1874 will provide the namespace in which <code class="computeroutput"><span class="identifier">slist</span></code> 1875 resides. 1876 </p> 1877 </td> 1878</tr> 1879<tr> 1880<td> 1881 <p> 1882 <code class="computeroutput"><span class="identifier">BOOST_HAS_STLP_USE_FACET</span></code> 1883 </p> 1884 </td> 1885<td> 1886 <p> 1887 Standard library 1888 </p> 1889 </td> 1890<td> 1891 <p> 1892 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>, 1893 but has a workaround class-version that does the job. This is primarily 1894 for the STLport std lib. 1895 </p> 1896 </td> 1897</tr> 1898<tr> 1899<td> 1900 <p> 1901 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_ARRAY</span></code> 1902 </p> 1903 </td> 1904<td> 1905 <p> 1906 Standard library 1907 </p> 1908 </td> 1909<td> 1910 <p> 1911 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">array</span><span class="special">></span></code>. 1912 This macro is only guaranteed to be defined after including one 1913 of the headers from Boost.TR1. Further this macro is now deprecated 1914 in favour of BOOST_NO_CXX11_HDR_ARRAY. 1915 </p> 1916 </td> 1917</tr> 1918<tr> 1919<td> 1920 <p> 1921 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_OVERLOADS</span></code> 1922 </p> 1923 </td> 1924<td> 1925 <p> 1926 Standard library 1927 </p> 1928 </td> 1929<td> 1930 <p> 1931 The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code> 1932 that supports passing scalars to the complex number algorithms. 1933 </p> 1934 </td> 1935</tr> 1936<tr> 1937<td> 1938 <p> 1939 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG</span></code> 1940 </p> 1941 </td> 1942<td> 1943 <p> 1944 Standard library 1945 </p> 1946 </td> 1947<td> 1948 <p> 1949 The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code> 1950 that includes the new inverse trig functions from TR1. 1951 </p> 1952 </td> 1953</tr> 1954<tr> 1955<td> 1956 <p> 1957 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REFERENCE_WRAPPER</span></code> 1958 </p> 1959 </td> 1960<td> 1961 <p> 1962 Standard library 1963 </p> 1964 </td> 1965<td> 1966 <p> 1967 The library has TR1 conforming reference wrappers in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 1968 to be defined after including one of the headers from Boost.TR1. 1969 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 1970 </p> 1971 </td> 1972</tr> 1973<tr> 1974<td> 1975 <p> 1976 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RESULT_OF</span></code> 1977 </p> 1978 </td> 1979<td> 1980 <p> 1981 Standard library 1982 </p> 1983 </td> 1984<td> 1985 <p> 1986 The library has a TR1 conforming result_of template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 1987 to be defined after including one of the headers from Boost.TR1. 1988 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 1989 </p> 1990 </td> 1991</tr> 1992<tr> 1993<td> 1994 <p> 1995 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_MEM_FN</span></code> 1996 </p> 1997 </td> 1998<td> 1999 <p> 2000 Standard library 2001 </p> 2002 </td> 2003<td> 2004 <p> 2005 The library has a TR1 conforming mem_fn function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 2006 to be defined after including one of the headers from Boost.TR1. 2007 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 2008 </p> 2009 </td> 2010</tr> 2011<tr> 2012<td> 2013 <p> 2014 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_BIND</span></code> 2015 </p> 2016 </td> 2017<td> 2018 <p> 2019 Standard library 2020 </p> 2021 </td> 2022<td> 2023 <p> 2024 The library has a TR1 conforming bind function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 2025 to be defined after including one of the headers from Boost.TR1. 2026 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 2027 </p> 2028 </td> 2029</tr> 2030<tr> 2031<td> 2032 <p> 2033 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_FUNCTION</span></code> 2034 </p> 2035 </td> 2036<td> 2037 <p> 2038 Standard library 2039 </p> 2040 </td> 2041<td> 2042 <p> 2043 The library has a TR1 conforming function class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 2044 to be defined after including one of the headers from Boost.TR1. 2045 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 2046 </p> 2047 </td> 2048</tr> 2049<tr> 2050<td> 2051 <p> 2052 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_HASH</span></code> 2053 </p> 2054 </td> 2055<td> 2056 <p> 2057 Standard library 2058 </p> 2059 </td> 2060<td> 2061 <p> 2062 The library has a TR1 conforming hash function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed 2063 to be defined after including one of the headers from Boost.TR1. 2064 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL. 2065 </p> 2066 </td> 2067</tr> 2068<tr> 2069<td> 2070 <p> 2071 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_SHARED_PTR</span></code> 2072 </p> 2073 </td> 2074<td> 2075 <p> 2076 Standard library 2077 </p> 2078 </td> 2079<td> 2080 <p> 2081 The library has a TR1 conforming <code class="computeroutput"><span class="identifier">shared_ptr</span></code> 2082 class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">memory</span><span class="special">></span></code>. 2083 This macro is only guaranteed to be defined after including one 2084 of the headers from Boost.TR1. Further this macro is now deprecated 2085 in favour of BOOST_NO_CXX11_SMART_PTR. 2086 </p> 2087 </td> 2088</tr> 2089<tr> 2090<td> 2091 <p> 2092 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RANDOM</span></code> 2093 </p> 2094 </td> 2095<td> 2096 <p> 2097 Standard library 2098 </p> 2099 </td> 2100<td> 2101 <p> 2102 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">random</span><span class="special">></span></code>. 2103 This macro is only guaranteed to be defined after including one 2104 of the headers from Boost.TR1. Further this macro is now deprecated 2105 in favour of BOOST_NO_CXX11_HDR_RANDOM. 2106 </p> 2107 </td> 2108</tr> 2109<tr> 2110<td> 2111 <p> 2112 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REGEX</span></code> 2113 </p> 2114 </td> 2115<td> 2116 <p> 2117 Standard library 2118 </p> 2119 </td> 2120<td> 2121 <p> 2122 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">regex</span><span class="special">></span></code>. 2123 This macro is only guaranteed to be defined after including one 2124 of the headers from Boost.TR1. Further this macro is now deprecated 2125 in favour of BOOST_NO_CXX11_HDR_REGEX. 2126 </p> 2127 </td> 2128</tr> 2129<tr> 2130<td> 2131 <p> 2132 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TUPLE</span></code> 2133 </p> 2134 </td> 2135<td> 2136 <p> 2137 Standard library 2138 </p> 2139 </td> 2140<td> 2141 <p> 2142 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">tuple</span><span class="special">></span></code>. 2143 This macro is only guaranteed to be defined after including one 2144 of the headers from Boost.TR1. Further this macro is now deprecated 2145 in favour of BOOST_NO_CXX11_HDR_TUPLE. 2146 </p> 2147 </td> 2148</tr> 2149<tr> 2150<td> 2151 <p> 2152 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TYPE_TRAITS</span></code> 2153 </p> 2154 </td> 2155<td> 2156 <p> 2157 Standard library 2158 </p> 2159 </td> 2160<td> 2161 <p> 2162 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span></code>. 2163 This macro is only guaranteed to be defined after including one 2164 of the headers from Boost.TR1. Further this macro is now deprecated 2165 in favour of BOOST_NO_CXX11_HDR_TYPE_TRAITS. 2166 </p> 2167 </td> 2168</tr> 2169<tr> 2170<td> 2171 <p> 2172 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UTILITY</span></code> 2173 </p> 2174 </td> 2175<td> 2176 <p> 2177 Standard library 2178 </p> 2179 </td> 2180<td> 2181 <p> 2182 The library has the TR1 additions to <code class="computeroutput"><span class="special"><</span><span class="identifier">utility</span><span class="special">></span></code> 2183 (tuple interface to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code>). 2184 This macro is only guaranteed to be defined after including one 2185 of the headers from Boost.TR1. Further this macro is now deprecated 2186 in favour of BOOST_NO_CXX11_HDR_TUPLE. 2187 </p> 2188 </td> 2189</tr> 2190<tr> 2191<td> 2192 <p> 2193 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_MAP</span></code> 2194 </p> 2195 </td> 2196<td> 2197 <p> 2198 Standard library 2199 </p> 2200 </td> 2201<td> 2202 <p> 2203 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_map</span><span class="special">></span></code>. 2204 This macro is only guaranteed to be defined after including one 2205 of the headers from Boost.TR1. Further this macro is now deprecated 2206 in favour of BOOST_NO_CXX11_HDR_UNORDERED_MAP. 2207 </p> 2208 </td> 2209</tr> 2210<tr> 2211<td> 2212 <p> 2213 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_SET</span></code> 2214 </p> 2215 </td> 2216<td> 2217 <p> 2218 Standard library 2219 </p> 2220 </td> 2221<td> 2222 <p> 2223 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_set</span><span class="special">></span></code>. 2224 This macro is only guaranteed to be defined after including one 2225 of the headers from Boost.TR1. Further this macro is now deprecated 2226 in favour of BOOST_NO_CXX11_HDR_UNORDERED_SET. 2227 </p> 2228 </td> 2229</tr> 2230<tr> 2231<td> 2232 <p> 2233 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1</span></code> 2234 </p> 2235 </td> 2236<td> 2237 <p> 2238 Standard library 2239 </p> 2240 </td> 2241<td> 2242 <p> 2243 Implies all the other <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_</span><span class="special">*</span></code> macros should be set. 2244 </p> 2245 </td> 2246</tr> 2247<tr> 2248<td> 2249 <p> 2250 <code class="computeroutput"><span class="identifier">BOOST_HAS_THREADS</span></code> 2251 </p> 2252 </td> 2253<td> 2254 <p> 2255 Platform, Compiler 2256 </p> 2257 </td> 2258<td> 2259 <p> 2260 Defined if the compiler, in its current translation mode, supports 2261 multiple threads of execution. 2262 </p> 2263 </td> 2264</tr> 2265<tr> 2266<td> 2267 <p> 2268 <code class="computeroutput"><span class="identifier">BOOST_HAS_TWO_ARG_USE_FACET</span></code> 2269 </p> 2270 </td> 2271<td> 2272 <p> 2273 Standard library 2274 </p> 2275 </td> 2276<td> 2277 <p> 2278 The standard library lacks a conforming std::use_facet, but has 2279 a two argument version that does the job. This is primarily for 2280 the Rogue Wave std lib. 2281 </p> 2282 </td> 2283</tr> 2284<tr> 2285<td> 2286 <p> 2287 <code class="computeroutput"><span class="identifier">BOOST_HAS_UNISTD_H</span></code> 2288 </p> 2289 </td> 2290<td> 2291 <p> 2292 Platform 2293 </p> 2294 </td> 2295<td> 2296 <p> 2297 The Platform provides <code class="computeroutput"><span class="special"><</span><span class="identifier">unistd</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 2298 </p> 2299 </td> 2300</tr> 2301<tr> 2302<td> 2303 <p> 2304 <code class="computeroutput"><span class="identifier">BOOST_HAS_WINTHREADS</span></code> 2305 </p> 2306 </td> 2307<td> 2308 <p> 2309 Platform 2310 </p> 2311 </td> 2312<td> 2313 <p> 2314 The platform supports MS Windows style threads. 2315 </p> 2316 </td> 2317</tr> 2318<tr> 2319<td> 2320 <p> 2321 <code class="computeroutput"><span class="identifier">BOOST_MSVC_STD_ITERATOR</span></code> 2322 </p> 2323 </td> 2324<td> 2325 <p> 2326 Standard library 2327 </p> 2328 </td> 2329<td> 2330 <p> 2331 Microsoft's broken version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code> 2332 is being used. This implies that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code> 2333 takes no more than two template parameters. 2334 </p> 2335 </td> 2336</tr> 2337<tr> 2338<td> 2339 <p> 2340 <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code> 2341 </p> 2342 </td> 2343<td> 2344 <p> 2345 Compiler 2346 </p> 2347 </td> 2348<td> 2349 <p> 2350 Microsoft Visual C++ 6.0 has enough member template idiosyncrasies 2351 (being polite) that <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code> 2352 is defined for this compiler. <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code> 2353 is defined to allow compiler specific workarounds. This macro gets 2354 defined automatically if <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code> 2355 is not defined - in other words this is treated as a strict subset 2356 of the features required by the standard. 2357 </p> 2358 </td> 2359</tr> 2360<tr> 2361<td> 2362 <p> 2363 <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code> 2364 </p> 2365 </td> 2366<td> 2367 <p> 2368 Platform 2369 </p> 2370 </td> 2371<td> 2372 <p> 2373 There are no 1998 C++ Standard headers <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 2374 or <code class="computeroutput"><span class="special"><</span><span class="identifier">cstdint</span><span class="special">></span></code>, although the 1999 C Standard 2375 does include <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>. 2376 If <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> is present, <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 2377 can make good use of it, so a flag is supplied (signalling presence; 2378 thus the default is not present, conforming to the current C++ 2379 standard). 2380 </p> 2381 </td> 2382</tr> 2383</tbody> 2384</table></div> 2385</div> 2386<div class="section"> 2387<div class="titlepage"><div><div><h3 class="title"> 2388<a name="boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features" title="Macros that describe possible C++ future features">Macros 2389 that describe possible C++ future features</a> 2390</h3></div></div></div> 2391<p> 2392 The following macros describe features that may be included in some future 2393 ISO C++ standard, but have not yet been approved for inclusion in the language. 2394 </p> 2395<div class="informaltable"><table class="table"> 2396<colgroup> 2397<col> 2398<col> 2399</colgroup> 2400<thead><tr> 2401<th> 2402 <p> 2403 Macro 2404 </p> 2405 </th> 2406<th> 2407 <p> 2408 Description 2409 </p> 2410 </th> 2411</tr></thead> 2412<tbody><tr> 2413<td> 2414 <p> 2415 <code class="computeroutput"><span class="identifier">BOOST_HAS_CONCEPTS</span></code> 2416 </p> 2417 </td> 2418<td> 2419 <p> 2420 The compiler supports concepts. 2421 </p> 2422 </td> 2423</tr></tbody> 2424</table></div> 2425</div> 2426<div class="section"> 2427<div class="titlepage"><div><div><h3 class="title"> 2428<a name="boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported" title="Macros that describe C++11 features not supported">Macros 2429 that describe C++11 features not supported</a> 2430</h3></div></div></div> 2431<p> 2432 The following macros describe features in the 2011 ISO C++ standard, formerly 2433 known as C++0x, that are not yet supported by a particular compiler or library. 2434 </p> 2435<div class="informaltable"><table class="table"> 2436<colgroup> 2437<col> 2438<col> 2439</colgroup> 2440<thead><tr> 2441<th> 2442 <p> 2443 Macro 2444 </p> 2445 </th> 2446<th> 2447 <p> 2448 Description 2449 </p> 2450 </th> 2451</tr></thead> 2452<tbody> 2453<tr> 2454<td> 2455 <p> 2456 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ADDRESSOF</span></code> 2457 </p> 2458 </td> 2459<td> 2460 <p> 2461 The standard library header <memory> has no working std::addressof. 2462 </p> 2463 </td> 2464</tr> 2465<tr> 2466<td> 2467 <p> 2468 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALIGNAS</span></code> 2469 </p> 2470 </td> 2471<td> 2472 <p> 2473 The compiler does not support the <code class="computeroutput"><span class="keyword">alignas</span></code> 2474 keyword. 2475 </p> 2476 </td> 2477</tr> 2478<tr> 2479<td> 2480 <p> 2481 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALLOCATOR</span></code> 2482 </p> 2483 </td> 2484<td> 2485 <p> 2486 The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code> in <memory>. 2487 </p> 2488 </td> 2489</tr> 2490<tr> 2491<td> 2492 <p> 2493 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ATOMIC_SMART_PTR</span></code> 2494 </p> 2495 </td> 2496<td> 2497 <p> 2498 The standard library <memory> does not support atomic smart 2499 pointer operations. 2500 </p> 2501 </td> 2502</tr> 2503<tr> 2504<td> 2505 <p> 2506 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code> 2507 </p> 2508 </td> 2509<td> 2510 <p> 2511 The compiler does not support type deduction for variables declared 2512 with the <code class="computeroutput"><span class="keyword">auto</span></code> keyword 2513 (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span> 2514 <span class="special">=</span> <span class="special">...;</span></code>). 2515 </p> 2516 </td> 2517</tr> 2518<tr> 2519<td> 2520 <p> 2521 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code> 2522 </p> 2523 </td> 2524<td> 2525 <p> 2526 The compiler does not support type deduction for multiple variables 2527 declared with the <code class="computeroutput"><span class="keyword">auto</span></code> 2528 keyword (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span> 2529 <span class="special">=</span> <span class="special">...,</span> 2530 <span class="special">*</span><span class="identifier">ptr</span> 2531 <span class="special">=</span> <span class="special">...;</span></code>). 2532 </p> 2533 </td> 2534</tr> 2535<tr> 2536<td> 2537 <p> 2538 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code> 2539 </p> 2540 </td> 2541<td> 2542 <p> 2543 The compiler does not support type <code class="computeroutput"><span class="keyword">char16_t</span></code>. 2544 </p> 2545 </td> 2546</tr> 2547<tr> 2548<td> 2549 <p> 2550 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code> 2551 </p> 2552 </td> 2553<td> 2554 <p> 2555 The compiler does not support type <code class="computeroutput"><span class="keyword">char32_t</span></code>. 2556 </p> 2557 </td> 2558</tr> 2559<tr> 2560<td> 2561 <p> 2562 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code> 2563 </p> 2564 </td> 2565<td> 2566 <p> 2567 The compiler does not support <code class="computeroutput"><span class="keyword">constexpr</span></code>. 2568 </p> 2569 </td> 2570</tr> 2571<tr> 2572<td> 2573 <p> 2574 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code> 2575 </p> 2576 </td> 2577<td> 2578 <p> 2579 The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span></code>. 2580 </p> 2581 </td> 2582</tr> 2583<tr> 2584<td> 2585 <p> 2586 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code> 2587 </p> 2588 </td> 2589<td> 2590 <p> 2591 The compiler does not support the extension to <code class="computeroutput"><span class="keyword">decltype</span></code> 2592 described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf" target="_top">N3276</a>, 2593 accepted in Madrid, March 2011. 2594 </p> 2595 </td> 2596</tr> 2597<tr> 2598<td> 2599 <p> 2600 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code> 2601 </p> 2602 </td> 2603<td> 2604 <p> 2605 The compiler does not support deleted (<code class="computeroutput"><span class="special">=</span> 2606 <span class="keyword">delete</span></code>) functions. 2607 </p> 2608 </td> 2609</tr> 2610<tr> 2611<td> 2612 <p> 2613 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code> 2614 </p> 2615 </td> 2616<td> 2617 <p> 2618 The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span> 2619 <span class="keyword">default</span></code>) functions. 2620 </p> 2621 </td> 2622</tr> 2623<tr> 2624<td> 2625 <p> 2626 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_MOVES</span></code> 2627 </p> 2628 </td> 2629<td> 2630 <p> 2631 The compiler does not support defaulted move constructor or assignment. 2632 Other defaulted functions may still be supported. 2633 </p> 2634 </td> 2635</tr> 2636<tr> 2637<td> 2638 <p> 2639 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code> 2640 </p> 2641 </td> 2642<td> 2643 <p> 2644 The compiler does not support explicit conversion operators (<code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span> 2645 <span class="identifier">T</span><span class="special">()</span></code>). 2646 </p> 2647 </td> 2648</tr> 2649<tr> 2650<td> 2651 <p> 2652 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code> 2653 </p> 2654 </td> 2655<td> 2656 <p> 2657 The compiler does not support explicit instantiation forward declarations 2658 for templates (<code class="computeroutput"><span class="keyword">extern</span> <span class="keyword">template</span> <span class="special">...</span></code>). 2659 </p> 2660 </td> 2661</tr> 2662<tr> 2663<td> 2664 <p> 2665 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code> 2666 </p> 2667 </td> 2668<td> 2669 <p> 2670 The compiler does not support the C++ class-virt-specifier final. 2671 </p> 2672 </td> 2673</tr> 2674<tr> 2675<td> 2676 <p> 2677 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS</span></code> 2678 </p> 2679 </td> 2680<td> 2681 <p> 2682 The compiler does not support expanding a variadic template parameter 2683 pack into a template containing one or more fixed arguments 2684 </p> 2685 </td> 2686</tr> 2687<tr> 2688<td> 2689 <p> 2690 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code> 2691 </p> 2692 </td> 2693<td> 2694 <p> 2695 The compiler does not support default template arguments for function 2696 templates. 2697 </p> 2698 </td> 2699</tr> 2700<tr> 2701<td> 2702 <p> 2703 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ATOMIC</span></code> 2704 </p> 2705 </td> 2706<td> 2707 <p> 2708 The standard library does not provide header <atomic>. 2709 </p> 2710 </td> 2711</tr> 2712<tr> 2713<td> 2714 <p> 2715 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code> 2716 </p> 2717 </td> 2718<td> 2719 <p> 2720 The standard library does not provide header <array>. 2721 </p> 2722 </td> 2723</tr> 2724<tr> 2725<td> 2726 <p> 2727 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code> 2728 </p> 2729 </td> 2730<td> 2731 <p> 2732 The standard library does not provide header <chrono>. 2733 </p> 2734 </td> 2735</tr> 2736<tr> 2737<td> 2738 <p> 2739 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code> 2740 </p> 2741 </td> 2742<td> 2743 <p> 2744 The standard library does not provide header <codecvt>. 2745 </p> 2746 </td> 2747</tr> 2748<tr> 2749<td> 2750 <p> 2751 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code> 2752 </p> 2753 </td> 2754<td> 2755 <p> 2756 The standard library does not provide header <condition_variable>. 2757 </p> 2758 </td> 2759</tr> 2760<tr> 2761<td> 2762 <p> 2763 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_EXCEPTION</span></code> 2764 </p> 2765 </td> 2766<td> 2767 <p> 2768 The standard library does not provide a C++11 compatible version 2769 of <exception>. 2770 </p> 2771 </td> 2772</tr> 2773<tr> 2774<td> 2775 <p> 2776 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code> 2777 </p> 2778 </td> 2779<td> 2780 <p> 2781 The standard library does not provide header <forward_list>. 2782 </p> 2783 </td> 2784</tr> 2785<tr> 2786<td> 2787 <p> 2788 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUNCTIONAL</span></code> 2789 </p> 2790 </td> 2791<td> 2792 <p> 2793 The standard library does not provide a C++11 compatible version 2794 of <functional>. 2795 </p> 2796 </td> 2797</tr> 2798<tr> 2799<td> 2800 <p> 2801 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code> 2802 </p> 2803 </td> 2804<td> 2805 <p> 2806 The standard library does not provide header <future>. 2807 </p> 2808 </td> 2809</tr> 2810<tr> 2811<td> 2812 <p> 2813 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code> 2814 </p> 2815 </td> 2816<td> 2817 <p> 2818 The standard library does not provide header <initializer_list>. 2819 </p> 2820 </td> 2821</tr> 2822<tr> 2823<td> 2824 <p> 2825 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code> 2826 </p> 2827 </td> 2828<td> 2829 <p> 2830 The standard library does not provide header <mutex>. 2831 </p> 2832 </td> 2833</tr> 2834<tr> 2835<td> 2836 <p> 2837 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code> 2838 </p> 2839 </td> 2840<td> 2841 <p> 2842 The standard library does not provide header <random>. 2843 </p> 2844 </td> 2845</tr> 2846<tr> 2847<td> 2848 <p> 2849 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code> 2850 </p> 2851 </td> 2852<td> 2853 <p> 2854 The standard library does not provide header <ratio>. 2855 </p> 2856 </td> 2857</tr> 2858<tr> 2859<td> 2860 <p> 2861 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code> 2862 </p> 2863 </td> 2864<td> 2865 <p> 2866 The standard library does not provide header <regex>. 2867 </p> 2868 </td> 2869</tr> 2870<tr> 2871<td> 2872 <p> 2873 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code> 2874 </p> 2875 </td> 2876<td> 2877 <p> 2878 The standard library does not provide header <system_error>. 2879 </p> 2880 </td> 2881</tr> 2882<tr> 2883<td> 2884 <p> 2885 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code> 2886 </p> 2887 </td> 2888<td> 2889 <p> 2890 The standard library does not provide header <thread>. 2891 </p> 2892 </td> 2893</tr> 2894<tr> 2895<td> 2896 <p> 2897 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code> 2898 </p> 2899 </td> 2900<td> 2901 <p> 2902 The standard library does not provide header <tuple>. 2903 </p> 2904 </td> 2905</tr> 2906<tr> 2907<td> 2908 <p> 2909 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code> 2910 </p> 2911 </td> 2912<td> 2913 <p> 2914 The standard library does not provide header <typeindex>. 2915 </p> 2916 </td> 2917</tr> 2918<tr> 2919<td> 2920 <p> 2921 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code> 2922 </p> 2923 </td> 2924<td> 2925 <p> 2926 The standard library does not provide header <type_traits>. 2927 </p> 2928 </td> 2929</tr> 2930<tr> 2931<td> 2932 <p> 2933 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code> 2934 </p> 2935 </td> 2936<td> 2937 <p> 2938 The standard library does not provide header <unordered_map>. 2939 </p> 2940 </td> 2941</tr> 2942<tr> 2943<td> 2944 <p> 2945 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code> 2946 </p> 2947 </td> 2948<td> 2949 <p> 2950 The standard library does not provide header <unordered_set>. 2951 </p> 2952 </td> 2953</tr> 2954<tr> 2955<td> 2956 <p> 2957 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_INLINE_NAMESPACES</span></code> 2958 </p> 2959 </td> 2960<td> 2961 <p> 2962 The compiler does not support inline namespaces. 2963 </p> 2964 </td> 2965</tr> 2966<tr> 2967<td> 2968 <p> 2969 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code> 2970 </p> 2971 </td> 2972<td> 2973 <p> 2974 The compiler does not support Lambdas. 2975 </p> 2976 </td> 2977</tr> 2978<tr> 2979<td> 2980 <p> 2981 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code> 2982 </p> 2983 </td> 2984<td> 2985 <p> 2986 The compiler does not allow to pass local classes as template parameters 2987 (this macro intentionally does not control passing of unnamed types 2988 as template parameters, see also <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm" target="_top">N2657</a>). 2989 </p> 2990 </td> 2991</tr> 2992<tr> 2993<td> 2994 <p> 2995 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS</span></code> 2996 </p> 2997 </td> 2998<td> 2999 <p> 3000 The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span> 3001 <span class="keyword">default</span></code>) functions in access 3002 control sections other than <code class="computeroutput"><span class="keyword">public</span></code>. 3003 Public defaulted functions may still be supported, as indicated 3004 by <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>. 3005 Some compilers implementing an early draft of the C++11 standard 3006 (in particular, incorporating <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#906" target="_top">DR906</a>) 3007 are susceptible to this problem. 3008 </p> 3009 </td> 3010</tr> 3011<tr> 3012<td> 3013 <p> 3014 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code> 3015 </p> 3016 </td> 3017<td> 3018 <p> 3019 The compiler does not support <code class="computeroutput"><span class="keyword">noexcept</span></code>. 3020 </p> 3021 </td> 3022</tr> 3023<tr> 3024<td> 3025 <p> 3026 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code> 3027 </p> 3028 </td> 3029<td> 3030 <p> 3031 The compiler does not support <code class="computeroutput"><span class="keyword">nullptr</span></code>. 3032 </p> 3033 </td> 3034</tr> 3035<tr> 3036<td> 3037 <p> 3038 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code> 3039 </p> 3040 </td> 3041<td> 3042 <p> 3043 The standard library <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code> 3044 header does not support the C++11 version of <code class="computeroutput"><span class="identifier">numeric_limits</span></code>. 3045 </p> 3046 </td> 3047</tr> 3048<tr> 3049<td> 3050 <p> 3051 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_OVERRIDE</span></code> 3052 </p> 3053 </td> 3054<td> 3055 <p> 3056 The compiler does not support <code class="computeroutput"><span class="identifier">override</span></code>. 3057 </p> 3058 </td> 3059</tr> 3060<tr> 3061<td> 3062 <p> 3063 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_POINTER_TRAITS</span></code> 3064 </p> 3065 </td> 3066<td> 3067 <p> 3068 The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pointer_traits</span></code> in <memory>. 3069 </p> 3070 </td> 3071</tr> 3072<tr> 3073<td> 3074 <p> 3075 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RANGE_BASED_FOR</span></code> 3076 </p> 3077 </td> 3078<td> 3079 <p> 3080 The compiler does not support range-based for statements. 3081 </p> 3082 </td> 3083</tr> 3084<tr> 3085<td> 3086 <p> 3087 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code> 3088 </p> 3089 </td> 3090<td> 3091 <p> 3092 The compiler does not support raw string literals. 3093 </p> 3094 </td> 3095</tr> 3096<tr> 3097<td> 3098 <p> 3099 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_REF_QUALIFIERS</span></code> 3100 </p> 3101 </td> 3102<td> 3103 <p> 3104 The compiler does not support ref-qualifiers on member functions 3105 as described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm" target="_top">N2439</a>. 3106 </p> 3107 </td> 3108</tr> 3109<tr> 3110<td> 3111 <p> 3112 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code> 3113 </p> 3114 </td> 3115<td> 3116 <p> 3117 The compiler does not support r-value references. 3118 </p> 3119 </td> 3120</tr> 3121<tr> 3122<td> 3123 <p> 3124 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code> 3125 </p> 3126 </td> 3127<td> 3128 <p> 3129 The compiler does not support scoped enumerations (<code class="computeroutput"><span class="keyword">enum</span> <span class="keyword">class</span></code>). 3130 </p> 3131 </td> 3132</tr> 3133<tr> 3134<td> 3135 <p> 3136 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SFINAE_EXPR</span></code> 3137 </p> 3138 </td> 3139<td> 3140 <p> 3141 The compiler does not support usage of C++11 SFINAE with arbitrary 3142 expressions. Use this macro only if you are using all of the features 3143 of SFINAE including substitution-failure-on-private-member-access. 3144 Otherwise use BOOST_NO_SFINAE_EXPR or BOOST_NO_SFINAE which get 3145 defined for fewer compilers. 3146 </p> 3147 </td> 3148</tr> 3149<tr> 3150<td> 3151 <p> 3152 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SMART_PTR</span></code> 3153 </p> 3154 </td> 3155<td> 3156 <p> 3157 The standard library header <memory> has no shared_ptr and 3158 unique_ptr. 3159 </p> 3160 </td> 3161</tr> 3162<tr> 3163<td> 3164 <p> 3165 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code> 3166 </p> 3167 </td> 3168<td> 3169 <p> 3170 The compiler does not support <code class="computeroutput"><span class="keyword">static_assert</span></code>. 3171 </p> 3172 </td> 3173</tr> 3174<tr> 3175<td> 3176 <p> 3177 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_ALIGN</span></code> 3178 </p> 3179 </td> 3180<td> 3181 <p> 3182 The standard library header <memory> has no working std::align. 3183 </p> 3184 </td> 3185</tr> 3186<tr> 3187<td> 3188 <p> 3189 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code> 3190 </p> 3191 </td> 3192<td> 3193 <p> 3194 The standard library does not support <unordered_map> and 3195 <unordered_set>. 3196 </p> 3197 </td> 3198</tr> 3199<tr> 3200<td> 3201 <p> 3202 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code> 3203 </p> 3204 </td> 3205<td> 3206 <p> 3207 The compiler does not support template aliases. 3208 </p> 3209 </td> 3210</tr> 3211<tr> 3212<td> 3213 <p> 3214 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_THREAD_LOCAL</span></code> 3215 </p> 3216 </td> 3217<td> 3218 <p> 3219 The compiler does not support the <code class="computeroutput"><span class="keyword">thread_local</span></code> 3220 storage specifier. 3221 </p> 3222 </td> 3223</tr> 3224<tr> 3225<td> 3226 <p> 3227 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TRAILING_RESULT_TYPES</span></code> 3228 </p> 3229 </td> 3230<td> 3231 <p> 3232 The compiler does not support the new function result type specification 3233 syntax (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span> 3234 <span class="special">-></span> <span class="identifier">T</span><span class="special">;</span></code>). 3235 </p> 3236 </td> 3237</tr> 3238<tr> 3239<td> 3240 <p> 3241 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code> 3242 </p> 3243 </td> 3244<td> 3245 <p> 3246 The compiler does not support Unicode (<code class="computeroutput"><span class="identifier">u8</span></code>, 3247 <code class="computeroutput"><span class="identifier">u</span></code>, <code class="computeroutput"><span class="identifier">U</span></code>) literals. 3248 </p> 3249 </td> 3250</tr> 3251<tr> 3252<td> 3253 <p> 3254 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code> 3255 </p> 3256 </td> 3257<td> 3258 <p> 3259 The compiler does not support the <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization" target="_top">C++11 3260 Unified Initialization Syntax</a>. 3261 </p> 3262 </td> 3263</tr> 3264<tr> 3265<td> 3266 <p> 3267 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNRESTRICTED_UNION</span></code> 3268 </p> 3269 </td> 3270<td> 3271 <p> 3272 The compiler does not support an unrestricted union. This is a 3273 union that may contain static data as well as user-defined member 3274 data with non-trivial special member functions. 3275 </p> 3276 </td> 3277</tr> 3278<tr> 3279<td> 3280 <p> 3281 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_USER_DEFINED_LITERALS</span></code> 3282 </p> 3283 </td> 3284<td> 3285 <p> 3286 The compiler does not support user defined literals. 3287 </p> 3288 </td> 3289</tr> 3290<tr> 3291<td> 3292 <p> 3293 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code> 3294 </p> 3295 </td> 3296<td> 3297 <p> 3298 The compiler does not support variadic templates. 3299 </p> 3300 </td> 3301</tr> 3302<tr> 3303<td> 3304 <p> 3305 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code> 3306 </p> 3307 </td> 3308<td> 3309 <p> 3310 The compiler does not support variadic macros. 3311 </p> 3312 </td> 3313</tr> 3314<tr> 3315<td> 3316 <p> 3317 <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG</span></code> 3318 </p> 3319 </td> 3320<td> 3321 <p> 3322 The compiler does not support <code class="computeroutput"><span class="keyword">long</span> 3323 <span class="keyword">long</span></code>. 3324 </p> 3325 </td> 3326</tr> 3327</tbody> 3328</table></div> 3329</div> 3330<div class="section"> 3331<div class="titlepage"><div><div><h3 class="title"> 3332<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers"></a><a name="config_11_for_03"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers" title="Macros that allow use of C++11 features with C++03 compilers">Macros 3333 that allow use of C++11 features with C++03 compilers</a> 3334</h3></div></div></div> 3335<p> 3336 The following macros allow use of C++11 features even with compilers that 3337 do not yet provide compliant C++11 support. 3338 </p> 3339<div class="informaltable"><table class="table"> 3340<colgroup> 3341<col> 3342<col> 3343</colgroup> 3344<thead><tr> 3345<th> 3346 <p> 3347 Macro 3348 </p> 3349 </th> 3350<th> 3351 <p> 3352 Description 3353 </p> 3354 </th> 3355</tr></thead> 3356<tbody> 3357<tr> 3358<td> 3359 <p> 3360 <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>, <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code> 3361 </p> 3362 </td> 3363<td> 3364 <p> 3365 Some compilers don't support the <code class="computeroutput"><span class="keyword">alignas</span></code> 3366 keyword but provide other means to specify alignment (usually, 3367 through compiler-specific attributes). The macro <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> 3368 will expand to the <code class="computeroutput"><span class="keyword">alignas</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> keyword if the compiler supports 3369 it or to some compiler-specific attribute to achieve the specified 3370 alignment. If no such compiler-specific attribute is known then 3371 <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> will expand to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code> will be defined. 3372 Unlike native <code class="computeroutput"><span class="keyword">alignas</span></code>, 3373 <code class="computeroutput"><span class="identifier">X</span></code> must always be 3374 a compile-time integer constant. The macro can be used to specify 3375 alignment of types and data: 3376</p> 3377<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">my_data</span> 3378<span class="special">{</span> 3379 <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">16</span><span class="special">];</span> 3380<span class="special">};</span> 3381<span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">8</span><span class="special">)</span> <span class="keyword">int</span> <span class="identifier">arr</span><span class="special">[</span><span class="number">32</span><span class="special">];</span> 3382</pre> 3383<p> 3384 </p> 3385 </td> 3386</tr> 3387<tr> 3388<td> 3389 <p> 3390 <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code> 3391 </p> 3392 </td> 3393<td> 3394 <p> 3395 Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>. 3396 This macro expands to nothing on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code> elsewhere. For example, 3397 when defining a constexpr function or constructor replace: 3398</p> 3399<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">constexpr</span> <span class="identifier">tuple</span><span class="special">();</span> 3400</pre> 3401<p> 3402 with: 3403</p> 3404<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_CONSTEXPR</span> <span class="identifier">tuple</span><span class="special">();</span> 3405</pre> 3406<p> 3407 </p> 3408 </td> 3409</tr> 3410<tr> 3411<td> 3412 <p> 3413 <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code> 3414 </p> 3415 </td> 3416<td> 3417 <p> 3418 Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>. 3419 This macro expands to <code class="computeroutput"><span class="keyword">const</span></code> 3420 on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code> 3421 elsewhere. For example, when defining const expr variables replace: 3422</p> 3423<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> 3424</pre> 3425<p> 3426 with: 3427</p> 3428<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> 3429</pre> 3430<p> 3431 </p> 3432 </td> 3433</tr> 3434<tr> 3435<td> 3436 <p> 3437 <code class="computeroutput"><span class="identifier">BOOST_OVERRIDE</span></code> 3438 </p> 3439 </td> 3440<td> 3441 <p> 3442 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_OVERRIDE</span></code> 3443 is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">override</span></code> keyword, otherwise expands 3444 to nothing. 3445 </p> 3446 </td> 3447</tr> 3448<tr> 3449<td> 3450 <p> 3451 <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTEXPR</span></code> 3452 </p> 3453 </td> 3454<td> 3455 <p> 3456 This is a shortcut for <code class="computeroutput"><span class="keyword">static</span> 3457 <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>. 3458 For example, when defining const expr variables replace: 3459</p> 3460<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> 3461</pre> 3462<p> 3463 with: 3464</p> 3465<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_STATIC_CONSTEXPR</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span> 3466</pre> 3467<p> 3468 </p> 3469 </td> 3470</tr> 3471<tr> 3472<td> 3473 <p> 3474 <code class="computeroutput"><span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">,</span> <span class="identifier">body</span><span class="special">)</span></code> 3475 </p> 3476 </td> 3477<td> 3478 <p> 3479 This macro is intended to be used within a class definition in 3480 order to declare a default implementation of function <code class="computeroutput"><span class="identifier">fun</span></code>. For the compilers that do 3481 not support C++11 defaulted functions the macro will expand into 3482 an inline function definition with the <code class="computeroutput"><span class="identifier">body</span></code> 3483 implementation. For example: 3484</p> 3485<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span> 3486<span class="special">{</span> 3487 <span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">my_struct</span><span class="special">(),</span> <span class="special">{})</span> 3488<span class="special">};</span> 3489</pre> 3490<p> 3491 is equivalent to: 3492</p> 3493<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span> 3494<span class="special">{</span> 3495 <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span> 3496<span class="special">};</span> 3497</pre> 3498<p> 3499 or: 3500</p> 3501<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span> 3502<span class="special">{</span> 3503 <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">{}</span> 3504<span class="special">};</span> 3505</pre> 3506<p> 3507 </p> 3508 </td> 3509</tr> 3510<tr> 3511<td> 3512 <p> 3513 <code class="computeroutput"><span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">)</span></code> 3514 </p> 3515 </td> 3516<td> 3517 <p> 3518 This macro is intended to be used within a class definition in 3519 order to declare a deleted function <code class="computeroutput"><span class="identifier">fun</span></code>. 3520 For the compilers that do not support C++11 deleted functions the 3521 macro will expand into a private function declaration with no definition. 3522 Since the macro may change the access mode, it is recommended to 3523 use this macro at the end of the class definition. For example: 3524</p> 3525<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span> 3526<span class="special">{</span> 3527 <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span> 3528 <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span> 3529<span class="special">};</span> 3530</pre> 3531<p> 3532 is equivalent to: 3533</p> 3534<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span> 3535<span class="special">{</span> 3536 <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 3537 <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span> 3538<span class="special">};</span> 3539</pre> 3540<p> 3541 or: 3542</p> 3543<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span> 3544<span class="special">{</span> 3545<span class="keyword">private</span><span class="special">:</span> 3546 <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span> 3547 <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span> 3548<span class="special">};</span> 3549</pre> 3550<p> 3551 </p> 3552 </td> 3553</tr> 3554<tr> 3555<td> 3556 <p> 3557</p> 3558<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOEXCEPT</span> 3559<span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> 3560<span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> 3561<span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> 3562</pre> 3563<p> 3564 </p> 3565 </td> 3566<td> 3567 <p> 3568 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code> 3569 is defined (i.e. C++03 compliant compilers) these macros are defined 3570 as: 3571 </p> 3572 <div class="blockquote"><blockquote class="blockquote"> 3573<p> 3574</p> 3575<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> 3576<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">throw</span><span class="special">()</span> 3577<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> 3578<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">false</span> 3579</pre> 3580<p> 3581 </p> 3582</blockquote></div> 3583 <p> 3584 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code> 3585 is not defined (i.e. C++11 compliant compilers) they are defined 3586 as: 3587 </p> 3588 <div class="blockquote"><blockquote class="blockquote"> 3589<p> 3590</p> 3591<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> <span class="keyword">noexcept</span> 3592<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">noexcept</span> 3593<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Predicate</span><span class="special">))</span> 3594<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Expression</span><span class="special">))</span> 3595</pre> 3596<p> 3597 </p> 3598</blockquote></div> 3599 </td> 3600</tr> 3601<tr> 3602<td> 3603 <p> 3604 <code class="computeroutput"><span class="identifier">BOOST_FINAL</span></code> 3605 </p> 3606 </td> 3607<td> 3608 <p> 3609 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code> 3610 is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">final</span></code> keyword, otherwise expands 3611 to nothing. 3612 </p> 3613 </td> 3614</tr> 3615<tr> 3616<td> 3617 <p> 3618 <code class="computeroutput"><span class="identifier">BOOST_MSVC_ENABLE_2012_NOV_CTP</span></code> 3619 </p> 3620 </td> 3621<td> 3622 <p> 3623 For Microsoft Visual C++ 2012, enable the C++11 features supplied 3624 by the November 2012 Community Technology Preview. These features 3625 are not automatically enabled because the CTP is non-supported 3626 alpha code that is not recommended for production use. This macro 3627 must be defined before including any Boost headers, and must be 3628 defined for all translation units in the program, including Boost 3629 library builds. This macro will no longer have any effect once 3630 an official Microsoft release supports the CTP features. 3631 </p> 3632 </td> 3633</tr> 3634</tbody> 3635</table></div> 3636</div> 3637<div class="section"> 3638<div class="titlepage"><div><div><h3 class="title"> 3639<a name="boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported" title="Macros that describe C++14 features not supported">Macros 3640 that describe C++14 features not supported</a> 3641</h3></div></div></div> 3642<p> 3643 The following macros describe features in the 2014 ISO C++ standard, formerly 3644 known as C++0y, that are not yet supported by a particular compiler or library. 3645 </p> 3646<div class="informaltable"><table class="table"> 3647<colgroup> 3648<col> 3649<col> 3650</colgroup> 3651<thead><tr> 3652<th> 3653 <p> 3654 Macro 3655 </p> 3656 </th> 3657<th> 3658 <p> 3659 Description 3660 </p> 3661 </th> 3662</tr></thead> 3663<tbody> 3664<tr> 3665<td> 3666 <p> 3667 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_AGGREGATE_NSDMI</span></code> 3668 </p> 3669 </td> 3670<td> 3671 <p> 3672 The compiler does not support member initializer for aggregates 3673 as in the following example: 3674 </p> 3675 <div class="blockquote"><blockquote class="blockquote"> 3676<p> 3677</p> 3678<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">Foo</span> 3679<span class="special">{</span> 3680 <span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">42</span><span class="special">;</span> 3681<span class="special">};</span> 3682 3683<span class="identifier">Foo</span> <span class="identifier">foo</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0</span> <span class="special">};</span> 3684</pre> 3685<p> 3686 </p> 3687</blockquote></div> 3688 </td> 3689</tr> 3690<tr> 3691<td> 3692 <p> 3693 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_BINARY_LITERALS</span></code> 3694 </p> 3695 </td> 3696<td> 3697 <p> 3698 The compiler does not binary literals (e.g. <code class="computeroutput"><span class="number">0</span><span class="identifier">b1010</span></code>). 3699 </p> 3700 </td> 3701</tr> 3702<tr> 3703<td> 3704 <p> 3705 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_CONSTEXPR</span></code> 3706 </p> 3707 </td> 3708<td> 3709 <p> 3710 The compiler does not support relaxed <code class="computeroutput"><span class="keyword">constexpr</span></code>. 3711 </p> 3712 </td> 3713</tr> 3714<tr> 3715<td> 3716 <p> 3717 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DECLTYPE_AUTO</span></code> 3718 </p> 3719 </td> 3720<td> 3721 <p> 3722 The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span><span class="special">(</span><span class="keyword">auto</span><span class="special">)</span></code>. 3723 </p> 3724 </td> 3725</tr> 3726<tr> 3727<td> 3728 <p> 3729 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DIGIT_SEPARATORS</span></code> 3730 </p> 3731 </td> 3732<td> 3733 <p> 3734 The compiler does not support digit separators (e.g. <code class="computeroutput"><span class="number">1</span><span class="char">'000'</span><span class="number">000</span></code>). 3735 </p> 3736 </td> 3737</tr> 3738<tr> 3739<td> 3740 <p> 3741 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_STD_EXCHANGE</span></code> 3742 </p> 3743 </td> 3744<td> 3745 <p> 3746 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exchange</span><span class="special">()</span></code>. 3747 </p> 3748 </td> 3749</tr> 3750<tr> 3751<td> 3752 <p> 3753 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_GENERIC_LAMBDAS</span></code> 3754 </p> 3755 </td> 3756<td> 3757 <p> 3758 The compiler does not support generic lambda (e.g. <code class="computeroutput"><span class="special">[](</span><span class="keyword">auto</span> 3759 <span class="identifier">v</span><span class="special">){</span> 3760 <span class="special">}</span></code>). 3761 </p> 3762 </td> 3763</tr> 3764<tr> 3765<td> 3766 <p> 3767 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_HDR_SHARED_MUTEX</span></code> 3768 </p> 3769 </td> 3770<td> 3771 <p> 3772 The standard library does not provide header <shared_mutex>. 3773 </p> 3774 </td> 3775</tr> 3776<tr> 3777<td> 3778 <p> 3779 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES</span></code> 3780 </p> 3781 </td> 3782<td> 3783 <p> 3784 The compiler does not support initialized lambda capture (e.g. 3785 <code class="computeroutput"><span class="special">[</span><span class="identifier">foo</span> 3786 <span class="special">=</span> <span class="number">42</span><span class="special">]{</span> <span class="special">}</span></code>). 3787 </p> 3788 </td> 3789</tr> 3790<tr> 3791<td> 3792 <p> 3793 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION</span></code> 3794 </p> 3795 </td> 3796<td> 3797 <p> 3798 The compiler does not support return type deduction for normal 3799 functions (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">f</span><span class="special">()</span> 3800 <span class="special">{</span> <span class="keyword">return</span> 3801 <span class="identifier">val</span><span class="special">;</span> 3802 <span class="special">}</span></code>). 3803 </p> 3804 </td> 3805</tr> 3806<tr> 3807<td> 3808 <p> 3809 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_VARIABLE_TEMPLATES</span></code> 3810 </p> 3811 </td> 3812<td> 3813 <p> 3814 The compiler does not support variable template (e.g. <code class="computeroutput"><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> 3815 <span class="identifier">kibi</span> <span class="special">=</span> 3816 <span class="identifier">T</span><span class="special">(</span><span class="number">1024</span><span class="special">);</span></code>). 3817 </p> 3818 </td> 3819</tr> 3820</tbody> 3821</table></div> 3822</div> 3823<div class="section"> 3824<div class="titlepage"><div><div><h3 class="title"> 3825<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers"></a><a name="config_14_for_11"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers" title="Macros that allow use of C++14 features with C++11 or earlier compilers">Macros 3826 that allow use of C++14 features with C++11 or earlier compilers</a> 3827</h3></div></div></div> 3828<p> 3829 The following macros allow use of C++14 features even with compilers that 3830 do not yet provide compliant C++14 support. 3831 </p> 3832<div class="informaltable"><table class="table"> 3833<colgroup> 3834<col> 3835<col> 3836</colgroup> 3837<thead><tr> 3838<th> 3839 <p> 3840 Macro 3841 </p> 3842 </th> 3843<th> 3844 <p> 3845 Description 3846 </p> 3847 </th> 3848</tr></thead> 3849<tbody><tr> 3850<td> 3851 <p> 3852 <code class="computeroutput"><span class="identifier">BOOST_CXX14_CONSTEXPR</span></code> 3853 </p> 3854 </td> 3855<td> 3856 <p> 3857 This macro works similar to <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>, 3858 but expands to <code class="computeroutput"><span class="keyword">constexpr</span></code> 3859 only if the C++14 "relaxed" <code class="computeroutput"><span class="keyword">constexpr</span></code> 3860 is available. 3861 </p> 3862 </td> 3863</tr></tbody> 3864</table></div> 3865</div> 3866<div class="section"> 3867<div class="titlepage"><div><div><h3 class="title"> 3868<a name="boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported" title="Macros that describe C++17 features not supported">Macros 3869 that describe C++17 features not supported</a> 3870</h3></div></div></div> 3871<p> 3872 The following macros describe features in the 2017 ISO C++ standard, formerly 3873 known as C++1z, that are not yet supported by a particular compiler or library. 3874 </p> 3875<div class="informaltable"><table class="table"> 3876<colgroup> 3877<col> 3878<col> 3879</colgroup> 3880<thead><tr> 3881<th> 3882 <p> 3883 Macro 3884 </p> 3885 </th> 3886<th> 3887 <p> 3888 Description 3889 </p> 3890 </th> 3891</tr></thead> 3892<tbody> 3893<tr> 3894<td> 3895 <p> 3896 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_OPTIONAL</span></code> 3897 </p> 3898 </td> 3899<td> 3900 <p> 3901 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">optional</span><span class="special">></span></code>. 3902 </p> 3903 </td> 3904</tr> 3905<tr> 3906<td> 3907 <p> 3908 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_VARIANT</span></code> 3909 </p> 3910 </td> 3911<td> 3912 <p> 3913 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">variant</span><span class="special">></span></code>. 3914 </p> 3915 </td> 3916</tr> 3917<tr> 3918<td> 3919 <p> 3920 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_STRING_VIEW</span></code> 3921 </p> 3922 </td> 3923<td> 3924 <p> 3925 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">string_view</span><span class="special">></span></code>. 3926 </p> 3927 </td> 3928</tr> 3929<tr> 3930<td> 3931 <p> 3932 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_APPLY</span></code> 3933 </p> 3934 </td> 3935<td> 3936 <p> 3937 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">apply</span><span class="special">()</span></code>. 3938 </p> 3939 </td> 3940</tr> 3941<tr> 3942<td> 3943 <p> 3944 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_INVOKE</span></code> 3945 </p> 3946 </td> 3947<td> 3948 <p> 3949 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">invoke</span><span class="special">()</span></code>. 3950 </p> 3951 </td> 3952</tr> 3953<tr> 3954<td> 3955 <p> 3956 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_ITERATOR_TRAITS</span></code> 3957 </p> 3958 </td> 3959<td> 3960 <p> 3961 The compiler does not support SFINAE-friendly <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>. 3962 </p> 3963 </td> 3964</tr> 3965<tr> 3966<td> 3967 <p> 3968 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_IF_CONSTEXPR</span></code> 3969 </p> 3970 </td> 3971<td> 3972 <p> 3973 The compiler does not support <code class="computeroutput"><span class="keyword">if</span> 3974 <span class="keyword">constexpr</span></code>. 3975 </p> 3976 </td> 3977</tr> 3978<tr> 3979<td> 3980 <p> 3981 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code> 3982 </p> 3983 </td> 3984<td> 3985 <p> 3986 The compiler does not support <code class="computeroutput"><span class="keyword">inline</span></code> 3987 variables. 3988 </p> 3989 </td> 3990</tr> 3991</tbody> 3992</table></div> 3993</div> 3994<div class="section"> 3995<div class="titlepage"><div><div><h3 class="title"> 3996<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers"></a><a name="config_17_for_14"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers" title="Macros that allow use of C++17 features with C++14 or earlier compilers">Macros 3997 that allow use of C++17 features with C++14 or earlier compilers</a> 3998</h3></div></div></div> 3999<p> 4000 The following macros allow use of C++17 features even with compilers that 4001 do not yet provide compliant C++17 support. 4002 </p> 4003<div class="informaltable"><table class="table"> 4004<colgroup> 4005<col> 4006<col> 4007</colgroup> 4008<thead><tr> 4009<th> 4010 <p> 4011 Macro 4012 </p> 4013 </th> 4014<th> 4015 <p> 4016 Description 4017 </p> 4018 </th> 4019</tr></thead> 4020<tbody> 4021<tr> 4022<td> 4023 <p> 4024 <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span></code> 4025 </p> 4026 </td> 4027<td> 4028 <p> 4029 This macro expands to <code class="computeroutput"><span class="keyword">inline</span></code> 4030 on compilers that support C++17 inline variables and to nothing 4031 otherwise. Users may need to check for <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code> 4032 for further adjustments to the code. 4033 </p> 4034 </td> 4035</tr> 4036<tr> 4037<td> 4038 <p> 4039 <code class="computeroutput"><span class="identifier">BOOST_IF_CONSTEXPR</span></code> 4040 </p> 4041 </td> 4042<td> 4043 <p> 4044 Expands to <code class="computeroutput"><span class="keyword">if</span> <span class="keyword">constexpr</span></code> 4045 when supported, or <code class="computeroutput"><span class="keyword">if</span></code> 4046 otherwise. 4047 </p> 4048 </td> 4049</tr> 4050<tr> 4051<td> 4052 <p> 4053 <code class="computeroutput"><span class="identifier">BOOST_INLINE_CONSTEXPR</span></code> 4054 </p> 4055 </td> 4056<td> 4057 <p> 4058 This is a shortcut for <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span> 4059 <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>. 4060 </p> 4061 </td> 4062</tr> 4063</tbody> 4064</table></div> 4065</div> 4066<div class="section"> 4067<div class="titlepage"><div><div><h3 class="title"> 4068<a name="boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_" title="Macros that describe features that have been removed from the standard.">Macros 4069 that describe features that have been removed from the standard.</a> 4070</h3></div></div></div> 4071<p> 4072 The following macros describe features which were required by one version 4073 of the standard, but have been removed by later versions. 4074 </p> 4075<div class="informaltable"><table class="table"> 4076<colgroup> 4077<col> 4078<col> 4079</colgroup> 4080<thead><tr> 4081<th> 4082 <p> 4083 Macro 4084 </p> 4085 </th> 4086<th> 4087 <p> 4088 Description 4089 </p> 4090 </th> 4091</tr></thead> 4092<tbody> 4093<tr> 4094<td> 4095 <p> 4096 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_RANDOM_SHUFFLE</span></code> 4097 </p> 4098 </td> 4099<td> 4100 <p> 4101 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">random_shuffle</span><span class="special">()</span></code>. It was deprecated in C++11 and 4102 is removed from C++14. 4103 </p> 4104 </td> 4105</tr> 4106<tr> 4107<td> 4108 <p> 4109 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code> 4110 </p> 4111 </td> 4112<td> 4113 <p> 4114 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>. 4115 It was deprecated in C++11 and is removed from C++14. 4116 </p> 4117 </td> 4118</tr> 4119<tr> 4120<td> 4121 <p> 4122 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_FUNCTION_BASE</span></code> 4123 </p> 4124 </td> 4125<td> 4126 <p> 4127 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unary_function</span></code> 4128 and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">binary_function</span></code>. They were deprecated 4129 in C++11 and is removed from C++14. 4130 </p> 4131 </td> 4132</tr> 4133<tr> 4134<td> 4135 <p> 4136 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_BINDERS</span></code> 4137 </p> 4138 </td> 4139<td> 4140 <p> 4141 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span></code>, 4142 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind2nd</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptr_fun</span></code> 4143 and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span></code>. They were deprecated 4144 in C++11 and is removed from C++14. 4145 </p> 4146 </td> 4147</tr> 4148</tbody> 4149</table></div> 4150</div> 4151<div class="section"> 4152<div class="titlepage"><div><div><h3 class="title"> 4153<a name="boost_config.boost_macro_reference.boost_helper_macros"></a><a name="config_helpers"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros" title="Boost Helper Macros">Boost 4154 Helper Macros</a> 4155</h3></div></div></div> 4156<p> 4157 The following macros are either simple helpers, or macros that provide workarounds 4158 for compiler/standard library defects. 4159 </p> 4160<div class="informaltable"><table class="table"> 4161<colgroup> 4162<col> 4163<col> 4164</colgroup> 4165<thead><tr> 4166<th> 4167 <p> 4168 Macro 4169 </p> 4170 </th> 4171<th> 4172 <p> 4173 Description 4174 </p> 4175 </th> 4176</tr></thead> 4177<tbody> 4178<tr> 4179<td> 4180 <p> 4181 <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span></code> 4182 </p> 4183 </td> 4184<td> 4185 <p> 4186 This macro is used where a compiler specific workaround is required 4187 that is not otherwise described by one of the other Boost.Config 4188 macros. To use the macro you must first 4189</p> 4190<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">workaround</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 4191</pre> 4192<p> 4193 usage is then: 4194</p> 4195<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">MACRONAME</span><span class="special">,</span> <span class="identifier">CONDITION</span><span class="special">)</span> 4196 <span class="comment">// workaround code goes here...</span> 4197<span class="preprocessor">#else</span> 4198 <span class="comment">// Standard conforming code goes here...</span> 4199<span class="preprocessor">#endif</span> 4200</pre> 4201<p> 4202 where <code class="computeroutput"><span class="identifier">MACRONAME</span></code> 4203 is a macro that usually describes the version number to be tested 4204 against, and <code class="computeroutput"><span class="identifier">CONDITION</span></code> 4205 is a comparison operator followed by a value. For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">BOOST_INTEL</span><span class="special">,</span> 4206 <span class="special"><=</span> <span class="number">1010</span><span class="special">)</span></code> would evaluate to <code class="computeroutput"><span class="number">1</span></code> for Intel C++ 10.1 and earlier. 4207 </p> 4208 <p> 4209 The macro can also be used with <code class="computeroutput"><span class="identifier">BOOST_TESTED_AT</span></code> 4210 if all current compiler versions exhibit the issue, but the issue 4211 is expected to be fixed at some later point. 4212 </p> 4213 <p> 4214 For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">__BORLANDC__</span><span class="special">,</span> <span class="identifier">BOOST_TESTED_AT</span><span class="special">(</span><span class="number">0x590</span><span class="special">))</span></code> would normally evaluate to <code class="computeroutput"><span class="number">1</span></code> for all values of <code class="computeroutput"><span class="identifier">__BORLANDC__</span></code> <span class="emphasis"><em>unless</em></span> 4215 the macro <code class="computeroutput"><span class="identifier">BOOST_DETECT_OUTDATED_WORKAROUNDS</span></code> 4216 is defined, in which case evaluates to <code class="computeroutput"><span class="special">(</span><span class="identifier">__BORLANDC__</span> <span class="special"><=</span> 4217 <span class="number">0x590</span><span class="special">)</span></code>. 4218 </p> 4219 <p> 4220 <span class="bold"><strong>Note</strong></span>: the ultimate source of documentation 4221 for this macro is in <a href="../../../../../boost/config/workaround.hpp" target="_top">boost/config/workaround.hpp</a>. 4222 </p> 4223 </td> 4224</tr> 4225<tr> 4226<td> 4227 <p> 4228 <code class="computeroutput"><span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span></code> 4229 </p> 4230 </td> 4231<td> 4232 <p> 4233 Sometimes you have a function name with the same name as a C macro, 4234 for example "min" and "max" member functions, 4235 in which case one can prevent the function being expanded as a 4236 macro using: 4237</p> 4238<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">min</span> <span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span> 4239</pre> 4240<p> 4241 The following also works in most, but not all, contexts: 4242</p> 4243<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">(</span><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span> 4244</pre> 4245<p> 4246 </p> 4247 </td> 4248</tr> 4249<tr> 4250<td> 4251 <p> 4252 <code class="computeroutput"><span class="identifier">BOOST_DEDUCED_TYPENAME</span></code> 4253 </p> 4254 </td> 4255<td> 4256 <p> 4257 Some compilers don't support the use of typename for dependent 4258 types in deduced contexts. This macro expands to nothing on those 4259 compilers, and typename elsewhere. For example, replace: <code class="computeroutput"><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">void</span> 4260 <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> 4261 <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code> with: <code class="computeroutput"><span class="keyword">template</span> 4262 <span class="special"><</span><span class="keyword">class</span> 4263 <span class="identifier">T</span><span class="special">></span> 4264 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">BOOST_DEDUCED_TYPENAME</span> 4265 <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code> 4266 </p> 4267 </td> 4268</tr> 4269<tr> 4270<td> 4271 <p> 4272 <code class="computeroutput"><span class="identifier">BOOST_HASH_MAP_HEADER</span></code> 4273 </p> 4274 </td> 4275<td> 4276 <p> 4277 The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_map</span></code> 4278 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code> 4279 is defined. 4280 </p> 4281 </td> 4282</tr> 4283<tr> 4284<td> 4285 <p> 4286 <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code> 4287 </p> 4288 </td> 4289<td> 4290 <p> 4291 The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_set</span></code> 4292 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code> 4293 is defined. 4294 </p> 4295 </td> 4296</tr> 4297<tr> 4298<td> 4299 <p> 4300 <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code> 4301 </p> 4302 </td> 4303<td> 4304 <p> 4305 The header to include to get the SGI <code class="computeroutput"><span class="identifier">slist</span></code> 4306 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code> 4307 is defined. 4308 </p> 4309 </td> 4310</tr> 4311<tr> 4312<td> 4313 <p> 4314 <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code> 4315 </p> 4316 </td> 4317<td> 4318 <p> 4319 The namespace used for std library extensions (hashtable classes 4320 etc). 4321 </p> 4322 </td> 4323</tr> 4324<tr> 4325<td> 4326 <p> 4327 <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">assignment</span><span class="special">)</span></code> 4328 </p> 4329 </td> 4330<td> 4331 <p> 4332 On compilers which don't allow in-class initialization of static 4333 integral constant members, we must use enums as a workaround if 4334 we want the constants to be available at compile-time. This macro 4335 gives us a convenient way to declare such constants. For example 4336 instead of: 4337</p> 4338<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span> 4339 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span> 4340<span class="special">};</span> 4341</pre> 4342<p> 4343 use: 4344</p> 4345<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span> 4346 <span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span> 4347<span class="special">};</span> 4348</pre> 4349<p> 4350 </p> 4351 </td> 4352</tr> 4353<tr> 4354<td> 4355 <p> 4356 <code class="computeroutput"><span class="identifier">BOOST_UNREACHABLE_RETURN</span><span class="special">(</span><span class="identifier">result</span><span class="special">)</span></code> 4357 </p> 4358 </td> 4359<td> 4360 <p> 4361 Normally evaluates to nothing, but evaluates to return x; if the 4362 compiler requires a return, even when it can never be reached. 4363 </p> 4364 </td> 4365</tr> 4366<tr> 4367<td> 4368 <p> 4369 <code class="computeroutput"><span class="identifier">BOOST_FALLTHROUGH</span></code> 4370 </p> 4371 </td> 4372<td> 4373 <p> 4374 The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through 4375 between switch labels: 4376</p> 4377<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">switch</span> <span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{</span> 4378<span class="keyword">case</span> <span class="number">40</span><span class="special">:</span> 4379<span class="keyword">case</span> <span class="number">41</span><span class="special">:</span> 4380 <span class="keyword">if</span> <span class="special">(</span><span class="identifier">truth_is_out_there</span><span class="special">)</span> <span class="special">{</span> 4381 <span class="special">++</span><span class="identifier">x</span><span class="special">;</span> 4382 <span class="identifier">BOOST_FALLTHROUGH</span><span class="special">;</span> <span class="comment">// Use instead of/along with annotations in </span> 4383 <span class="comment">// comments. </span> 4384 <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span> 4385 <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span> 4386 <span class="special">}</span> 4387 <span class="keyword">case</span> <span class="number">42</span><span class="special">:</span> 4388 <span class="special">...</span> 4389</pre> 4390<p> 4391 As shown in the example above, the BOOST_FALLTHROUGH macro should 4392 be followed by a semicolon. It is designed to mimic control-flow 4393 statements like 'break;', so it can be placed in most places where 4394 'break;' can, but only if there are no statements on the execution 4395 path between it and the next switch label. 4396 </p> 4397 <p> 4398 When compiled with Clang >3.2 in C++11 mode, the BOOST_FALLTHROUGH 4399 macro is expanded to <code class="computeroutput"><span class="special">[[</span><span class="identifier">clang</span><span class="special">::</span><span class="identifier">fallthrough</span><span class="special">]]</span></code> 4400 attribute, which is analysed when performing switch labels fall-through 4401 diagnostic ('-Wimplicit-fallthrough'). See clang <a href="http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough" target="_top">documentation 4402 on language extensions for details.</a> 4403 </p> 4404 <p> 4405 When used with unsupported compilers, the BOOST_FALLTHROUGH macro 4406 has no effect on diagnostics. 4407 </p> 4408 <p> 4409 In either case this macro has no effect on runtime behavior and 4410 performance of code. 4411 </p> 4412 </td> 4413</tr> 4414<tr> 4415<td> 4416 <p> 4417 <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> 4418 </p> 4419 <p> 4420 <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code> 4421 </p> 4422 <p> 4423 <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code> 4424 </p> 4425 <p> 4426 <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code> 4427 </p> 4428 </td> 4429<td> 4430 <p> 4431 Some compilers silently "fold" different function template 4432 instantiations if some of the template parameters don't appear 4433 in the function parameter list. For instance: 4434</p> 4435<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span> 4436<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">ostream</span><span class="special">></span> 4437<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">typeinfo</span><span class="special">></span> 4438 4439<span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span> 4440<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span> 4441 4442<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> 4443<span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span> 4444 4445<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span> 4446 <span class="identifier">f</span><span class="special"><</span><span class="number">1</span><span class="special">>();</span> 4447 <span class="identifier">f</span><span class="special"><</span><span class="number">2</span><span class="special">>();</span> 4448 4449 <span class="identifier">g</span><span class="special"><</span><span class="keyword">int</span><span class="special">>();</span> 4450 <span class="identifier">g</span><span class="special"><</span><span class="keyword">double</span><span class="special">>();</span> 4451<span class="special">}</span> 4452</pre> 4453<p> 4454 incorrectly outputs <code class="literal">2 2 double double</code> on VC++ 4455 6. These macros, to be used in the function parameter list, fix 4456 the problem without effects on the calling syntax. For instance, 4457 in the case above write: 4458</p> 4459<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span> 4460<span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span> 4461 4462<span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span> 4463<span class="keyword">void</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">T</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span> 4464</pre> 4465<p> 4466 Beware that they can declare (for affected compilers) a dummy defaulted 4467 parameter, so they 4468 </p> 4469 <p> 4470 <span class="bold"><strong>a)</strong></span> should be always invoked <span class="bold"><strong>at the end</strong></span> of the parameter list 4471 </p> 4472 <p> 4473 <span class="bold"><strong>b)</strong></span> can't be used if your function 4474 template is multiply declared. 4475 </p> 4476 <p> 4477 Furthermore, in order to add any needed comma separator, an <code class="computeroutput"><span class="identifier">APPEND_</span><span class="special">*</span></code> 4478 version must be used when the macro invocation appears after a 4479 normal parameter declaration or after the invocation of another 4480 macro of this same group. 4481 </p> 4482 </td> 4483</tr> 4484<tr> 4485<td> 4486 <p> 4487 <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code> 4488 </p> 4489 </td> 4490<td> 4491 <p> 4492 When the standard library does not have a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds 4493 available, but they differ from library to library. This macro 4494 provides a consistent way to access a locale's facets. For example, 4495 replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code> 4496 with: <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code> 4497 prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span></code>. 4498 </p> 4499 </td> 4500</tr> 4501<tr> 4502<td> 4503 <p> 4504 <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code> 4505 </p> 4506 </td> 4507<td> 4508 <p> 4509 When the standard library does not have a comforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span></code> there are various workarounds 4510 available, but they differ from library to library. This macro 4511 provides a consistent way to check a locale's facets. For example, 4512 replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code> 4513 with: <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code> 4514 prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span></code>. 4515 </p> 4516 </td> 4517</tr> 4518<tr> 4519<td> 4520 <p> 4521 <code class="computeroutput"><span class="identifier">BOOST_NESTED_TEMPLATE</span></code> 4522 </p> 4523 </td> 4524<td> 4525 <p> 4526 Member templates are supported by some compilers even though they 4527 can't use the <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span> 4528 <span class="identifier">member</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span></code> 4529 syntax, as a workaround replace: <code class="computeroutput"><span class="keyword">typedef</span> 4530 <span class="keyword">typename</span> <span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span> 4531 <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> 4532 <span class="identifier">binder</span><span class="special">;</span></code> 4533 with: <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">typename</span> 4534 <span class="identifier">A</span><span class="special">::</span><span class="identifier">BOOST_NESTED_TEMPLATE</span> <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">binder</span><span class="special">;</span></code> 4535 </p> 4536 </td> 4537</tr> 4538<tr> 4539<td> 4540 <p> 4541 <code class="computeroutput"><span class="identifier">BOOST_STRINGIZE</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> 4542 </p> 4543 </td> 4544<td> 4545 <p> 4546 Converts the parameter <code class="computeroutput"><span class="identifier">X</span></code> 4547 to a string after macro replacement on <code class="computeroutput"><span class="identifier">X</span></code> 4548 has been performed. 4549 </p> 4550 </td> 4551</tr> 4552<tr> 4553<td> 4554 <p> 4555 <code class="computeroutput"><span class="identifier">BOOST_JOIN</span><span class="special">(</span><span class="identifier">X</span><span class="special">,</span><span class="identifier">Y</span><span class="special">)</span></code> 4556 </p> 4557 </td> 4558<td> 4559 <p> 4560 This piece of macro magic joins the two arguments together, even 4561 when one of the arguments is itself a macro (see 16.3.1 in C++ 4562 standard). This is normally used to create a mangled name in combination 4563 with a predefined macro such a __LINE__. 4564 </p> 4565 </td> 4566</tr> 4567<tr> 4568<td> 4569 <p> 4570 <code class="computeroutput"><span class="identifier">BOOST_RESTRICT</span></code> 4571 </p> 4572 </td> 4573<td> 4574 <p> 4575 This macro can be used in place of the compiler specific variant 4576 of the C99 <code class="computeroutput"><span class="identifier">restrict</span></code> 4577 keyword to notify the compiler that, for the lifetime of the qualified 4578 pointer variable, only it and its derivative value will be used 4579 to gain access to the object it references. This limits the effect 4580 of pointer aliasing and helps the optimizers in generating better 4581 code. However, i this condition is violated, undefined behavior 4582 may occurs. 4583 </p> 4584 <p> 4585 Usage example: 4586</p> 4587<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">perform_computation</span><span class="special">(</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">out</span> <span class="special">)</span> 4588<span class="special">{</span> 4589 <span class="special">*</span><span class="identifier">out</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">in</span> <span class="special">*</span> <span class="number">0.5f</span><span class="special">;</span> 4590<span class="special">}</span> 4591</pre> 4592<p> 4593 </p> 4594 </td> 4595</tr> 4596<tr> 4597<td> 4598 <p> 4599 <code class="computeroutput"><span class="identifier">BOOST_FORCEINLINE</span></code> 4600 </p> 4601 </td> 4602<td> 4603 <p> 4604 This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code> 4605 keyword to instruct the compiler that the function should always 4606 be inlined. Overuse of this macro can lead to significant bloat, 4607 while good use can increase performance in certain cases, such 4608 as computation-intensive code built through generative programming 4609 techniques. 4610 </p> 4611 <p> 4612 Usage example: 4613</p> 4614<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> 4615<span class="identifier">BOOST_FORCEINLINE</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span> 4616<span class="special">{</span> 4617 <span class="keyword">return</span> <span class="identifier">t</span><span class="special">;</span> 4618<span class="special">}</span> 4619</pre> 4620<p> 4621 </p> 4622 <p> 4623 Note that use of this macro can lead to cryptic error messages 4624 with some compilers. Consider defining it to <code class="computeroutput"><span class="keyword">inline</span></code> 4625 before including the Boost.Config header in order to be able to 4626 debug errors more easily. 4627 </p> 4628 </td> 4629</tr> 4630<tr> 4631<td> 4632 <p> 4633 <code class="computeroutput"><span class="identifier">BOOST_NOINLINE</span></code> 4634 </p> 4635 </td> 4636<td> 4637 <p> 4638 This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code> 4639 keyword to instruct the compiler that the function should never 4640 be inlined. One should typically use this macro to mark functions 4641 that are unlikely to be called, such as error handling routines. 4642 </p> 4643 <p> 4644 Usage example: 4645</p> 4646<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOINLINE</span> <span class="keyword">void</span> <span class="identifier">handle_error</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span> 4647<span class="special">{</span> 4648 <span class="comment">// ...</span> 4649<span class="special">}</span> 4650</pre> 4651<p> 4652 </p> 4653 </td> 4654</tr> 4655<tr> 4656<td> 4657 <p> 4658 <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code> 4659 </p> 4660 </td> 4661<td> 4662 <p> 4663 This macro can be used before the function declaration or definition 4664 to instruct the compiler that the function does not return normally 4665 (i.e. with a <code class="computeroutput"><span class="keyword">return</span></code> 4666 statement or by leaving the function scope, if the function return 4667 type is <code class="computeroutput"><span class="keyword">void</span></code>). The 4668 macro can be used to mark functions that always throw exceptions 4669 or terminate the application. Compilers that support this markup 4670 may use this information to specifically organize the code surrounding 4671 calls to this function and suppress warnings about missing <code class="computeroutput"><span class="keyword">return</span></code> statements in the functions 4672 enclosing such calls. 4673 </p> 4674 <p> 4675 Usage example: 4676</p> 4677<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NORETURN</span> <span class="keyword">void</span> <span class="identifier">on_error_occurred</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span> 4678<span class="special">{</span> 4679 <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="identifier">descr</span><span class="special">);</span> 4680<span class="special">}</span> 4681</pre> 4682<p> 4683 </p> 4684 <p> 4685 If the compiler does not support this markup, <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code> 4686 is defined empty and an additional macro <code class="computeroutput"><span class="identifier">BOOST_NO_NORETURN</span></code> 4687 is defined. 4688 </p> 4689 </td> 4690</tr> 4691<tr> 4692<td> 4693 <p> 4694 <code class="computeroutput"><span class="identifier">BOOST_LIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> 4695 </p> 4696 <p> 4697 <code class="computeroutput"><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> 4698 </p> 4699 </td> 4700<td> 4701 <p> 4702 These macros communicate to the compiler that the conditional expression 4703 <code class="computeroutput"><span class="identifier">X</span></code> is likely or 4704 unlikely to yield a positive result. The expression should result 4705 in a boolean value. The result of the macro is an integer or boolean 4706 value equivalent to the result of <code class="computeroutput"><span class="identifier">X</span></code>. 4707 </p> 4708 <p> 4709 The macros are intended to be used in branching statements. The 4710 additional hint they provide can be used by the compiler to arrange 4711 the compiled code of the branches more effectively. 4712 </p> 4713 <p> 4714 Usage example: 4715</p> 4716<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">ptr</span> <span class="special">==</span> <span class="identifier">NULL</span><span class="special">))</span> 4717 <span class="identifier">handle_error</span><span class="special">(</span><span class="string">"ptr is NULL"</span><span class="special">);</span> 4718</pre> 4719<p> 4720 </p> 4721 </td> 4722</tr> 4723<tr> 4724<td> 4725 <p> 4726 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_UNUSED</span></code> 4727 </p> 4728 </td> 4729<td> 4730 <p> 4731 Expands to <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">unused</span><span class="special">))</span></code> when this is available - can 4732 be used to disable compiler warnings relating to unused types or 4733 variables. 4734 </p> 4735 </td> 4736</tr> 4737<tr> 4738<td> 4739 <p> 4740 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NODISCARD</span></code> 4741 </p> 4742 </td> 4743<td> 4744 <p> 4745 Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">nodiscard</span><span class="special">]]</span></code> when this is available - can 4746 be used to create a warning when a type or variable is unused. 4747 </p> 4748 </td> 4749</tr> 4750<tr> 4751<td> 4752 <p> 4753 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS</span></code> 4754 </p> 4755 </td> 4756<td> 4757 <p> 4758 Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">no_unique_address</span><span class="special">]]</span></code> when this is available - can 4759 be used to indicate that a non-static data member need not have 4760 a unique address (for example empty classes). 4761 </p> 4762 </td> 4763</tr> 4764<tr> 4765<td> 4766 <p> 4767 <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>, 4768 <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code> 4769 </p> 4770 </td> 4771<td> 4772 <p> 4773 <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code> 4774 expands to a type attribute that can be used to mark types that 4775 may alias other types. Pointers or references to such marked types 4776 can be used to access objects of other types. If the compiler supports 4777 this feature <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code> 4778 is not defined. Otherwise <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code> 4779 expands to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code> 4780 is defined. 4781 </p> 4782 <p> 4783 Usage example: 4784</p> 4785<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_struct</span><span class="special">;</span> 4786<span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_uint</span><span class="special">;</span> 4787</pre> 4788<p> 4789 </p> 4790 </td> 4791</tr> 4792<tr> 4793<td> 4794 <p> 4795 <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code> 4796 </p> 4797 </td> 4798<td> 4799 <p> 4800 Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">pragma_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, 4801 this macro expands to the equivalent of <code class="computeroutput"><span class="preprocessor">#pragma</span> 4802 <span class="identifier">message</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>. 4803 <code class="computeroutput"><span class="identifier">M</span></code> must be a string 4804 literal. 4805 </p> 4806 <p> 4807 Example: <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="string">"This header 4808 is deprecated."</span><span class="special">)</span></code> 4809 </p> 4810 <p> 4811 The messages issued by <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code> 4812 can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_DISABLE_PRAGMA_MESSAGE</span></code>. 4813 </p> 4814 </td> 4815</tr> 4816<tr> 4817<td> 4818 <p> 4819 <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="identifier">A</span><span class="special">)</span></code> 4820 </p> 4821 </td> 4822<td> 4823 <p> 4824 Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">header_deprecated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, 4825 this macro issues the message "This header is deprecated. 4826 Use <code class="computeroutput"><span class="identifier">A</span></code> instead." 4827 via <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>. 4828 <code class="computeroutput"><span class="identifier">A</span></code> must be a string 4829 literal. 4830 </p> 4831 <p> 4832 Example: <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="string">"<boost/config/workaround.hpp>"</span><span class="special">)</span></code> 4833 </p> 4834 <p> 4835 The messages issued by <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span></code> 4836 can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_ALLOW_DEPRECATED_HEADERS</span></code>. 4837 </p> 4838 </td> 4839</tr> 4840</tbody> 4841</table></div> 4842</div> 4843<div class="section"> 4844<div class="titlepage"><div><div><h3 class="title"> 4845<a name="boost_config.boost_macro_reference.boost_informational_macros"></a><a name="config_info_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros" title="Boost Informational Macros">Boost 4846 Informational Macros</a> 4847</h3></div></div></div> 4848<p> 4849 The following macros describe boost features; these are, generally speaking 4850 the only boost macros that should be tested in user code. 4851 </p> 4852<div class="informaltable"><table class="table"> 4853<colgroup> 4854<col> 4855<col> 4856<col> 4857</colgroup> 4858<thead><tr> 4859<th> 4860 <p> 4861 Macro 4862 </p> 4863 </th> 4864<th> 4865 <p> 4866 Header 4867 </p> 4868 </th> 4869<th> 4870 <p> 4871 Description 4872 </p> 4873 </th> 4874</tr></thead> 4875<tbody> 4876<tr> 4877<td> 4878 <p> 4879 <code class="computeroutput"><span class="identifier">BOOST_VERSION</span></code> 4880 </p> 4881 </td> 4882<td> 4883 <p> 4884 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">version</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 4885 </p> 4886 </td> 4887<td> 4888 <p> 4889 Describes the boost version number in XYYYZZ format such that: 4890 <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span> 4891 <span class="special">%</span> <span class="number">100</span><span class="special">)</span></code> is the sub-minor version, <code class="computeroutput"><span class="special">((</span><span class="identifier">BOOST_VERSION</span> 4892 <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special">%</span> <span class="number">1000</span><span class="special">)</span></code> 4893 is the minor version, and <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span> <span class="special">/</span> 4894 <span class="number">100000</span><span class="special">)</span></code> 4895 is the major version. 4896 </p> 4897 </td> 4898</tr> 4899<tr> 4900<td> 4901 <p> 4902 <code class="computeroutput"><span class="identifier">BOOST_NO_INT64_T</span></code> 4903 </p> 4904 </td> 4905<td> 4906 <p> 4907 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 4908 </p> 4909 </td> 4910<td> 4911 <p> 4912 Defined if there are no 64-bit integral types: <code class="computeroutput"><span class="identifier">int64_t</span></code>, 4913 <code class="computeroutput"><span class="identifier">uint64_t</span></code> etc. 4914 </p> 4915 </td> 4916</tr> 4917<tr> 4918<td> 4919 <p> 4920 <code class="computeroutput"><span class="identifier">BOOST_NO_INTEGRAL_INT64_T</span></code> 4921 </p> 4922 </td> 4923<td> 4924 <p> 4925 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> 4926 </p> 4927 </td> 4928<td> 4929 <p> 4930 Defined if <code class="computeroutput"><span class="identifier">int64_t</span></code> 4931 as defined by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 4932 is not usable in integral constant expressions. 4933 </p> 4934 </td> 4935</tr> 4936<tr> 4937<td> 4938 <p> 4939 <code class="computeroutput"><span class="identifier">BOOST_MSVC</span></code> 4940 </p> 4941 </td> 4942<td> 4943 <p> 4944 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 4945 </p> 4946 </td> 4947<td> 4948 <p> 4949 Defined if the compiler is really Microsoft Visual C++, as opposed 4950 to one of the many other compilers that also define <code class="computeroutput"><span class="identifier">_MSC_VER</span></code>. Has the same value 4951 as _MSC_VER. 4952 </p> 4953 </td> 4954</tr> 4955<tr> 4956<td> 4957 <p> 4958 <code class="computeroutput"><span class="identifier">BOOST_MSVC_FULL_VER</span></code> 4959 </p> 4960 </td> 4961<td> 4962 <p> 4963 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 4964 </p> 4965 </td> 4966<td> 4967 <p> 4968 Defined to a normalised 9 digit version of _MSC_FULL_VER (which 4969 sometimes only has 8 digits), the macro has the form VVMMPPPPP 4970 where VV is the major version number, MM is the minor version number, 4971 and PPPPP is the compiler build number. 4972 </p> 4973 </td> 4974</tr> 4975<tr> 4976<td> 4977 <p> 4978 <code class="computeroutput"><span class="identifier">BOOST_GCC</span></code> 4979 </p> 4980 </td> 4981<td> 4982 <p> 4983 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 4984 </p> 4985 </td> 4986<td> 4987 <p> 4988 Defined if the compiler is really GCC, as opposed to one of the 4989 many other compilers that also define <code class="computeroutput"><span class="identifier">__GNUC__</span></code>. 4990 Has the value: <code class="computeroutput"><span class="identifier">__GNUC__</span> 4991 <span class="special">*</span> <span class="number">10000</span> 4992 <span class="special">+</span> <span class="identifier">__GNUC_MINOR__</span> 4993 <span class="special">*</span> <span class="number">100</span> 4994 <span class="special">+</span> <span class="identifier">__GNUC_PATCHLEVEL__</span></code>. 4995 </p> 4996 </td> 4997</tr> 4998<tr> 4999<td> 5000 <p> 5001 <code class="computeroutput"><span class="identifier">BOOST_INTEL</span></code> 5002 </p> 5003 </td> 5004<td> 5005 <p> 5006 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5007 </p> 5008 </td> 5009<td> 5010 <p> 5011 Defined if the compiler is an Intel compiler, takes the same value 5012 as the compiler version macro. 5013 </p> 5014 </td> 5015</tr> 5016<tr> 5017<td> 5018 <p> 5019 <code class="computeroutput"><span class="identifier">BOOST_CLANG</span></code> 5020 </p> 5021 </td> 5022<td> 5023 <p> 5024 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5025 </p> 5026 </td> 5027<td> 5028 <p> 5029 Defined to 1 if the compiler is the Clang compiler. 5030 </p> 5031 </td> 5032</tr> 5033<tr> 5034<td> 5035 <p> 5036 <code class="computeroutput"><span class="identifier">BOOST_BORLANDC</span></code> 5037 </p> 5038 </td> 5039<td> 5040 <p> 5041 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5042 </p> 5043 </td> 5044<td> 5045 <p> 5046 Defined to the value of __BORLANDC__ if the compiler is the Embarcadero 5047 non-clang based compiler. 5048 </p> 5049 </td> 5050</tr> 5051<tr> 5052<td> 5053 <p> 5054 <code class="computeroutput"><span class="identifier">BOOST_CODEGEARC</span></code> 5055 </p> 5056 </td> 5057<td> 5058 <p> 5059 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5060 </p> 5061 </td> 5062<td> 5063 <p> 5064 Defined to the value of __CODEGEARC__ if the compiler is the Embarcadero 5065 non-clang based compiler. 5066 </p> 5067 </td> 5068</tr> 5069<tr> 5070<td> 5071 <p> 5072 <code class="computeroutput"><span class="identifier">BOOST_EMBTC</span></code> 5073 </p> 5074 </td> 5075<td> 5076 <p> 5077 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5078 </p> 5079 </td> 5080<td> 5081 <p> 5082 Defined to the value of __CODEGEARC__ if the compiler is the Embarcadero 5083 clang based compiler. 5084 </p> 5085 </td> 5086</tr> 5087<tr> 5088<td> 5089 <p> 5090 <code class="computeroutput"><span class="identifier">BOOST_WINDOWS</span></code> 5091 </p> 5092 </td> 5093<td> 5094 <p> 5095 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5096 </p> 5097 </td> 5098<td> 5099 <p> 5100 Defined if the Windows platform API is available. 5101 </p> 5102 </td> 5103</tr> 5104<tr> 5105<td> 5106 <p> 5107 <code class="computeroutput"><span class="identifier">BOOST_DINKUMWARE_STDLIB</span></code> 5108 </p> 5109 </td> 5110<td> 5111 <p> 5112 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5113 </p> 5114 </td> 5115<td> 5116 <p> 5117 Defined if the dinkumware standard library is in use, takes the 5118 same value as the Dinkumware library version macro <code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code> if defined, otherwise 5119 1. 5120 </p> 5121 </td> 5122</tr> 5123<tr> 5124<td> 5125 <p> 5126 <code class="computeroutput"><span class="identifier">BOOST_NO_WREGEX</span></code> 5127 </p> 5128 </td> 5129<td> 5130 <p> 5131 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5132 </p> 5133 </td> 5134<td> 5135 <p> 5136 Defined if the regex library does not support wide character regular 5137 expressions. 5138 </p> 5139 </td> 5140</tr> 5141<tr> 5142<td> 5143 <p> 5144 <code class="computeroutput"><span class="identifier">BOOST_COMPILER</span></code> 5145 </p> 5146 </td> 5147<td> 5148 <p> 5149 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5150 </p> 5151 </td> 5152<td> 5153 <p> 5154 Defined as a string describing the name and version number of the 5155 compiler in use. Mainly for debugging the configuration. 5156 </p> 5157 </td> 5158</tr> 5159<tr> 5160<td> 5161 <p> 5162 <code class="computeroutput"><span class="identifier">BOOST_STDLIB</span></code> 5163 </p> 5164 </td> 5165<td> 5166 <p> 5167 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5168 </p> 5169 </td> 5170<td> 5171 <p> 5172 Defined as a string describing the name and version number of the 5173 standard library in use. Mainly for debugging the configuration. 5174 </p> 5175 </td> 5176</tr> 5177<tr> 5178<td> 5179 <p> 5180 <code class="computeroutput"><span class="identifier">BOOST_PLATFORM</span></code> 5181 </p> 5182 </td> 5183<td> 5184 <p> 5185 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5186 </p> 5187 </td> 5188<td> 5189 <p> 5190 Defined as a string describing the name of the platform. Mainly 5191 for debugging the configuration. 5192 </p> 5193 </td> 5194</tr> 5195<tr> 5196<td> 5197 <p> 5198 <code class="computeroutput"><span class="identifier">BOOST_LIBSTDCXX_VERSION</span></code> 5199 </p> 5200 </td> 5201<td> 5202 <p> 5203 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 5204 </p> 5205 </td> 5206<td> 5207 <p> 5208 Defined if the libstdc++ standard library is in use. Has the value 5209 of normalised 5 digit integer of the form VVMMM where VV is the 5210 major version number, MM is the minor version number. 5211 </p> 5212 </td> 5213</tr> 5214</tbody> 5215</table></div> 5216</div> 5217<div class="section"> 5218<div class="titlepage"><div><div><h3 class="title"> 5219<a name="boost_config.boost_macro_reference.boost_deprecated_macros"></a><a name="deprecated_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros" title="Boost Deprecated Macros">Boost 5220 Deprecated Macros</a> 5221</h3></div></div></div> 5222<p> 5223 The following have been deprecated; please use the replacements instead. 5224 They will be removed in a future version of boost. 5225 </p> 5226<div class="informaltable"><table class="table"> 5227<colgroup> 5228<col> 5229<col> 5230<col> 5231<col> 5232</colgroup> 5233<thead><tr> 5234<th> 5235 <p> 5236 Deprecated Macro 5237 </p> 5238 </th> 5239<th> 5240 <p> 5241 Replacement 5242 </p> 5243 </th> 5244<th> 5245 <p> 5246 When deprecated 5247 </p> 5248 </th> 5249<th> 5250 <p> 5251 When removed 5252 </p> 5253 </th> 5254</tr></thead> 5255<tbody> 5256<tr> 5257<td> 5258 <p> 5259 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code> 5260 </p> 5261 </td> 5262<td> 5263 <p> 5264 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code> 5265 </p> 5266 </td> 5267<td> 5268 <p> 5269 Boost 1.50 5270 </p> 5271 </td> 5272<td> 5273 </td> 5274</tr> 5275<tr> 5276<td> 5277 <p> 5278 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code> 5279 </p> 5280 </td> 5281<td> 5282 <p> 5283 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code> 5284 </p> 5285 </td> 5286<td> 5287 <p> 5288 Boost 1.50 5289 </p> 5290 </td> 5291<td> 5292 </td> 5293</tr> 5294<tr> 5295<td> 5296 <p> 5297 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code> 5298 </p> 5299 </td> 5300<td> 5301 <p> 5302 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code> 5303 </p> 5304 </td> 5305<td> 5306 <p> 5307 Boost 1.50 5308 </p> 5309 </td> 5310<td> 5311 </td> 5312</tr> 5313<tr> 5314<td> 5315 <p> 5316 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code> 5317 </p> 5318 </td> 5319<td> 5320 <p> 5321 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code> 5322 </p> 5323 </td> 5324<td> 5325 <p> 5326 Boost 1.50 5327 </p> 5328 </td> 5329<td> 5330 </td> 5331</tr> 5332<tr> 5333<td> 5334 <p> 5335 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code> 5336 </p> 5337 </td> 5338<td> 5339 <p> 5340 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code> 5341 </p> 5342 </td> 5343<td> 5344 <p> 5345 Boost 1.50 5346 </p> 5347 </td> 5348<td> 5349 </td> 5350</tr> 5351<tr> 5352<td> 5353 <p> 5354 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code> 5355 </p> 5356 </td> 5357<td> 5358 <p> 5359 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code> 5360 </p> 5361 </td> 5362<td> 5363 <p> 5364 Boost 1.50 5365 </p> 5366 </td> 5367<td> 5368 </td> 5369</tr> 5370<tr> 5371<td> 5372 <p> 5373 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code> 5374 </p> 5375 </td> 5376<td> 5377 <p> 5378 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code> 5379 </p> 5380 </td> 5381<td> 5382 <p> 5383 Boost 1.50 5384 </p> 5385 </td> 5386<td> 5387 </td> 5388</tr> 5389<tr> 5390<td> 5391 <p> 5392 <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code> 5393 </p> 5394 </td> 5395<td> 5396 <p> 5397 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code> 5398 </p> 5399 </td> 5400<td> 5401 <p> 5402 Boost 1.50 5403 </p> 5404 </td> 5405<td> 5406 </td> 5407</tr> 5408<tr> 5409<td> 5410 <p> 5411 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code> 5412 </p> 5413 </td> 5414<td> 5415 <p> 5416 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code> 5417 </p> 5418 </td> 5419<td> 5420 <p> 5421 Boost 1.50 5422 </p> 5423 </td> 5424<td> 5425 </td> 5426</tr> 5427<tr> 5428<td> 5429 <p> 5430 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code> 5431 </p> 5432 </td> 5433<td> 5434 <p> 5435 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code> 5436 </p> 5437 </td> 5438<td> 5439 <p> 5440 Boost 1.50 5441 </p> 5442 </td> 5443<td> 5444 </td> 5445</tr> 5446<tr> 5447<td> 5448 <p> 5449 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code> 5450 </p> 5451 </td> 5452<td> 5453 <p> 5454 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code> 5455 </p> 5456 </td> 5457<td> 5458 <p> 5459 Boost 1.50 5460 </p> 5461 </td> 5462<td> 5463 </td> 5464</tr> 5465<tr> 5466<td> 5467 <p> 5468 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code> 5469 </p> 5470 </td> 5471<td> 5472 <p> 5473 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code> 5474 </p> 5475 </td> 5476<td> 5477 <p> 5478 Boost 1.50 5479 </p> 5480 </td> 5481<td> 5482 </td> 5483</tr> 5484<tr> 5485<td> 5486 <p> 5487 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code> 5488 </p> 5489 </td> 5490<td> 5491 <p> 5492 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code> 5493 </p> 5494 </td> 5495<td> 5496 <p> 5497 Boost 1.50 5498 </p> 5499 </td> 5500<td> 5501 </td> 5502</tr> 5503<tr> 5504<td> 5505 <p> 5506 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code> 5507 </p> 5508 </td> 5509<td> 5510 <p> 5511 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code> 5512 </p> 5513 </td> 5514<td> 5515 <p> 5516 Boost 1.50 5517 </p> 5518 </td> 5519<td> 5520 </td> 5521</tr> 5522<tr> 5523<td> 5524 <p> 5525 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code> 5526 </p> 5527 </td> 5528<td> 5529 <p> 5530 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code> 5531 </p> 5532 </td> 5533<td> 5534 <p> 5535 Boost 1.50 5536 </p> 5537 </td> 5538<td> 5539 </td> 5540</tr> 5541<tr> 5542<td> 5543 <p> 5544 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code> 5545 </p> 5546 </td> 5547<td> 5548 <p> 5549 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code> 5550 </p> 5551 </td> 5552<td> 5553 <p> 5554 Boost 1.50 5555 </p> 5556 </td> 5557<td> 5558 </td> 5559</tr> 5560<tr> 5561<td> 5562 <p> 5563 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code> 5564 </p> 5565 </td> 5566<td> 5567 <p> 5568 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code> 5569 </p> 5570 </td> 5571<td> 5572 <p> 5573 Boost 1.50 5574 </p> 5575 </td> 5576<td> 5577 </td> 5578</tr> 5579<tr> 5580<td> 5581 <p> 5582 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code> 5583 </p> 5584 </td> 5585<td> 5586 <p> 5587 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code> 5588 </p> 5589 </td> 5590<td> 5591 <p> 5592 Boost 1.50 5593 </p> 5594 </td> 5595<td> 5596 </td> 5597</tr> 5598<tr> 5599<td> 5600 <p> 5601 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code> 5602 </p> 5603 </td> 5604<td> 5605 <p> 5606 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code> 5607 </p> 5608 </td> 5609<td> 5610 <p> 5611 Boost 1.50 5612 </p> 5613 </td> 5614<td> 5615 </td> 5616</tr> 5617<tr> 5618<td> 5619 <p> 5620 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code> 5621 </p> 5622 </td> 5623<td> 5624 <p> 5625 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code> 5626 </p> 5627 </td> 5628<td> 5629 <p> 5630 Boost 1.50 5631 </p> 5632 </td> 5633<td> 5634 </td> 5635</tr> 5636<tr> 5637<td> 5638 </td> 5639<td> 5640 </td> 5641<td> 5642 </td> 5643<td> 5644 </td> 5645</tr> 5646<tr> 5647<td> 5648 <p> 5649 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_DECLARATIONS</span></code> 5650 </p> 5651 </td> 5652<td> 5653 <p> 5654 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code> 5655 </p> 5656 </td> 5657<td> 5658 <p> 5659 Boost 1.51 5660 </p> 5661 </td> 5662<td> 5663 </td> 5664</tr> 5665<tr> 5666<td> 5667 <p> 5668 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_MULTIDECLARATIONS</span></code> 5669 </p> 5670 </td> 5671<td> 5672 <p> 5673 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code> 5674 </p> 5675 </td> 5676<td> 5677 <p> 5678 Boost 1.51 5679 </p> 5680 </td> 5681<td> 5682 </td> 5683</tr> 5684<tr> 5685<td> 5686 <p> 5687 <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR16_T</span></code> 5688 </p> 5689 </td> 5690<td> 5691 <p> 5692 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code> 5693 </p> 5694 </td> 5695<td> 5696 <p> 5697 Boost 1.51 5698 </p> 5699 </td> 5700<td> 5701 </td> 5702</tr> 5703<tr> 5704<td> 5705 <p> 5706 <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR32_T</span></code> 5707 </p> 5708 </td> 5709<td> 5710 <p> 5711 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code> 5712 </p> 5713 </td> 5714<td> 5715 <p> 5716 Boost 1.51 5717 </p> 5718 </td> 5719<td> 5720 </td> 5721</tr> 5722<tr> 5723<td> 5724 <p> 5725 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_ALIASES</span></code> 5726 </p> 5727 </td> 5728<td> 5729 <p> 5730 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code> 5731 </p> 5732 </td> 5733<td> 5734 <p> 5735 Boost 1.51 5736 </p> 5737 </td> 5738<td> 5739 </td> 5740</tr> 5741<tr> 5742<td> 5743 <p> 5744 <code class="computeroutput"><span class="identifier">BOOST_NO_CONSTEXPR</span></code> 5745 </p> 5746 </td> 5747<td> 5748 <p> 5749 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code> 5750 </p> 5751 </td> 5752<td> 5753 <p> 5754 Boost 1.51 5755 </p> 5756 </td> 5757<td> 5758 </td> 5759</tr> 5760<tr> 5761<td> 5762 <p> 5763 <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE</span></code> 5764 </p> 5765 </td> 5766<td> 5767 <p> 5768 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code> 5769 </p> 5770 </td> 5771<td> 5772 <p> 5773 Boost 1.51 5774 </p> 5775 </td> 5776<td> 5777 </td> 5778</tr> 5779<tr> 5780<td> 5781 <p> 5782 <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE_N3276</span></code> 5783 </p> 5784 </td> 5785<td> 5786 <p> 5787 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code> 5788 </p> 5789 </td> 5790<td> 5791 <p> 5792 Boost 1.51 5793 </p> 5794 </td> 5795<td> 5796 </td> 5797</tr> 5798<tr> 5799<td> 5800 <p> 5801 <code class="computeroutput"><span class="identifier">BOOST_NO_DEFAULTED_FUNCTIONS</span></code> 5802 </p> 5803 </td> 5804<td> 5805 <p> 5806 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code> 5807 </p> 5808 </td> 5809<td> 5810 <p> 5811 Boost 1.51 5812 </p> 5813 </td> 5814<td> 5815 </td> 5816</tr> 5817<tr> 5818<td> 5819 <p> 5820 <code class="computeroutput"><span class="identifier">BOOST_NO_DELETED_FUNCTIONS</span></code> 5821 </p> 5822 </td> 5823<td> 5824 <p> 5825 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code> 5826 </p> 5827 </td> 5828<td> 5829 <p> 5830 Boost 1.51 5831 </p> 5832 </td> 5833<td> 5834 </td> 5835</tr> 5836<tr> 5837<td> 5838 <p> 5839 <code class="computeroutput"><span class="identifier">BOOST_NO_EXPLICIT_CONVERSION_OPERATORS</span></code> 5840 </p> 5841 </td> 5842<td> 5843 <p> 5844 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code> 5845 </p> 5846 </td> 5847<td> 5848 <p> 5849 Boost 1.51 5850 </p> 5851 </td> 5852<td> 5853 </td> 5854</tr> 5855<tr> 5856<td> 5857 <p> 5858 <code class="computeroutput"><span class="identifier">BOOST_NO_EXTERN_TEMPLATE</span></code> 5859 </p> 5860 </td> 5861<td> 5862 <p> 5863 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code> 5864 </p> 5865 </td> 5866<td> 5867 <p> 5868 Boost 1.51 5869 </p> 5870 </td> 5871<td> 5872 </td> 5873</tr> 5874<tr> 5875<td> 5876 <p> 5877 <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code> 5878 </p> 5879 </td> 5880<td> 5881 <p> 5882 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code> 5883 </p> 5884 </td> 5885<td> 5886 <p> 5887 Boost 1.51 5888 </p> 5889 </td> 5890<td> 5891 </td> 5892</tr> 5893<tr> 5894<td> 5895 <p> 5896 <code class="computeroutput"><span class="identifier">BOOST_NO_LAMBDAS</span></code> 5897 </p> 5898 </td> 5899<td> 5900 <p> 5901 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code> 5902 </p> 5903 </td> 5904<td> 5905 <p> 5906 Boost 1.51 5907 </p> 5908 </td> 5909<td> 5910 </td> 5911</tr> 5912<tr> 5913<td> 5914 <p> 5915 <code class="computeroutput"><span class="identifier">BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code> 5916 </p> 5917 </td> 5918<td> 5919 <p> 5920 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code> 5921 </p> 5922 </td> 5923<td> 5924 <p> 5925 Boost 1.51 5926 </p> 5927 </td> 5928<td> 5929 </td> 5930</tr> 5931<tr> 5932<td> 5933 <p> 5934 <code class="computeroutput"><span class="identifier">BOOST_NO_NOEXCEPT</span></code> 5935 </p> 5936 </td> 5937<td> 5938 <p> 5939 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code> 5940 </p> 5941 </td> 5942<td> 5943 <p> 5944 Boost 1.51 5945 </p> 5946 </td> 5947<td> 5948 </td> 5949</tr> 5950<tr> 5951<td> 5952 <p> 5953 <code class="computeroutput"><span class="identifier">BOOST_NO_NULLPTR</span></code> 5954 </p> 5955 </td> 5956<td> 5957 <p> 5958 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code> 5959 </p> 5960 </td> 5961<td> 5962 <p> 5963 Boost 1.51 5964 </p> 5965 </td> 5966<td> 5967 </td> 5968</tr> 5969<tr> 5970<td> 5971 <p> 5972 <code class="computeroutput"><span class="identifier">BOOST_NO_RAW_LITERALS</span></code> 5973 </p> 5974 </td> 5975<td> 5976 <p> 5977 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code> 5978 </p> 5979 </td> 5980<td> 5981 <p> 5982 Boost 1.51 5983 </p> 5984 </td> 5985<td> 5986 </td> 5987</tr> 5988<tr> 5989<td> 5990 <p> 5991 <code class="computeroutput"><span class="identifier">BOOST_NO_RVALUE_REFERENCES</span></code> 5992 </p> 5993 </td> 5994<td> 5995 <p> 5996 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code> 5997 </p> 5998 </td> 5999<td> 6000 <p> 6001 Boost 1.51 6002 </p> 6003 </td> 6004<td> 6005 </td> 6006</tr> 6007<tr> 6008<td> 6009 <p> 6010 <code class="computeroutput"><span class="identifier">BOOST_NO_SCOPED_ENUMS</span></code> 6011 </p> 6012 </td> 6013<td> 6014 <p> 6015 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code> 6016 </p> 6017 </td> 6018<td> 6019 <p> 6020 Boost 1.51 6021 </p> 6022 </td> 6023<td> 6024 </td> 6025</tr> 6026<tr> 6027<td> 6028 <p> 6029 <code class="computeroutput"><span class="identifier">BOOST_NO_STATIC_ASSERT</span></code> 6030 </p> 6031 </td> 6032<td> 6033 <p> 6034 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code> 6035 </p> 6036 </td> 6037<td> 6038 <p> 6039 Boost 1.51 6040 </p> 6041 </td> 6042<td> 6043 </td> 6044</tr> 6045<tr> 6046<td> 6047 <p> 6048 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code> 6049 </p> 6050 </td> 6051<td> 6052 <p> 6053 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code> 6054 </p> 6055 </td> 6056<td> 6057 <p> 6058 Boost 1.51 6059 </p> 6060 </td> 6061<td> 6062 </td> 6063</tr> 6064<tr> 6065<td> 6066 <p> 6067 <code class="computeroutput"><span class="identifier">BOOST_NO_UNICODE_LITERALS</span></code> 6068 </p> 6069 </td> 6070<td> 6071 <p> 6072 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code> 6073 </p> 6074 </td> 6075<td> 6076 <p> 6077 Boost 1.51 6078 </p> 6079 </td> 6080<td> 6081 </td> 6082</tr> 6083<tr> 6084<td> 6085 <p> 6086 <code class="computeroutput"><span class="identifier">BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX</span></code> 6087 </p> 6088 </td> 6089<td> 6090 <p> 6091 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code> 6092 </p> 6093 </td> 6094<td> 6095 <p> 6096 Boost 1.51 6097 </p> 6098 </td> 6099<td> 6100 </td> 6101</tr> 6102<tr> 6103<td> 6104 <p> 6105 <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_TEMPLATES</span></code> 6106 </p> 6107 </td> 6108<td> 6109 <p> 6110 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code> 6111 </p> 6112 </td> 6113<td> 6114 <p> 6115 Boost 1.51 6116 </p> 6117 </td> 6118<td> 6119 </td> 6120</tr> 6121<tr> 6122<td> 6123 <p> 6124 <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_MACROS</span></code> 6125 </p> 6126 </td> 6127<td> 6128 <p> 6129 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code> 6130 </p> 6131 </td> 6132<td> 6133 <p> 6134 Boost 1.51 6135 </p> 6136 </td> 6137<td> 6138 </td> 6139</tr> 6140<tr> 6141<td> 6142 <p> 6143 <code class="computeroutput"><span class="identifier">BOOST_NO_NUMERIC_LIMITS_LOWEST</span></code> 6144 </p> 6145 </td> 6146<td> 6147 <p> 6148 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code> 6149 </p> 6150 </td> 6151<td> 6152 <p> 6153 Boost 1.51 6154 </p> 6155 </td> 6156<td> 6157 </td> 6158</tr> 6159<tr> 6160<td> 6161 </td> 6162<td> 6163 </td> 6164<td> 6165 </td> 6166<td> 6167 </td> 6168</tr> 6169<tr> 6170<td> 6171 <p> 6172 <code class="computeroutput"><span class="identifier">BOOST_HAS_STATIC_ASSERT</span></code> 6173 </p> 6174 </td> 6175<td> 6176 <p> 6177 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code> 6178 (negated) 6179 </p> 6180 </td> 6181<td> 6182 <p> 6183 Boost 1.53 6184 </p> 6185 </td> 6186<td> 6187 </td> 6188</tr> 6189<tr> 6190<td> 6191 <p> 6192 <code class="computeroutput"><span class="identifier">BOOST_HAS_VARIADIC_TMPL</span></code> 6193 </p> 6194 </td> 6195<td> 6196 <p> 6197 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code> 6198 (negated) 6199 </p> 6200 </td> 6201<td> 6202 <p> 6203 Boost 1.53 6204 </p> 6205 </td> 6206<td> 6207 </td> 6208</tr> 6209<tr> 6210<td> 6211 <p> 6212 <code class="computeroutput"><span class="identifier">BOOST_HAS_RVALUE_REFS</span></code> 6213 </p> 6214 </td> 6215<td> 6216 <p> 6217 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code> 6218 (negated) 6219 </p> 6220 </td> 6221<td> 6222 <p> 6223 Boost 1.53 6224 </p> 6225 </td> 6226<td> 6227 </td> 6228</tr> 6229<tr> 6230<td> 6231 <p> 6232 <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR16_T</span></code> 6233 </p> 6234 </td> 6235<td> 6236 <p> 6237 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code> 6238 (negated) 6239 </p> 6240 </td> 6241<td> 6242 <p> 6243 Boost 1.53 6244 </p> 6245 </td> 6246<td> 6247 </td> 6248</tr> 6249<tr> 6250<td> 6251 <p> 6252 <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR32_T</span></code> 6253 </p> 6254 </td> 6255<td> 6256 <p> 6257 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code> 6258 (negated) 6259 </p> 6260 </td> 6261<td> 6262 <p> 6263 Boost 1.53 6264 </p> 6265 </td> 6266<td> 6267 </td> 6268</tr> 6269</tbody> 6270</table></div> 6271</div> 6272<div class="section"> 6273<div class="titlepage"><div><div><h3 class="title"> 6274<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" title="Macros for libraries with separate source code">Macros 6275 for libraries with separate source code</a> 6276</h3></div></div></div> 6277<div class="toc"><dl class="toc"> 6278<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility">Macros 6279 controlling shared library symbol visibility</a></span></dt> 6280<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing">ABI 6281 Fixing</a></span></dt> 6282<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection">Automatic 6283 library selection</a></span></dt> 6284</dl></div> 6285<p> 6286 The following macros and helper headers are of use to authors whose libraries 6287 include separate source code, and are intended to address several issues: 6288 </p> 6289<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "> 6290<li class="listitem"> 6291 Controlling shared library symbol visibility 6292 </li> 6293<li class="listitem"> 6294 Fixing the ABI of the compiled library 6295 </li> 6296<li class="listitem"> 6297 Selecting which compiled library to link against based upon the compilers 6298 settings 6299 </li> 6300</ul></div> 6301<p> 6302 See <a href="http://www.boost.org/development/separate_compilation.html" target="_top">Guidelines 6303 for Authors of Boost Libraries Containing Separate Source</a> 6304 </p> 6305<div class="section"> 6306<div class="titlepage"><div><div><h4 class="title"> 6307<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility" title="Macros controlling shared library symbol visibility">Macros 6308 controlling shared library symbol visibility</a> 6309</h4></div></div></div> 6310<p> 6311 Some compilers support C++ extensions that control which symbols will be 6312 exported from shared libraries such as dynamic shared objects (DSO's) on 6313 Unix-like systems or dynamic-link libraries (DLL's) on Windows. 6314 </p> 6315<p> 6316 The Microsoft VC++ compiler has long supplied <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> extensions for this purpose, as do virtually 6317 all other compilers targeting the Windows platform. 6318 </p> 6319<p> 6320 Modern versions of the GNU GCC compiler provide the <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">visibility</span><span class="special">(</span><span class="string">"default"</span><span class="special">)))</span></code> extension to indicate that a symbol 6321 should be exported. All other symbols may be hidden by using the <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">hidden</span></code> 6322 or <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">ms</span><span class="special">-</span><span class="identifier">compat</span></code> compiler switches. 6323 </p> 6324<p> 6325 Boost supplies several macros to make it easier to manage symbol visibility 6326 in a way that is portable between compilers and operating systems. 6327 </p> 6328<div class="informaltable"><table class="table"> 6329<colgroup> 6330<col> 6331<col> 6332</colgroup> 6333<thead><tr> 6334<th> 6335 <p> 6336 Macro 6337 </p> 6338 </th> 6339<th> 6340 <p> 6341 Description 6342 </p> 6343 </th> 6344</tr></thead> 6345<tbody> 6346<tr> 6347<td> 6348 <p> 6349 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_EXPORT</span></code> 6350 </p> 6351 </td> 6352<td> 6353 <p> 6354 Defines the syntax of a C++ language extension that indicates 6355 a symbol is to be exported from a shared library. If the compiler 6356 has no such extension, the macro is defined with no replacement 6357 text. 6358 </p> 6359 </td> 6360</tr> 6361<tr> 6362<td> 6363 <p> 6364 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_IMPORT</span></code> 6365 </p> 6366 </td> 6367<td> 6368 <p> 6369 Defines the syntax of a C++ language extension that indicates 6370 a symbol is to be imported from a shared library. If the compiler 6371 has no such extension, the macro is defined with no replacement 6372 text. 6373 </p> 6374 </td> 6375</tr> 6376<tr> 6377<td> 6378 <p> 6379 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_VISIBLE</span></code> 6380 </p> 6381 </td> 6382<td> 6383 <p> 6384 Defines the syntax of a C++ language extension that indicates 6385 a symbol is to be globally visible. If the compiler has no such 6386 extension, the macro is defined with no replacement text. Needed 6387 for classes that are not otherwise exported, but are used by 6388 RTTI. Examples include class for objects that will be thrown 6389 as exceptions or used in dynamic_casts, across shared library 6390 boundaries. For example, a header-only exception class might 6391 look like this: 6392</p> 6393<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">class</span> <span class="identifier">BOOST_SYMBOL_VISIBLE</span> <span class="identifier">my_exception</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span> 6394</pre> 6395<p> 6396 Without BOOST_SYMBOL_VISIBLE, it would be impossible to catch 6397 my_exception thrown from a shared library compiled by GCC with 6398 the -fvisibility=hidden option. 6399 </p> 6400 </td> 6401</tr> 6402<tr> 6403<td> 6404 <p> 6405 <code class="computeroutput"><span class="identifier">BOOST_HAS_DECLSPEC</span></code> 6406 </p> 6407 </td> 6408<td> 6409 <p> 6410 The compiler has C++ extensions <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> to control export/import of 6411 symbols from shared libraries. <span class="emphasis"><em>Deprecated. This macro 6412 is no longer necessary since BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT 6413 are now supplied. It is provided to support legacy code.</em></span> 6414 </p> 6415 </td> 6416</tr> 6417</tbody> 6418</table></div> 6419<p> 6420 Typical usage: 6421 </p> 6422<p> 6423 <span class="bold"><strong>boost/foo/config.hpp</strong></span> 6424 </p> 6425<pre class="programlisting"><span class="special">...</span> 6426<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_DYN_LINK</span><span class="special">)</span> <span class="special">||</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_DYN_LINK</span><span class="special">)</span> 6427<span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_SOURCE</span><span class="special">)</span> 6428<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span> 6429<span class="preprocessor"># else</span> 6430<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_IMPORT</span> 6431<span class="preprocessor"># endif</span> 6432<span class="preprocessor">#else</span> 6433<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> 6434<span class="preprocessor">#endif</span> 6435<span class="special">...</span> 6436</pre> 6437<p> 6438 <span class="bold"><strong>boost/foo/foo.hpp</strong></span> 6439 </p> 6440<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6441<span class="special">...</span> 6442<span class="keyword">class</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">bar</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span> 6443<span class="special">...</span> 6444<span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">();</span> 6445<span class="special">...</span> 6446</pre> 6447<p> 6448 <span class="bold"><strong>boost/libs/foo/src/foo.cpp</strong></span> 6449 </p> 6450<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_FOO_SOURCE</span> 6451<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">foo</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6452<span class="special">...</span> 6453<span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">()</span> 6454<span class="special">{</span> 6455 <span class="special">...</span> 6456<span class="special">}</span> 6457<span class="special">...</span> 6458</pre> 6459</div> 6460<div class="section"> 6461<div class="titlepage"><div><div><h4 class="title"> 6462<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing" title="ABI Fixing">ABI 6463 Fixing</a> 6464</h4></div></div></div> 6465<p> 6466 When linking against a pre-compiled library it vital that the ABI used 6467 by the compiler when building the library <span class="emphasis"><em>matches exactly</em></span> 6468 the ABI used by the code using the library. In this case ABI means things 6469 like the struct packing arrangement used, the name mangling scheme used, 6470 or the size of some types (enum types for example). This is separate from 6471 things like threading support, or runtime library variations, which have 6472 to be dealt with by build variants. To put this in perspective there is 6473 one compiler (Borland's) that has so many compiler options that make subtle 6474 changes to the ABI, that at least in theory there 3200 combinations, and 6475 that's without considering runtime library variations. Fortunately these 6476 variations can be managed by <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s 6477 that tell the compiler what ABI to use for the types declared in your library. 6478 In order to avoid sprinkling <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s 6479 all over the boost headers, there are some prefix and suffix headers that 6480 do the job. Typical usage is: 6481 </p> 6482<p> 6483 <span class="bold"><strong>my_library.hpp</strong></span> 6484 </p> 6485<pre class="programlisting"><span class="preprocessor">#ifndef</span> <span class="identifier">MY_INCLUDE_GUARD</span> 6486<span class="preprocessor">#define</span> <span class="identifier">MY_INCLUDE_GUARD</span> 6487 6488<span class="comment">// all includes go here:</span> 6489<code class="literal"><span class="bold"><strong>#include <boost/config.hpp></strong></span></code> 6490<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">whatever</span><span class="special">></span> 6491 6492<code class="literal"><span class="bold"><strong>#include <boost/config/abi_prefix.hpp></strong></span></code> <span class="comment">// must be the last #include</span> 6493 6494<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> 6495 6496<span class="comment">// your code goes here</span> 6497 6498<span class="special">}</span> 6499 6500<code class="literal"><span class="bold"><strong>#include <boost/config/abi_suffix.hpp></strong></span></code> <span class="comment">// pops abi_prefix.hpp pragmas</span> 6501 6502<span class="preprocessor">#endif</span> <span class="comment">// include guard</span> 6503</pre> 6504<p> 6505 <span class="bold"><strong>my_library.cpp</strong></span> 6506 </p> 6507<pre class="programlisting"><span class="special">...</span> 6508<span class="comment">// nothing special need be done in the implementation file</span> 6509<span class="special">...</span> 6510</pre> 6511<p> 6512 The user can disable this mechanism by defining <code class="computeroutput"><span class="identifier">BOOST_DISABLE_ABI_HEADERS</span></code>, 6513 or they can define <code class="computeroutput"><span class="identifier">BOOST_ABI_PREFIX</span></code> 6514 and/or <code class="computeroutput"><span class="identifier">BOOST_ABI_SUFFIX</span></code> 6515 to point to their own prefix/suffix headers if they so wish. 6516 </p> 6517</div> 6518<div class="section"> 6519<div class="titlepage"><div><div><h4 class="title"> 6520<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection" title="Automatic library selection">Automatic 6521 library selection</a> 6522</h4></div></div></div> 6523<p> 6524 It is essential that users link to a build of a library which was built 6525 against the same runtime library that their application will be built against 6526 -if this does not happen then the library will not be binary compatible 6527 with their own code- and there is a high likelihood that their application 6528 will experience runtime crashes. These kinds of problems can be extremely 6529 time consuming and difficult to debug, and often lead to frustrated users 6530 and authors alike (simply selecting the right library to link against is 6531 not as easy as it seems when their are 6-8 of them to chose from, and some 6532 users seem to be blissfully unaware that there even are different runtimes 6533 available to them). 6534 </p> 6535<p> 6536 To solve this issue, some compilers allow source code to contain <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s that instruct the linker 6537 which library to link against, all the user need do is include the headers 6538 they need, place the compiled libraries in their library search path, and 6539 the compiler and linker do the rest. Boost.config supports this via the 6540 header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, before including this header one or 6541 more of the following macros need to be defined: 6542 </p> 6543<div class="variablelist"> 6544<p class="title"><b></b></p> 6545<dl class="variablelist"> 6546<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_NAME</span></code></span></dt> 6547<dd><p> 6548 Required: An identifier containing the basename of the library, for 6549 example 'boost_regex'. 6550 </p></dd> 6551<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_DYN_LINK</span></code></span></dt> 6552<dd><p> 6553 Optional: when set link to dll rather than static library. 6554 </p></dd> 6555<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_DIAGNOSTIC</span></code></span></dt> 6556<dd><p> 6557 Optional: when set the header will print out the name of the library 6558 selected (useful for debugging). 6559 </p></dd> 6560<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_NOMANGLE</span></code></span></dt> 6561<dd><p> 6562 Optional: whan set specifies that we should link to BOOST_LIB_NAME.lib, 6563 rather than a mangled-name version. 6564 </p></dd> 6565<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_TAGGED</span></code></span></dt> 6566<dd><p> 6567 Optional: Specifies that we link to libraries built with the --layout=tagged 6568 option. This is essentially the same as the default name-mangled 6569 version, but without the compiler name and version, or the Boost 6570 version. Just the build options. 6571 </p></dd> 6572<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_SYSTEM</span></code></span></dt> 6573<dd><p> 6574 Optional: Specifies that we link to libraries built with the --layout=system 6575 option. This is essentially the same as the non-name-mangled version, 6576 but with the prefix to differentiate static and dll builds 6577 </p></dd> 6578</dl> 6579</div> 6580<p> 6581 If the compiler supports this mechanism, then it will be told to link against 6582 the appropriately named library, the actual algorithm used to mangle the 6583 name of the library is documented inside <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> 6584 and has to match that used to create the libraries via bjam 's install 6585 rules. 6586 </p> 6587<p> 6588 <span class="bold"><strong>my_library.hpp</strong></span> 6589 </p> 6590<pre class="programlisting"><span class="special">...</span> 6591<span class="comment">//</span> 6592<span class="comment">// Don't include auto-linking code if the user has disabled it by</span> 6593<span class="comment">// defining BOOST_ALL_NO_LIB, or BOOST_MY_LIBRARY_NO_LIB, or if this </span> 6594<span class="comment">// is one of our own source files (signified by BOOST_MY_LIBRARY_SOURCE):</span> 6595<span class="comment">//</span> 6596<span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_SOURCE</span><span class="special">)</span> 6597<span class="preprocessor"># define</span> <span class="identifier">BOOST_LIB_NAME</span> <span class="identifier">boost_my_library</span> 6598<span class="preprocessor"># ifdef</span> <span class="identifier">BOOST_MY_LIBRARY_DYN_LINK</span> 6599<span class="preprocessor"># define</span> <span class="identifier">BOOST_DYN_LINK</span> 6600<span class="preprocessor"># endif</span> 6601<span class="preprocessor"># include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6602<span class="preprocessor">#endif</span> 6603<span class="special">...</span> 6604</pre> 6605<p> 6606 <span class="bold"><strong>my_library.cpp</strong></span> 6607 </p> 6608<pre class="programlisting"><span class="comment">// define BOOST_MY_LIBRARY_SOURCE so that the header knows that the</span> 6609<span class="comment">// library is being built (possibly exporting rather than importing code)</span> 6610<span class="comment">//</span> 6611<span class="preprocessor">#define</span> <span class="identifier">BOOST_MY_LIBRARY_SOURCE</span> 6612 6613<span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 6614<span class="special">...</span> 6615</pre> 6616</div> 6617</div> 6618</div> 6619<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr> 6620<td align="left"></td> 6621<td align="right"><div class="copyright-footer">Copyright © 2001-2007 Beman Dawes, Vesa Karvonen, John 6622 Maddock<p> 6623 Distributed under the Boost Software License, Version 1.0. (See accompanying 6624 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>) 6625 </p> 6626</div></td> 6627</tr></table> 6628<hr> 6629<div class="spirit-nav"> 6630<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.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="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a> 6631</div> 6632</body> 6633</html> 6634