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