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