• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Boost Macro Reference</title>
5<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../index.html" title="Boost.Config">
8<link rel="up" href="../index.html" title="Boost.Config">
9<link rel="prev" href="../index.html" title="Boost.Config">
10<link rel="next" href="build_config.html" title="Build Time Configuration">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h2 class="title" style="clear: both">
27<a name="boost_config.boost_macro_reference"></a><a class="link" href="boost_macro_reference.html" title="Boost Macro Reference">Boost Macro Reference</a>
28</h2></div></div></div>
29<div class="toc"><dl class="toc">
30<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects">Macros
31      that describe C++03 defects</a></span></dt>
32<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features">Macros
33      that describe optional features</a></span></dt>
34<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features">Macros
35      that describe possible C++ future features</a></span></dt>
36<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported">Macros
37      that describe C++11 features not supported</a></span></dt>
38<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers">Macros
39      that allow use of C++11 features with C++03 compilers</a></span></dt>
40<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported">Macros
41      that describe C++14 features not supported</a></span></dt>
42<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers">Macros
43      that allow use of C++14 features with C++11 or earlier compilers</a></span></dt>
44<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported">Macros
45      that describe C++17 features not supported</a></span></dt>
46<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers">Macros
47      that allow use of C++17 features with C++14 or earlier compilers</a></span></dt>
48<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_">Macros
49      that describe features that have been removed from the standard.</a></span></dt>
50<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros">Boost
51      Helper Macros</a></span></dt>
52<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost
53      Informational Macros</a></span></dt>
54<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost
55      Deprecated Macros</a></span></dt>
56<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
57      for libraries with separate source code</a></span></dt>
58</dl></div>
59<div class="section">
60<div class="titlepage"><div><div><h3 class="title">
61<a name="boost_config.boost_macro_reference.macros_that_describe_c__03_defects"></a><a name="config_defects"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects" title="Macros that describe C++03 defects">Macros
62      that describe C++03 defects</a>
63</h3></div></div></div>
64<p>
65        The following macros all describe features that are required by the C++03
66        standard, if one of the following macros is defined, then it represents a
67        defect in the compiler's conformance with the 2003 standard.
68      </p>
69<div class="informaltable"><table class="table">
70<colgroup>
71<col>
72<col>
73<col>
74</colgroup>
75<thead><tr>
76<th>
77                <p>
78                  Macro
79                </p>
80              </th>
81<th>
82                <p>
83                  Section
84                </p>
85              </th>
86<th>
87                <p>
88                  Description
89                </p>
90              </th>
91</tr></thead>
92<tbody>
93<tr>
94<td>
95                <p>
96                  <code class="computeroutput"><span class="identifier">BOOST_BCB_PARTIAL_SPECIALIZATION_BUG</span></code>
97                </p>
98              </td>
99<td>
100                <p>
101                  Compiler
102                </p>
103              </td>
104<td>
105                <p>
106                  The compiler exhibits certain partial specialisation bug - probably
107                  Borland C++ Builder specific.
108                </p>
109              </td>
110</tr>
111<tr>
112<td>
113                <p>
114                  <code class="computeroutput"><span class="identifier">BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL</span></code>
115                </p>
116              </td>
117<td>
118                <p>
119                  Compiler
120                </p>
121              </td>
122<td>
123                <p>
124                  Argument dependent lookup fails if there is a using declaration
125                  for the symbol being looked up in the current scope. For example,
126                  using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">get_pointer</span></code>; prevents ADL from
127                  finding overloads of <code class="computeroutput"><span class="identifier">get_pointer</span></code>
128                  in namespaces nested inside boost (but not elsewhere). Probably
129                  Borland specific.
130                </p>
131              </td>
132</tr>
133<tr>
134<td>
135                <p>
136                  <code class="computeroutput"><span class="identifier">BOOST_NO_ADL_BARRIER</span></code>
137                </p>
138              </td>
139<td>
140                <p>
141                  Compiler
142                </p>
143              </td>
144<td>
145                <p>
146                  The compiler locates and searches namespaces that it should <span class="emphasis"><em>*not*</em></span>
147                  in fact search when performing argument dependent lookup.
148                </p>
149              </td>
150</tr>
151<tr>
152<td>
153                <p>
154                  <code class="computeroutput"><span class="identifier">BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP</span></code>
155                </p>
156              </td>
157<td>
158                <p>
159                  Compiler
160                </p>
161              </td>
162<td>
163                <p>
164                  Compiler does not implement argument-dependent lookup (also named
165                  Koenig lookup); see std::3.4.2 [basic.koenig.lookup]
166                </p>
167              </td>
168</tr>
169<tr>
170<td>
171                <p>
172                  <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
173                </p>
174              </td>
175<td>
176                <p>
177                  Standard library
178                </p>
179              </td>
180<td>
181                <p>
182                  If the compiler / library supplies non-standard or broken <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
183                </p>
184              </td>
185</tr>
186<tr>
187<td>
188                <p>
189                  <code class="computeroutput"><span class="identifier">BOOST_NO_COMPLETE_VALUE_INITIALIZATION</span></code>
190                </p>
191              </td>
192<td>
193                <p>
194                  Compiler
195                </p>
196              </td>
197<td>
198                <p>
199                  Compiler has not completely implemented value-initialization. See
200                  also <a href="../../../../utility/value_init.htm#compiler_issues" target="_top">The
201                  Utility/Value Init docs</a>
202                </p>
203              </td>
204</tr>
205<tr>
206<td>
207                <p>
208                  <code class="computeroutput"><span class="identifier">BOOST_NO_CTYPE_FUNCTIONS</span></code>
209                </p>
210              </td>
211<td>
212                <p>
213                  Platform
214                </p>
215              </td>
216<td>
217                <p>
218                  The Platform does not provide functions for the character-classifying
219                  operations <code class="computeroutput"><span class="special">&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_OVERRIDE</span></code>
3052                </p>
3053              </td>
3054<td>
3055                <p>
3056                  The compiler does not support <code class="computeroutput"><span class="identifier">override</span></code>.
3057                </p>
3058              </td>
3059</tr>
3060<tr>
3061<td>
3062                <p>
3063                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_POINTER_TRAITS</span></code>
3064                </p>
3065              </td>
3066<td>
3067                <p>
3068                  The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pointer_traits</span></code> in &lt;memory&gt;.
3069                </p>
3070              </td>
3071</tr>
3072<tr>
3073<td>
3074                <p>
3075                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RANGE_BASED_FOR</span></code>
3076                </p>
3077              </td>
3078<td>
3079                <p>
3080                  The compiler does not support range-based for statements.
3081                </p>
3082              </td>
3083</tr>
3084<tr>
3085<td>
3086                <p>
3087                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
3088                </p>
3089              </td>
3090<td>
3091                <p>
3092                  The compiler does not support raw string literals.
3093                </p>
3094              </td>
3095</tr>
3096<tr>
3097<td>
3098                <p>
3099                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_REF_QUALIFIERS</span></code>
3100                </p>
3101              </td>
3102<td>
3103                <p>
3104                  The compiler does not support ref-qualifiers on member functions
3105                  as described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm" target="_top">N2439</a>.
3106                </p>
3107              </td>
3108</tr>
3109<tr>
3110<td>
3111                <p>
3112                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
3113                </p>
3114              </td>
3115<td>
3116                <p>
3117                  The compiler does not support r-value references.
3118                </p>
3119              </td>
3120</tr>
3121<tr>
3122<td>
3123                <p>
3124                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
3125                </p>
3126              </td>
3127<td>
3128                <p>
3129                  The compiler does not support scoped enumerations (<code class="computeroutput"><span class="keyword">enum</span> <span class="keyword">class</span></code>).
3130                </p>
3131              </td>
3132</tr>
3133<tr>
3134<td>
3135                <p>
3136                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SFINAE_EXPR</span></code>
3137                </p>
3138              </td>
3139<td>
3140                <p>
3141                  The compiler does not support usage of C++11 SFINAE with arbitrary
3142                  expressions. Use this macro only if you are using all of the features
3143                  of SFINAE including substitution-failure-on-private-member-access.
3144                  Otherwise use BOOST_NO_SFINAE_EXPR or BOOST_NO_SFINAE which get
3145                  defined for fewer compilers.
3146                </p>
3147              </td>
3148</tr>
3149<tr>
3150<td>
3151                <p>
3152                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SMART_PTR</span></code>
3153                </p>
3154              </td>
3155<td>
3156                <p>
3157                  The standard library header &lt;memory&gt; has no shared_ptr and
3158                  unique_ptr.
3159                </p>
3160              </td>
3161</tr>
3162<tr>
3163<td>
3164                <p>
3165                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
3166                </p>
3167              </td>
3168<td>
3169                <p>
3170                  The compiler does not support <code class="computeroutput"><span class="keyword">static_assert</span></code>.
3171                </p>
3172              </td>
3173</tr>
3174<tr>
3175<td>
3176                <p>
3177                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_ALIGN</span></code>
3178                </p>
3179              </td>
3180<td>
3181                <p>
3182                  The standard library header &lt;memory&gt; has no working std::align.
3183                </p>
3184              </td>
3185</tr>
3186<tr>
3187<td>
3188                <p>
3189                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
3190                </p>
3191              </td>
3192<td>
3193                <p>
3194                  The standard library does not support &lt;unordered_map&gt; and
3195                  &lt;unordered_set&gt;.
3196                </p>
3197              </td>
3198</tr>
3199<tr>
3200<td>
3201                <p>
3202                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
3203                </p>
3204              </td>
3205<td>
3206                <p>
3207                  The compiler does not support template aliases.
3208                </p>
3209              </td>
3210</tr>
3211<tr>
3212<td>
3213                <p>
3214                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_THREAD_LOCAL</span></code>
3215                </p>
3216              </td>
3217<td>
3218                <p>
3219                  The compiler does not support the <code class="computeroutput"><span class="keyword">thread_local</span></code>
3220                  storage specifier.
3221                </p>
3222              </td>
3223</tr>
3224<tr>
3225<td>
3226                <p>
3227                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TRAILING_RESULT_TYPES</span></code>
3228                </p>
3229              </td>
3230<td>
3231                <p>
3232                  The compiler does not support the new function result type specification
3233                  syntax (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
3234                  <span class="special">-&gt;</span> <span class="identifier">T</span><span class="special">;</span></code>).
3235                </p>
3236              </td>
3237</tr>
3238<tr>
3239<td>
3240                <p>
3241                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
3242                </p>
3243              </td>
3244<td>
3245                <p>
3246                  The compiler does not support Unicode (<code class="computeroutput"><span class="identifier">u8</span></code>,
3247                  <code class="computeroutput"><span class="identifier">u</span></code>, <code class="computeroutput"><span class="identifier">U</span></code>) literals.
3248                </p>
3249              </td>
3250</tr>
3251<tr>
3252<td>
3253                <p>
3254                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
3255                </p>
3256              </td>
3257<td>
3258                <p>
3259                  The compiler does not support the <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization" target="_top">C++11
3260                  Unified Initialization Syntax</a>.
3261                </p>
3262              </td>
3263</tr>
3264<tr>
3265<td>
3266                <p>
3267                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNRESTRICTED_UNION</span></code>
3268                </p>
3269              </td>
3270<td>
3271                <p>
3272                  The compiler does not support an unrestricted union. This is a
3273                  union that may contain static data as well as user-defined member
3274                  data with non-trivial special member functions.
3275                </p>
3276              </td>
3277</tr>
3278<tr>
3279<td>
3280                <p>
3281                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_USER_DEFINED_LITERALS</span></code>
3282                </p>
3283              </td>
3284<td>
3285                <p>
3286                  The compiler does not support user defined literals.
3287                </p>
3288              </td>
3289</tr>
3290<tr>
3291<td>
3292                <p>
3293                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
3294                </p>
3295              </td>
3296<td>
3297                <p>
3298                  The compiler does not support variadic templates.
3299                </p>
3300              </td>
3301</tr>
3302<tr>
3303<td>
3304                <p>
3305                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
3306                </p>
3307              </td>
3308<td>
3309                <p>
3310                  The compiler does not support variadic macros.
3311                </p>
3312              </td>
3313</tr>
3314<tr>
3315<td>
3316                <p>
3317                  <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG</span></code>
3318                </p>
3319              </td>
3320<td>
3321                <p>
3322                  The compiler does not support <code class="computeroutput"><span class="keyword">long</span>
3323                  <span class="keyword">long</span></code>.
3324                </p>
3325              </td>
3326</tr>
3327</tbody>
3328</table></div>
3329</div>
3330<div class="section">
3331<div class="titlepage"><div><div><h3 class="title">
3332<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers"></a><a name="config_11_for_03"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers" title="Macros that allow use of C++11 features with C++03 compilers">Macros
3333      that allow use of C++11 features with C++03 compilers</a>
3334</h3></div></div></div>
3335<p>
3336        The following macros allow use of C++11 features even with compilers that
3337        do not yet provide compliant C++11 support.
3338      </p>
3339<div class="informaltable"><table class="table">
3340<colgroup>
3341<col>
3342<col>
3343</colgroup>
3344<thead><tr>
3345<th>
3346                <p>
3347                  Macro
3348                </p>
3349              </th>
3350<th>
3351                <p>
3352                  Description
3353                </p>
3354              </th>
3355</tr></thead>
3356<tbody>
3357<tr>
3358<td>
3359                <p>
3360                  <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>, <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code>
3361                </p>
3362              </td>
3363<td>
3364                <p>
3365                  Some compilers don't support the <code class="computeroutput"><span class="keyword">alignas</span></code>
3366                  keyword but provide other means to specify alignment (usually,
3367                  through compiler-specific attributes). The macro <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
3368                  will expand to the <code class="computeroutput"><span class="keyword">alignas</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> keyword if the compiler supports
3369                  it or to some compiler-specific attribute to achieve the specified
3370                  alignment. If no such compiler-specific attribute is known then
3371                  <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> will expand to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code> will be defined.
3372                  Unlike native <code class="computeroutput"><span class="keyword">alignas</span></code>,
3373                  <code class="computeroutput"><span class="identifier">X</span></code> must always be
3374                  a compile-time integer constant. The macro can be used to specify
3375                  alignment of types and data:
3376</p>
3377<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">my_data</span>
3378<span class="special">{</span>
3379    <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">16</span><span class="special">];</span>
3380<span class="special">};</span>
3381<span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">8</span><span class="special">)</span> <span class="keyword">int</span> <span class="identifier">arr</span><span class="special">[</span><span class="number">32</span><span class="special">];</span>
3382</pre>
3383<p>
3384                </p>
3385              </td>
3386</tr>
3387<tr>
3388<td>
3389                <p>
3390                  <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>
3391                </p>
3392              </td>
3393<td>
3394                <p>
3395                  Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3396                  This macro expands to nothing on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code> elsewhere. For example,
3397                  when defining a constexpr function or constructor replace:
3398</p>
3399<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">constexpr</span> <span class="identifier">tuple</span><span class="special">();</span>
3400</pre>
3401<p>
3402                  with:
3403</p>
3404<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_CONSTEXPR</span> <span class="identifier">tuple</span><span class="special">();</span>
3405</pre>
3406<p>
3407                </p>
3408              </td>
3409</tr>
3410<tr>
3411<td>
3412                <p>
3413                  <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>
3414                </p>
3415              </td>
3416<td>
3417                <p>
3418                  Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3419                  This macro expands to <code class="computeroutput"><span class="keyword">const</span></code>
3420                  on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code>
3421                  elsewhere. For example, when defining const expr variables replace:
3422</p>
3423<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3424</pre>
3425<p>
3426                  with:
3427</p>
3428<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3429</pre>
3430<p>
3431                </p>
3432              </td>
3433</tr>
3434<tr>
3435<td>
3436                <p>
3437                  <code class="computeroutput"><span class="identifier">BOOST_OVERRIDE</span></code>
3438                </p>
3439              </td>
3440<td>
3441                <p>
3442                  If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_OVERRIDE</span></code>
3443                  is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">override</span></code> keyword, otherwise expands
3444                  to nothing.
3445                </p>
3446              </td>
3447</tr>
3448<tr>
3449<td>
3450                <p>
3451                  <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTEXPR</span></code>
3452                </p>
3453              </td>
3454<td>
3455                <p>
3456                  This is a shortcut for <code class="computeroutput"><span class="keyword">static</span>
3457                  <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>.
3458                  For example, when defining const expr variables replace:
3459</p>
3460<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3461</pre>
3462<p>
3463                  with:
3464</p>
3465<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_STATIC_CONSTEXPR</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3466</pre>
3467<p>
3468                </p>
3469              </td>
3470</tr>
3471<tr>
3472<td>
3473                <p>
3474                  <code class="computeroutput"><span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">,</span> <span class="identifier">body</span><span class="special">)</span></code>
3475                </p>
3476              </td>
3477<td>
3478                <p>
3479                  This macro is intended to be used within a class definition in
3480                  order to declare a default implementation of function <code class="computeroutput"><span class="identifier">fun</span></code>. For the compilers that do
3481                  not support C++11 defaulted functions the macro will expand into
3482                  an inline function definition with the <code class="computeroutput"><span class="identifier">body</span></code>
3483                  implementation. For example:
3484</p>
3485<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3486<span class="special">{</span>
3487    <span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">my_struct</span><span class="special">(),</span> <span class="special">{})</span>
3488<span class="special">};</span>
3489</pre>
3490<p>
3491                  is equivalent to:
3492</p>
3493<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3494<span class="special">{</span>
3495    <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
3496<span class="special">};</span>
3497</pre>
3498<p>
3499                  or:
3500</p>
3501<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3502<span class="special">{</span>
3503    <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">{}</span>
3504<span class="special">};</span>
3505</pre>
3506<p>
3507                </p>
3508              </td>
3509</tr>
3510<tr>
3511<td>
3512                <p>
3513                  <code class="computeroutput"><span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">)</span></code>
3514                </p>
3515              </td>
3516<td>
3517                <p>
3518                  This macro is intended to be used within a class definition in
3519                  order to declare a deleted function <code class="computeroutput"><span class="identifier">fun</span></code>.
3520                  For the compilers that do not support C++11 deleted functions the
3521                  macro will expand into a private function declaration with no definition.
3522                  Since the macro may change the access mode, it is recommended to
3523                  use this macro at the end of the class definition. For example:
3524</p>
3525<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3526<span class="special">{</span>
3527    <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&amp;))</span>
3528    <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>
3529<span class="special">};</span>
3530</pre>
3531<p>
3532                  is equivalent to:
3533</p>
3534<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3535<span class="special">{</span>
3536    <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&amp;)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
3537    <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>
3538<span class="special">};</span>
3539</pre>
3540<p>
3541                  or:
3542</p>
3543<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3544<span class="special">{</span>
3545<span class="keyword">private</span><span class="special">:</span>
3546    <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&amp;);</span>
3547    <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>
3548<span class="special">};</span>
3549</pre>
3550<p>
3551                </p>
3552              </td>
3553</tr>
3554<tr>
3555<td>
3556                <p>
3557</p>
3558<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOEXCEPT</span>
3559<span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span>
3560<span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
3561<span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span>
3562</pre>
3563<p>
3564                </p>
3565              </td>
3566<td>
3567                <p>
3568                  If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
3569                  is defined (i.e. C++03 compliant compilers) these macros are defined
3570                  as:
3571                </p>
3572                <div class="blockquote"><blockquote class="blockquote">
3573<p>
3574</p>
3575<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span>
3576<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">throw</span><span class="special">()</span>
3577<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
3578<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">false</span>
3579</pre>
3580<p>
3581                  </p>
3582</blockquote></div>
3583                <p>
3584                  If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
3585                  is not defined (i.e. C++11 compliant compilers) they are defined
3586                  as:
3587                </p>
3588                <div class="blockquote"><blockquote class="blockquote">
3589<p>
3590</p>
3591<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> <span class="keyword">noexcept</span>
3592<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">noexcept</span>
3593<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Predicate</span><span class="special">))</span>
3594<span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Expression</span><span class="special">))</span>
3595</pre>
3596<p>
3597                  </p>
3598</blockquote></div>
3599              </td>
3600</tr>
3601<tr>
3602<td>
3603                <p>
3604                  <code class="computeroutput"><span class="identifier">BOOST_FINAL</span></code>
3605                </p>
3606              </td>
3607<td>
3608                <p>
3609                  If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code>
3610                  is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">final</span></code> keyword, otherwise expands
3611                  to nothing.
3612                </p>
3613              </td>
3614</tr>
3615<tr>
3616<td>
3617                <p>
3618                  <code class="computeroutput"><span class="identifier">BOOST_MSVC_ENABLE_2012_NOV_CTP</span></code>
3619                </p>
3620              </td>
3621<td>
3622                <p>
3623                  For Microsoft Visual C++ 2012, enable the C++11 features supplied
3624                  by the November 2012 Community Technology Preview. These features
3625                  are not automatically enabled because the CTP is non-supported
3626                  alpha code that is not recommended for production use. This macro
3627                  must be defined before including any Boost headers, and must be
3628                  defined for all translation units in the program, including Boost
3629                  library builds. This macro will no longer have any effect once
3630                  an official Microsoft release supports the CTP features.
3631                </p>
3632              </td>
3633</tr>
3634</tbody>
3635</table></div>
3636</div>
3637<div class="section">
3638<div class="titlepage"><div><div><h3 class="title">
3639<a name="boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported" title="Macros that describe C++14 features not supported">Macros
3640      that describe C++14 features not supported</a>
3641</h3></div></div></div>
3642<p>
3643        The following macros describe features in the 2014 ISO C++ standard, formerly
3644        known as C++0y, that are not yet supported by a particular compiler or library.
3645      </p>
3646<div class="informaltable"><table class="table">
3647<colgroup>
3648<col>
3649<col>
3650</colgroup>
3651<thead><tr>
3652<th>
3653                <p>
3654                  Macro
3655                </p>
3656              </th>
3657<th>
3658                <p>
3659                  Description
3660                </p>
3661              </th>
3662</tr></thead>
3663<tbody>
3664<tr>
3665<td>
3666                <p>
3667                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_AGGREGATE_NSDMI</span></code>
3668                </p>
3669              </td>
3670<td>
3671                <p>
3672                  The compiler does not support member initializer for aggregates
3673                  as in the following example:
3674                </p>
3675                <div class="blockquote"><blockquote class="blockquote">
3676<p>
3677</p>
3678<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">Foo</span>
3679<span class="special">{</span>
3680  <span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">42</span><span class="special">;</span>
3681<span class="special">};</span>
3682
3683<span class="identifier">Foo</span> <span class="identifier">foo</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0</span> <span class="special">};</span>
3684</pre>
3685<p>
3686                  </p>
3687</blockquote></div>
3688              </td>
3689</tr>
3690<tr>
3691<td>
3692                <p>
3693                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_BINARY_LITERALS</span></code>
3694                </p>
3695              </td>
3696<td>
3697                <p>
3698                  The compiler does not binary literals (e.g. <code class="computeroutput"><span class="number">0</span><span class="identifier">b1010</span></code>).
3699                </p>
3700              </td>
3701</tr>
3702<tr>
3703<td>
3704                <p>
3705                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_CONSTEXPR</span></code>
3706                </p>
3707              </td>
3708<td>
3709                <p>
3710                  The compiler does not support relaxed <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3711                </p>
3712              </td>
3713</tr>
3714<tr>
3715<td>
3716                <p>
3717                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DECLTYPE_AUTO</span></code>
3718                </p>
3719              </td>
3720<td>
3721                <p>
3722                  The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span><span class="special">(</span><span class="keyword">auto</span><span class="special">)</span></code>.
3723                </p>
3724              </td>
3725</tr>
3726<tr>
3727<td>
3728                <p>
3729                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DIGIT_SEPARATORS</span></code>
3730                </p>
3731              </td>
3732<td>
3733                <p>
3734                  The compiler does not support digit separators (e.g. <code class="computeroutput"><span class="number">1</span><span class="char">'000'</span><span class="number">000</span></code>).
3735                </p>
3736              </td>
3737</tr>
3738<tr>
3739<td>
3740                <p>
3741                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_STD_EXCHANGE</span></code>
3742                </p>
3743              </td>
3744<td>
3745                <p>
3746                  The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exchange</span><span class="special">()</span></code>.
3747                </p>
3748              </td>
3749</tr>
3750<tr>
3751<td>
3752                <p>
3753                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_GENERIC_LAMBDAS</span></code>
3754                </p>
3755              </td>
3756<td>
3757                <p>
3758                  The compiler does not support generic lambda (e.g. <code class="computeroutput"><span class="special">[](</span><span class="keyword">auto</span>
3759                  <span class="identifier">v</span><span class="special">){</span>
3760                  <span class="special">}</span></code>).
3761                </p>
3762              </td>
3763</tr>
3764<tr>
3765<td>
3766                <p>
3767                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_HDR_SHARED_MUTEX</span></code>
3768                </p>
3769              </td>
3770<td>
3771                <p>
3772                  The standard library does not provide header &lt;shared_mutex&gt;.
3773                </p>
3774              </td>
3775</tr>
3776<tr>
3777<td>
3778                <p>
3779                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES</span></code>
3780                </p>
3781              </td>
3782<td>
3783                <p>
3784                  The compiler does not support initialized lambda capture (e.g.
3785                  <code class="computeroutput"><span class="special">[</span><span class="identifier">foo</span>
3786                  <span class="special">=</span> <span class="number">42</span><span class="special">]{</span> <span class="special">}</span></code>).
3787                </p>
3788              </td>
3789</tr>
3790<tr>
3791<td>
3792                <p>
3793                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION</span></code>
3794                </p>
3795              </td>
3796<td>
3797                <p>
3798                  The compiler does not support return type deduction for normal
3799                  functions (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">f</span><span class="special">()</span>
3800                  <span class="special">{</span> <span class="keyword">return</span>
3801                  <span class="identifier">val</span><span class="special">;</span>
3802                  <span class="special">}</span></code>).
3803                </p>
3804              </td>
3805</tr>
3806<tr>
3807<td>
3808                <p>
3809                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_VARIABLE_TEMPLATES</span></code>
3810                </p>
3811              </td>
3812<td>
3813                <p>
3814                  The compiler does not support variable template (e.g. <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="identifier">T</span>
3815                  <span class="identifier">kibi</span> <span class="special">=</span>
3816                  <span class="identifier">T</span><span class="special">(</span><span class="number">1024</span><span class="special">);</span></code>).
3817                </p>
3818              </td>
3819</tr>
3820</tbody>
3821</table></div>
3822</div>
3823<div class="section">
3824<div class="titlepage"><div><div><h3 class="title">
3825<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers"></a><a name="config_14_for_11"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers" title="Macros that allow use of C++14 features with C++11 or earlier compilers">Macros
3826      that allow use of C++14 features with C++11 or earlier compilers</a>
3827</h3></div></div></div>
3828<p>
3829        The following macros allow use of C++14 features even with compilers that
3830        do not yet provide compliant C++14 support.
3831      </p>
3832<div class="informaltable"><table class="table">
3833<colgroup>
3834<col>
3835<col>
3836</colgroup>
3837<thead><tr>
3838<th>
3839                <p>
3840                  Macro
3841                </p>
3842              </th>
3843<th>
3844                <p>
3845                  Description
3846                </p>
3847              </th>
3848</tr></thead>
3849<tbody><tr>
3850<td>
3851                <p>
3852                  <code class="computeroutput"><span class="identifier">BOOST_CXX14_CONSTEXPR</span></code>
3853                </p>
3854              </td>
3855<td>
3856                <p>
3857                  This macro works similar to <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>,
3858                  but expands to <code class="computeroutput"><span class="keyword">constexpr</span></code>
3859                  only if the C++14 "relaxed" <code class="computeroutput"><span class="keyword">constexpr</span></code>
3860                  is available.
3861                </p>
3862              </td>
3863</tr></tbody>
3864</table></div>
3865</div>
3866<div class="section">
3867<div class="titlepage"><div><div><h3 class="title">
3868<a name="boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported" title="Macros that describe C++17 features not supported">Macros
3869      that describe C++17 features not supported</a>
3870</h3></div></div></div>
3871<p>
3872        The following macros describe features in the 2017 ISO C++ standard, formerly
3873        known as C++1z, that are not yet supported by a particular compiler or library.
3874      </p>
3875<div class="informaltable"><table class="table">
3876<colgroup>
3877<col>
3878<col>
3879</colgroup>
3880<thead><tr>
3881<th>
3882                <p>
3883                  Macro
3884                </p>
3885              </th>
3886<th>
3887                <p>
3888                  Description
3889                </p>
3890              </th>
3891</tr></thead>
3892<tbody>
3893<tr>
3894<td>
3895                <p>
3896                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_OPTIONAL</span></code>
3897                </p>
3898              </td>
3899<td>
3900                <p>
3901                  The compiler does not support the header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">optional</span><span class="special">&gt;</span></code>.
3902                </p>
3903              </td>
3904</tr>
3905<tr>
3906<td>
3907                <p>
3908                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_VARIANT</span></code>
3909                </p>
3910              </td>
3911<td>
3912                <p>
3913                  The compiler does not support the header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">variant</span><span class="special">&gt;</span></code>.
3914                </p>
3915              </td>
3916</tr>
3917<tr>
3918<td>
3919                <p>
3920                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_STRING_VIEW</span></code>
3921                </p>
3922              </td>
3923<td>
3924                <p>
3925                  The compiler does not support the header <code class="computeroutput"><span class="special">&lt;</span><span class="identifier">string_view</span><span class="special">&gt;</span></code>.
3926                </p>
3927              </td>
3928</tr>
3929<tr>
3930<td>
3931                <p>
3932                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_APPLY</span></code>
3933                </p>
3934              </td>
3935<td>
3936                <p>
3937                  The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">apply</span><span class="special">()</span></code>.
3938                </p>
3939              </td>
3940</tr>
3941<tr>
3942<td>
3943                <p>
3944                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_INVOKE</span></code>
3945                </p>
3946              </td>
3947<td>
3948                <p>
3949                  The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">invoke</span><span class="special">()</span></code>.
3950                </p>
3951              </td>
3952</tr>
3953<tr>
3954<td>
3955                <p>
3956                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_ITERATOR_TRAITS</span></code>
3957                </p>
3958              </td>
3959<td>
3960                <p>
3961                  The compiler does not support SFINAE-friendly <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>.
3962                </p>
3963              </td>
3964</tr>
3965<tr>
3966<td>
3967                <p>
3968                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_IF_CONSTEXPR</span></code>
3969                </p>
3970              </td>
3971<td>
3972                <p>
3973                  The compiler does not support <code class="computeroutput"><span class="keyword">if</span>
3974                  <span class="keyword">constexpr</span></code>.
3975                </p>
3976              </td>
3977</tr>
3978<tr>
3979<td>
3980                <p>
3981                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
3982                </p>
3983              </td>
3984<td>
3985                <p>
3986                  The compiler does not support <code class="computeroutput"><span class="keyword">inline</span></code>
3987                  variables.
3988                </p>
3989              </td>
3990</tr>
3991</tbody>
3992</table></div>
3993</div>
3994<div class="section">
3995<div class="titlepage"><div><div><h3 class="title">
3996<a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers"></a><a name="config_17_for_14"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers" title="Macros that allow use of C++17 features with C++14 or earlier compilers">Macros
3997      that allow use of C++17 features with C++14 or earlier compilers</a>
3998</h3></div></div></div>
3999<p>
4000        The following macros allow use of C++17 features even with compilers that
4001        do not yet provide compliant C++17 support.
4002      </p>
4003<div class="informaltable"><table class="table">
4004<colgroup>
4005<col>
4006<col>
4007</colgroup>
4008<thead><tr>
4009<th>
4010                <p>
4011                  Macro
4012                </p>
4013              </th>
4014<th>
4015                <p>
4016                  Description
4017                </p>
4018              </th>
4019</tr></thead>
4020<tbody>
4021<tr>
4022<td>
4023                <p>
4024                  <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span></code>
4025                </p>
4026              </td>
4027<td>
4028                <p>
4029                  This macro expands to <code class="computeroutput"><span class="keyword">inline</span></code>
4030                  on compilers that support C++17 inline variables and to nothing
4031                  otherwise. Users may need to check for <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
4032                  for further adjustments to the code.
4033                </p>
4034              </td>
4035</tr>
4036<tr>
4037<td>
4038                <p>
4039                  <code class="computeroutput"><span class="identifier">BOOST_IF_CONSTEXPR</span></code>
4040                </p>
4041              </td>
4042<td>
4043                <p>
4044                  Expands to <code class="computeroutput"><span class="keyword">if</span> <span class="keyword">constexpr</span></code>
4045                  when supported, or <code class="computeroutput"><span class="keyword">if</span></code>
4046                  otherwise.
4047                </p>
4048              </td>
4049</tr>
4050<tr>
4051<td>
4052                <p>
4053                  <code class="computeroutput"><span class="identifier">BOOST_INLINE_CONSTEXPR</span></code>
4054                </p>
4055              </td>
4056<td>
4057                <p>
4058                  This is a shortcut for <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span>
4059                  <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>.
4060                </p>
4061              </td>
4062</tr>
4063</tbody>
4064</table></div>
4065</div>
4066<div class="section">
4067<div class="titlepage"><div><div><h3 class="title">
4068<a name="boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_" title="Macros that describe features that have been removed from the standard.">Macros
4069      that describe features that have been removed from the standard.</a>
4070</h3></div></div></div>
4071<p>
4072        The following macros describe features which were required by one version
4073        of the standard, but have been removed by later versions.
4074      </p>
4075<div class="informaltable"><table class="table">
4076<colgroup>
4077<col>
4078<col>
4079</colgroup>
4080<thead><tr>
4081<th>
4082                <p>
4083                  Macro
4084                </p>
4085              </th>
4086<th>
4087                <p>
4088                  Description
4089                </p>
4090              </th>
4091</tr></thead>
4092<tbody>
4093<tr>
4094<td>
4095                <p>
4096                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_RANDOM_SHUFFLE</span></code>
4097                </p>
4098              </td>
4099<td>
4100                <p>
4101                  The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">random_shuffle</span><span class="special">()</span></code>. It was deprecated in C++11 and
4102                  is removed from C++14.
4103                </p>
4104              </td>
4105</tr>
4106<tr>
4107<td>
4108                <p>
4109                  <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
4110                </p>
4111              </td>
4112<td>
4113                <p>
4114                  The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
4115                  It was deprecated in C++11 and is removed from C++14.
4116                </p>
4117              </td>
4118</tr>
4119<tr>
4120<td>
4121                <p>
4122                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_FUNCTION_BASE</span></code>
4123                </p>
4124              </td>
4125<td>
4126                <p>
4127                  The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unary_function</span></code>
4128                  and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">binary_function</span></code>. They were deprecated
4129                  in C++11 and is removed from C++14.
4130                </p>
4131              </td>
4132</tr>
4133<tr>
4134<td>
4135                <p>
4136                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_BINDERS</span></code>
4137                </p>
4138              </td>
4139<td>
4140                <p>
4141                  The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span></code>,
4142                  <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind2nd</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptr_fun</span></code>
4143                  and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span></code>. They were deprecated
4144                  in C++11 and is removed from C++14.
4145                </p>
4146              </td>
4147</tr>
4148</tbody>
4149</table></div>
4150</div>
4151<div class="section">
4152<div class="titlepage"><div><div><h3 class="title">
4153<a name="boost_config.boost_macro_reference.boost_helper_macros"></a><a name="config_helpers"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros" title="Boost Helper Macros">Boost
4154      Helper Macros</a>
4155</h3></div></div></div>
4156<p>
4157        The following macros are either simple helpers, or macros that provide workarounds
4158        for compiler/standard library defects.
4159      </p>
4160<div class="informaltable"><table class="table">
4161<colgroup>
4162<col>
4163<col>
4164</colgroup>
4165<thead><tr>
4166<th>
4167                <p>
4168                  Macro
4169                </p>
4170              </th>
4171<th>
4172                <p>
4173                  Description
4174                </p>
4175              </th>
4176</tr></thead>
4177<tbody>
4178<tr>
4179<td>
4180                <p>
4181                  <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span></code>
4182                </p>
4183              </td>
4184<td>
4185                <p>
4186                  This macro is used where a compiler specific workaround is required
4187                  that is not otherwise described by one of the other Boost.Config
4188                  macros. To use the macro you must first
4189</p>
4190<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special">&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>
4191</pre>
4192<p>
4193                  usage is then:
4194</p>
4195<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">MACRONAME</span><span class="special">,</span> <span class="identifier">CONDITION</span><span class="special">)</span>
4196   <span class="comment">// workaround code goes here...</span>
4197<span class="preprocessor">#else</span>
4198   <span class="comment">// Standard conforming code goes here...</span>
4199<span class="preprocessor">#endif</span>
4200</pre>
4201<p>
4202                  where <code class="computeroutput"><span class="identifier">MACRONAME</span></code>
4203                  is a macro that usually describes the version number to be tested
4204                  against, and <code class="computeroutput"><span class="identifier">CONDITION</span></code>
4205                  is a comparison operator followed by a value. For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">BOOST_INTEL</span><span class="special">,</span>
4206                  <span class="special">&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.
4207                </p>
4208                <p>
4209                  The macro can also be used with <code class="computeroutput"><span class="identifier">BOOST_TESTED_AT</span></code>
4210                  if all current compiler versions exhibit the issue, but the issue
4211                  is expected to be fixed at some later point.
4212                </p>
4213                <p>
4214                  For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">__BORLANDC__</span><span class="special">,</span> <span class="identifier">BOOST_TESTED_AT</span><span class="special">(</span><span class="number">0x590</span><span class="special">))</span></code> would normally evaluate to <code class="computeroutput"><span class="number">1</span></code> for all values of <code class="computeroutput"><span class="identifier">__BORLANDC__</span></code> <span class="emphasis"><em>unless</em></span>
4215                  the macro <code class="computeroutput"><span class="identifier">BOOST_DETECT_OUTDATED_WORKAROUNDS</span></code>
4216                  is defined, in which case evaluates to <code class="computeroutput"><span class="special">(</span><span class="identifier">__BORLANDC__</span> <span class="special">&lt;=</span>
4217                  <span class="number">0x590</span><span class="special">)</span></code>.
4218                </p>
4219                <p>
4220                  <span class="bold"><strong>Note</strong></span>: the ultimate source of documentation
4221                  for this macro is in <a href="../../../../../boost/config/workaround.hpp" target="_top">boost/config/workaround.hpp</a>.
4222                </p>
4223              </td>
4224</tr>
4225<tr>
4226<td>
4227                <p>
4228                  <code class="computeroutput"><span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span></code>
4229                </p>
4230              </td>
4231<td>
4232                <p>
4233                  Sometimes you have a function name with the same name as a C macro,
4234                  for example "min" and "max" member functions,
4235                  in which case one can prevent the function being expanded as a
4236                  macro using:
4237</p>
4238<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">min</span> <span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
4239</pre>
4240<p>
4241                  The following also works in most, but not all, contexts:
4242</p>
4243<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">(</span><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
4244</pre>
4245<p>
4246                </p>
4247              </td>
4248</tr>
4249<tr>
4250<td>
4251                <p>
4252                  <code class="computeroutput"><span class="identifier">BOOST_DEDUCED_TYPENAME</span></code>
4253                </p>
4254              </td>
4255<td>
4256                <p>
4257                  Some compilers don't support the use of typename for dependent
4258                  types in deduced contexts. This macro expands to nothing on those
4259                  compilers, and typename elsewhere. For example, replace: <code class="computeroutput"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span> <span class="keyword">void</span>
4260                  <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span>
4261                  <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code> with: <code class="computeroutput"><span class="keyword">template</span>
4262                  <span class="special">&lt;</span><span class="keyword">class</span>
4263                  <span class="identifier">T</span><span class="special">&gt;</span>
4264                  <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">BOOST_DEDUCED_TYPENAME</span>
4265                  <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code>
4266                </p>
4267              </td>
4268</tr>
4269<tr>
4270<td>
4271                <p>
4272                  <code class="computeroutput"><span class="identifier">BOOST_HASH_MAP_HEADER</span></code>
4273                </p>
4274              </td>
4275<td>
4276                <p>
4277                  The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_map</span></code>
4278                  class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
4279                  is defined.
4280                </p>
4281              </td>
4282</tr>
4283<tr>
4284<td>
4285                <p>
4286                  <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code>
4287                </p>
4288              </td>
4289<td>
4290                <p>
4291                  The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_set</span></code>
4292                  class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
4293                  is defined.
4294                </p>
4295              </td>
4296</tr>
4297<tr>
4298<td>
4299                <p>
4300                  <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code>
4301                </p>
4302              </td>
4303<td>
4304                <p>
4305                  The header to include to get the SGI <code class="computeroutput"><span class="identifier">slist</span></code>
4306                  class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code>
4307                  is defined.
4308                </p>
4309              </td>
4310</tr>
4311<tr>
4312<td>
4313                <p>
4314                  <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
4315                </p>
4316              </td>
4317<td>
4318                <p>
4319                  The namespace used for std library extensions (hashtable classes
4320                  etc).
4321                </p>
4322              </td>
4323</tr>
4324<tr>
4325<td>
4326                <p>
4327                  <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">assignment</span><span class="special">)</span></code>
4328                </p>
4329              </td>
4330<td>
4331                <p>
4332                  On compilers which don't allow in-class initialization of static
4333                  integral constant members, we must use enums as a workaround if
4334                  we want the constants to be available at compile-time. This macro
4335                  gives us a convenient way to declare such constants. For example
4336                  instead of:
4337</p>
4338<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
4339   <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
4340<span class="special">};</span>
4341</pre>
4342<p>
4343                  use:
4344</p>
4345<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
4346   <span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span>
4347<span class="special">};</span>
4348</pre>
4349<p>
4350                </p>
4351              </td>
4352</tr>
4353<tr>
4354<td>
4355                <p>
4356                  <code class="computeroutput"><span class="identifier">BOOST_UNREACHABLE_RETURN</span><span class="special">(</span><span class="identifier">result</span><span class="special">)</span></code>
4357                </p>
4358              </td>
4359<td>
4360                <p>
4361                  Normally evaluates to nothing, but evaluates to return x; if the
4362                  compiler requires a return, even when it can never be reached.
4363                </p>
4364              </td>
4365</tr>
4366<tr>
4367<td>
4368                <p>
4369                  <code class="computeroutput"><span class="identifier">BOOST_FALLTHROUGH</span></code>
4370                </p>
4371              </td>
4372<td>
4373                <p>
4374                  The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
4375                  between switch labels:
4376</p>
4377<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">switch</span> <span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
4378<span class="keyword">case</span> <span class="number">40</span><span class="special">:</span>
4379<span class="keyword">case</span> <span class="number">41</span><span class="special">:</span>
4380   <span class="keyword">if</span> <span class="special">(</span><span class="identifier">truth_is_out_there</span><span class="special">)</span> <span class="special">{</span>
4381      <span class="special">++</span><span class="identifier">x</span><span class="special">;</span>
4382      <span class="identifier">BOOST_FALLTHROUGH</span><span class="special">;</span>  <span class="comment">// Use instead of/along with annotations in </span>
4383      <span class="comment">// comments. </span>
4384   <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
4385     <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span>
4386   <span class="special">}</span>
4387   <span class="keyword">case</span> <span class="number">42</span><span class="special">:</span>
4388      <span class="special">...</span>
4389</pre>
4390<p>
4391                  As shown in the example above, the BOOST_FALLTHROUGH macro should
4392                  be followed by a semicolon. It is designed to mimic control-flow
4393                  statements like 'break;', so it can be placed in most places where
4394                  'break;' can, but only if there are no statements on the execution
4395                  path between it and the next switch label.
4396                </p>
4397                <p>
4398                  When compiled with Clang &gt;3.2 in C++11 mode, the BOOST_FALLTHROUGH
4399                  macro is expanded to <code class="computeroutput"><span class="special">[[</span><span class="identifier">clang</span><span class="special">::</span><span class="identifier">fallthrough</span><span class="special">]]</span></code>
4400                  attribute, which is analysed when performing switch labels fall-through
4401                  diagnostic ('-Wimplicit-fallthrough'). See clang <a href="http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough" target="_top">documentation
4402                  on language extensions for details.</a>
4403                </p>
4404                <p>
4405                  When used with unsupported compilers, the BOOST_FALLTHROUGH macro
4406                  has no effect on diagnostics.
4407                </p>
4408                <p>
4409                  In either case this macro has no effect on runtime behavior and
4410                  performance of code.
4411                </p>
4412              </td>
4413</tr>
4414<tr>
4415<td>
4416                <p>
4417                  <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
4418                </p>
4419                <p>
4420                  <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
4421                </p>
4422                <p>
4423                  <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
4424                </p>
4425                <p>
4426                  <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
4427                </p>
4428              </td>
4429<td>
4430                <p>
4431                  Some compilers silently "fold" different function template
4432                  instantiations if some of the template parameters don't appear
4433                  in the function parameter list. For instance:
4434</p>
4435<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
4436<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">ostream</span><span class="special">&gt;</span>
4437<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">typeinfo</span><span class="special">&gt;</span>
4438
4439<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>
4440<span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&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>
4441
4442<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>
4443<span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&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>
4444
4445<span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
4446  <span class="identifier">f</span><span class="special">&lt;</span><span class="number">1</span><span class="special">&gt;();</span>
4447  <span class="identifier">f</span><span class="special">&lt;</span><span class="number">2</span><span class="special">&gt;();</span>
4448
4449  <span class="identifier">g</span><span class="special">&lt;</span><span class="keyword">int</span><span class="special">&gt;();</span>
4450  <span class="identifier">g</span><span class="special">&lt;</span><span class="keyword">double</span><span class="special">&gt;();</span>
4451<span class="special">}</span>
4452</pre>
4453<p>
4454                  incorrectly outputs <code class="literal">2 2 double double</code> on VC++
4455                  6. These macros, to be used in the function parameter list, fix
4456                  the problem without effects on the calling syntax. For instance,
4457                  in the case above write:
4458</p>
4459<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">&gt;</span>
4460<span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
4461
4462<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">&gt;</span>
4463<span class="keyword">void</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">T</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
4464</pre>
4465<p>
4466                  Beware that they can declare (for affected compilers) a dummy defaulted
4467                  parameter, so they
4468                </p>
4469                <p>
4470                  <span class="bold"><strong>a)</strong></span> should be always invoked <span class="bold"><strong>at the end</strong></span> of the parameter list
4471                </p>
4472                <p>
4473                  <span class="bold"><strong>b)</strong></span> can't be used if your function
4474                  template is multiply declared.
4475                </p>
4476                <p>
4477                  Furthermore, in order to add any needed comma separator, an <code class="computeroutput"><span class="identifier">APPEND_</span><span class="special">*</span></code>
4478                  version must be used when the macro invocation appears after a
4479                  normal parameter declaration or after the invocation of another
4480                  macro of this same group.
4481                </p>
4482              </td>
4483</tr>
4484<tr>
4485<td>
4486                <p>
4487                  <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
4488                </p>
4489              </td>
4490<td>
4491                <p>
4492                  When the standard library does not have a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds
4493                  available, but they differ from library to library. This macro
4494                  provides a consistent way to access a locale's facets. For example,
4495                  replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span><span class="special">&lt;</span><span class="identifier">Type</span><span class="special">&gt;(</span><span class="identifier">loc</span><span class="special">);</span></code>
4496                  with: <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
4497                  prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span></code>.
4498                </p>
4499              </td>
4500</tr>
4501<tr>
4502<td>
4503                <p>
4504                  <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
4505                </p>
4506              </td>
4507<td>
4508                <p>
4509                  When the standard library does not have a comforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span></code> there are various workarounds
4510                  available, but they differ from library to library. This macro
4511                  provides a consistent way to check a locale's facets. For example,
4512                  replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span><span class="special">&lt;</span><span class="identifier">Type</span><span class="special">&gt;(</span><span class="identifier">loc</span><span class="special">);</span></code>
4513                  with: <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
4514                  prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span></code>.
4515                </p>
4516              </td>
4517</tr>
4518<tr>
4519<td>
4520                <p>
4521                  <code class="computeroutput"><span class="identifier">BOOST_NESTED_TEMPLATE</span></code>
4522                </p>
4523              </td>
4524<td>
4525                <p>
4526                  Member templates are supported by some compilers even though they
4527                  can't use the <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
4528                  <span class="identifier">member</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span></code>
4529                  syntax, as a workaround replace: <code class="computeroutput"><span class="keyword">typedef</span>
4530                  <span class="keyword">typename</span> <span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
4531                  <span class="identifier">rebind</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span>
4532                  <span class="identifier">binder</span><span class="special">;</span></code>
4533                  with: <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">typename</span>
4534                  <span class="identifier">A</span><span class="special">::</span><span class="identifier">BOOST_NESTED_TEMPLATE</span> <span class="identifier">rebind</span><span class="special">&lt;</span><span class="identifier">U</span><span class="special">&gt;</span> <span class="identifier">binder</span><span class="special">;</span></code>
4535                </p>
4536              </td>
4537</tr>
4538<tr>
4539<td>
4540                <p>
4541                  <code class="computeroutput"><span class="identifier">BOOST_STRINGIZE</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4542                </p>
4543              </td>
4544<td>
4545                <p>
4546                  Converts the parameter <code class="computeroutput"><span class="identifier">X</span></code>
4547                  to a string after macro replacement on <code class="computeroutput"><span class="identifier">X</span></code>
4548                  has been performed.
4549                </p>
4550              </td>
4551</tr>
4552<tr>
4553<td>
4554                <p>
4555                  <code class="computeroutput"><span class="identifier">BOOST_JOIN</span><span class="special">(</span><span class="identifier">X</span><span class="special">,</span><span class="identifier">Y</span><span class="special">)</span></code>
4556                </p>
4557              </td>
4558<td>
4559                <p>
4560                  This piece of macro magic joins the two arguments together, even
4561                  when one of the arguments is itself a macro (see 16.3.1 in C++
4562                  standard). This is normally used to create a mangled name in combination
4563                  with a predefined macro such a __LINE__.
4564                </p>
4565              </td>
4566</tr>
4567<tr>
4568<td>
4569                <p>
4570                  <code class="computeroutput"><span class="identifier">BOOST_RESTRICT</span></code>
4571                </p>
4572              </td>
4573<td>
4574                <p>
4575                  This macro can be used in place of the compiler specific variant
4576                  of the C99 <code class="computeroutput"><span class="identifier">restrict</span></code>
4577                  keyword to notify the compiler that, for the lifetime of the qualified
4578                  pointer variable, only it and its derivative value will be used
4579                  to gain access to the object it references. This limits the effect
4580                  of pointer aliasing and helps the optimizers in generating better
4581                  code. However, i this condition is violated, undefined behavior
4582                  may occurs.
4583                </p>
4584                <p>
4585                  Usage example:
4586</p>
4587<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">perform_computation</span><span class="special">(</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">out</span> <span class="special">)</span>
4588<span class="special">{</span>
4589  <span class="special">*</span><span class="identifier">out</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">in</span> <span class="special">*</span> <span class="number">0.5f</span><span class="special">;</span>
4590<span class="special">}</span>
4591</pre>
4592<p>
4593                </p>
4594              </td>
4595</tr>
4596<tr>
4597<td>
4598                <p>
4599                  <code class="computeroutput"><span class="identifier">BOOST_FORCEINLINE</span></code>
4600                </p>
4601              </td>
4602<td>
4603                <p>
4604                  This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
4605                  keyword to instruct the compiler that the function should always
4606                  be inlined. Overuse of this macro can lead to significant bloat,
4607                  while good use can increase performance in certain cases, such
4608                  as computation-intensive code built through generative programming
4609                  techniques.
4610                </p>
4611                <p>
4612                  Usage example:
4613</p>
4614<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">&gt;</span>
4615<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>
4616<span class="special">{</span>
4617    <span class="keyword">return</span> <span class="identifier">t</span><span class="special">;</span>
4618<span class="special">}</span>
4619</pre>
4620<p>
4621                </p>
4622                <p>
4623                  Note that use of this macro can lead to cryptic error messages
4624                  with some compilers. Consider defining it to <code class="computeroutput"><span class="keyword">inline</span></code>
4625                  before including the Boost.Config header in order to be able to
4626                  debug errors more easily.
4627                </p>
4628              </td>
4629</tr>
4630<tr>
4631<td>
4632                <p>
4633                  <code class="computeroutput"><span class="identifier">BOOST_NOINLINE</span></code>
4634                </p>
4635              </td>
4636<td>
4637                <p>
4638                  This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
4639                  keyword to instruct the compiler that the function should never
4640                  be inlined. One should typically use this macro to mark functions
4641                  that are unlikely to be called, such as error handling routines.
4642                </p>
4643                <p>
4644                  Usage example:
4645</p>
4646<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOINLINE</span> <span class="keyword">void</span> <span class="identifier">handle_error</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
4647<span class="special">{</span>
4648    <span class="comment">// ...</span>
4649<span class="special">}</span>
4650</pre>
4651<p>
4652                </p>
4653              </td>
4654</tr>
4655<tr>
4656<td>
4657                <p>
4658                  <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
4659                </p>
4660              </td>
4661<td>
4662                <p>
4663                  This macro can be used before the function declaration or definition
4664                  to instruct the compiler that the function does not return normally
4665                  (i.e. with a <code class="computeroutput"><span class="keyword">return</span></code>
4666                  statement or by leaving the function scope, if the function return
4667                  type is <code class="computeroutput"><span class="keyword">void</span></code>). The
4668                  macro can be used to mark functions that always throw exceptions
4669                  or terminate the application. Compilers that support this markup
4670                  may use this information to specifically organize the code surrounding
4671                  calls to this function and suppress warnings about missing <code class="computeroutput"><span class="keyword">return</span></code> statements in the functions
4672                  enclosing such calls.
4673                </p>
4674                <p>
4675                  Usage example:
4676</p>
4677<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NORETURN</span> <span class="keyword">void</span> <span class="identifier">on_error_occurred</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
4678<span class="special">{</span>
4679    <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="identifier">descr</span><span class="special">);</span>
4680<span class="special">}</span>
4681</pre>
4682<p>
4683                </p>
4684                <p>
4685                  If the compiler does not support this markup, <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
4686                  is defined empty and an additional macro <code class="computeroutput"><span class="identifier">BOOST_NO_NORETURN</span></code>
4687                  is defined.
4688                </p>
4689              </td>
4690</tr>
4691<tr>
4692<td>
4693                <p>
4694                  <code class="computeroutput"><span class="identifier">BOOST_LIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4695                </p>
4696                <p>
4697                  <code class="computeroutput"><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4698                </p>
4699              </td>
4700<td>
4701                <p>
4702                  These macros communicate to the compiler that the conditional expression
4703                  <code class="computeroutput"><span class="identifier">X</span></code> is likely or
4704                  unlikely to yield a positive result. The expression should result
4705                  in a boolean value. The result of the macro is an integer or boolean
4706                  value equivalent to the result of <code class="computeroutput"><span class="identifier">X</span></code>.
4707                </p>
4708                <p>
4709                  The macros are intended to be used in branching statements. The
4710                  additional hint they provide can be used by the compiler to arrange
4711                  the compiled code of the branches more effectively.
4712                </p>
4713                <p>
4714                  Usage example:
4715</p>
4716<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">ptr</span> <span class="special">==</span> <span class="identifier">NULL</span><span class="special">))</span>
4717  <span class="identifier">handle_error</span><span class="special">(</span><span class="string">"ptr is NULL"</span><span class="special">);</span>
4718</pre>
4719<p>
4720                </p>
4721              </td>
4722</tr>
4723<tr>
4724<td>
4725                <p>
4726                  <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_UNUSED</span></code>
4727                </p>
4728              </td>
4729<td>
4730                <p>
4731                  Expands to <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">unused</span><span class="special">))</span></code> when this is available - can
4732                  be used to disable compiler warnings relating to unused types or
4733                  variables.
4734                </p>
4735              </td>
4736</tr>
4737<tr>
4738<td>
4739                <p>
4740                  <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NODISCARD</span></code>
4741                </p>
4742              </td>
4743<td>
4744                <p>
4745                  Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">nodiscard</span><span class="special">]]</span></code> when this is available - can
4746                  be used to create a warning when a type or variable is unused.
4747                </p>
4748              </td>
4749</tr>
4750<tr>
4751<td>
4752                <p>
4753                  <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS</span></code>
4754                </p>
4755              </td>
4756<td>
4757                <p>
4758                  Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">no_unique_address</span><span class="special">]]</span></code> when this is available - can
4759                  be used to indicate that a non-static data member need not have
4760                  a unique address (for example empty classes).
4761                </p>
4762              </td>
4763</tr>
4764<tr>
4765<td>
4766                <p>
4767                  <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>,
4768                  <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4769                </p>
4770              </td>
4771<td>
4772                <p>
4773                  <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
4774                  expands to a type attribute that can be used to mark types that
4775                  may alias other types. Pointers or references to such marked types
4776                  can be used to access objects of other types. If the compiler supports
4777                  this feature <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4778                  is not defined. Otherwise <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
4779                  expands to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4780                  is defined.
4781                </p>
4782                <p>
4783                  Usage example:
4784</p>
4785<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_struct</span><span class="special">;</span>
4786<span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_uint</span><span class="special">;</span>
4787</pre>
4788<p>
4789                </p>
4790              </td>
4791</tr>
4792<tr>
4793<td>
4794                <p>
4795                  <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>
4796                </p>
4797              </td>
4798<td>
4799                <p>
4800                  Defined in header <code class="computeroutput"><span class="special">&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>,
4801                  this macro expands to the equivalent of <code class="computeroutput"><span class="preprocessor">#pragma</span>
4802                  <span class="identifier">message</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>.
4803                  <code class="computeroutput"><span class="identifier">M</span></code> must be a string
4804                  literal.
4805                </p>
4806                <p>
4807                  Example: <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="string">"This header
4808                  is deprecated."</span><span class="special">)</span></code>
4809                </p>
4810                <p>
4811                  The messages issued by <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>
4812                  can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_DISABLE_PRAGMA_MESSAGE</span></code>.
4813                </p>
4814              </td>
4815</tr>
4816<tr>
4817<td>
4818                <p>
4819                  <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="identifier">A</span><span class="special">)</span></code>
4820                </p>
4821              </td>
4822<td>
4823                <p>
4824                  Defined in header <code class="computeroutput"><span class="special">&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>,
4825                  this macro issues the message "This header is deprecated.
4826                  Use <code class="computeroutput"><span class="identifier">A</span></code> instead."
4827                  via <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>.
4828                  <code class="computeroutput"><span class="identifier">A</span></code> must be a string
4829                  literal.
4830                </p>
4831                <p>
4832                  Example: <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="string">"&lt;boost/config/workaround.hpp&gt;"</span><span class="special">)</span></code>
4833                </p>
4834                <p>
4835                  The messages issued by <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span></code>
4836                  can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_ALLOW_DEPRECATED_HEADERS</span></code>.
4837                </p>
4838              </td>
4839</tr>
4840</tbody>
4841</table></div>
4842</div>
4843<div class="section">
4844<div class="titlepage"><div><div><h3 class="title">
4845<a name="boost_config.boost_macro_reference.boost_informational_macros"></a><a name="config_info_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros" title="Boost Informational Macros">Boost
4846      Informational Macros</a>
4847</h3></div></div></div>
4848<p>
4849        The following macros describe boost features; these are, generally speaking
4850        the only boost macros that should be tested in user code.
4851      </p>
4852<div class="informaltable"><table class="table">
4853<colgroup>
4854<col>
4855<col>
4856<col>
4857</colgroup>
4858<thead><tr>
4859<th>
4860                <p>
4861                  Macro
4862                </p>
4863              </th>
4864<th>
4865                <p>
4866                  Header
4867                </p>
4868              </th>
4869<th>
4870                <p>
4871                  Description
4872                </p>
4873              </th>
4874</tr></thead>
4875<tbody>
4876<tr>
4877<td>
4878                <p>
4879                  <code class="computeroutput"><span class="identifier">BOOST_VERSION</span></code>
4880                </p>
4881              </td>
4882<td>
4883                <p>
4884                  <code class="computeroutput"><span class="special">&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>
4885                </p>
4886              </td>
4887<td>
4888                <p>
4889                  Describes the boost version number in XYYYZZ format such that:
4890                  <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span>
4891                  <span class="special">%</span> <span class="number">100</span><span class="special">)</span></code> is the sub-minor version, <code class="computeroutput"><span class="special">((</span><span class="identifier">BOOST_VERSION</span>
4892                  <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special">%</span> <span class="number">1000</span><span class="special">)</span></code>
4893                  is the minor version, and <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span> <span class="special">/</span>
4894                  <span class="number">100000</span><span class="special">)</span></code>
4895                  is the major version.
4896                </p>
4897              </td>
4898</tr>
4899<tr>
4900<td>
4901                <p>
4902                  <code class="computeroutput"><span class="identifier">BOOST_NO_INT64_T</span></code>
4903                </p>
4904              </td>
4905<td>
4906                <p>
4907                  <code class="computeroutput"><span class="special">&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>
4908                </p>
4909              </td>
4910<td>
4911                <p>
4912                  Defined if there are no 64-bit integral types: <code class="computeroutput"><span class="identifier">int64_t</span></code>,
4913                  <code class="computeroutput"><span class="identifier">uint64_t</span></code> etc.
4914                </p>
4915              </td>
4916</tr>
4917<tr>
4918<td>
4919                <p>
4920                  <code class="computeroutput"><span class="identifier">BOOST_NO_INTEGRAL_INT64_T</span></code>
4921                </p>
4922              </td>
4923<td>
4924                <p>
4925                  <code class="computeroutput"><span class="special">&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>
4926                </p>
4927              </td>
4928<td>
4929                <p>
4930                  Defined if <code class="computeroutput"><span class="identifier">int64_t</span></code>
4931                  as defined by <code class="computeroutput"><span class="special">&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>
4932                  is not usable in integral constant expressions.
4933                </p>
4934              </td>
4935</tr>
4936<tr>
4937<td>
4938                <p>
4939                  <code class="computeroutput"><span class="identifier">BOOST_MSVC</span></code>
4940                </p>
4941              </td>
4942<td>
4943                <p>
4944                  <code class="computeroutput"><span class="special">&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>
4945                </p>
4946              </td>
4947<td>
4948                <p>
4949                  Defined if the compiler is really Microsoft Visual C++, as opposed
4950                  to one of the many other compilers that also define <code class="computeroutput"><span class="identifier">_MSC_VER</span></code>. Has the same value
4951                  as _MSC_VER.
4952                </p>
4953              </td>
4954</tr>
4955<tr>
4956<td>
4957                <p>
4958                  <code class="computeroutput"><span class="identifier">BOOST_MSVC_FULL_VER</span></code>
4959                </p>
4960              </td>
4961<td>
4962                <p>
4963                  <code class="computeroutput"><span class="special">&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>
4964                </p>
4965              </td>
4966<td>
4967                <p>
4968                  Defined to a normalised 9 digit version of _MSC_FULL_VER (which
4969                  sometimes only has 8 digits), the macro has the form VVMMPPPPP
4970                  where VV is the major version number, MM is the minor version number,
4971                  and PPPPP is the compiler build number.
4972                </p>
4973              </td>
4974</tr>
4975<tr>
4976<td>
4977                <p>
4978                  <code class="computeroutput"><span class="identifier">BOOST_GCC</span></code>
4979                </p>
4980              </td>
4981<td>
4982                <p>
4983                  <code class="computeroutput"><span class="special">&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>
4984                </p>
4985              </td>
4986<td>
4987                <p>
4988                  Defined if the compiler is really GCC, as opposed to one of the
4989                  many other compilers that also define <code class="computeroutput"><span class="identifier">__GNUC__</span></code>.
4990                  Has the value: <code class="computeroutput"><span class="identifier">__GNUC__</span>
4991                  <span class="special">*</span> <span class="number">10000</span>
4992                  <span class="special">+</span> <span class="identifier">__GNUC_MINOR__</span>
4993                  <span class="special">*</span> <span class="number">100</span>
4994                  <span class="special">+</span> <span class="identifier">__GNUC_PATCHLEVEL__</span></code>.
4995                </p>
4996              </td>
4997</tr>
4998<tr>
4999<td>
5000                <p>
5001                  <code class="computeroutput"><span class="identifier">BOOST_INTEL</span></code>
5002                </p>
5003              </td>
5004<td>
5005                <p>
5006                  <code class="computeroutput"><span class="special">&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>
5007                </p>
5008              </td>
5009<td>
5010                <p>
5011                  Defined if the compiler is an Intel compiler, takes the same value
5012                  as the compiler version macro.
5013                </p>
5014              </td>
5015</tr>
5016<tr>
5017<td>
5018                <p>
5019                  <code class="computeroutput"><span class="identifier">BOOST_CLANG</span></code>
5020                </p>
5021              </td>
5022<td>
5023                <p>
5024                  <code class="computeroutput"><span class="special">&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>
5025                </p>
5026              </td>
5027<td>
5028                <p>
5029                  Defined to 1 if the compiler is the Clang compiler.
5030                </p>
5031              </td>
5032</tr>
5033<tr>
5034<td>
5035                <p>
5036                  <code class="computeroutput"><span class="identifier">BOOST_BORLANDC</span></code>
5037                </p>
5038              </td>
5039<td>
5040                <p>
5041                  <code class="computeroutput"><span class="special">&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>
5042                </p>
5043              </td>
5044<td>
5045                <p>
5046                  Defined to the value of __BORLANDC__ if the compiler is the Embarcadero
5047                  non-clang based compiler.
5048                </p>
5049              </td>
5050</tr>
5051<tr>
5052<td>
5053                <p>
5054                  <code class="computeroutput"><span class="identifier">BOOST_CODEGEARC</span></code>
5055                </p>
5056              </td>
5057<td>
5058                <p>
5059                  <code class="computeroutput"><span class="special">&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>
5060                </p>
5061              </td>
5062<td>
5063                <p>
5064                  Defined to the value of __CODEGEARC__ if the compiler is the Embarcadero
5065                  non-clang based compiler.
5066                </p>
5067              </td>
5068</tr>
5069<tr>
5070<td>
5071                <p>
5072                  <code class="computeroutput"><span class="identifier">BOOST_EMBTC</span></code>
5073                </p>
5074              </td>
5075<td>
5076                <p>
5077                  <code class="computeroutput"><span class="special">&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>
5078                </p>
5079              </td>
5080<td>
5081                <p>
5082                  Defined to the value of __CODEGEARC__ if the compiler is the Embarcadero
5083                  clang based compiler.
5084                </p>
5085              </td>
5086</tr>
5087<tr>
5088<td>
5089                <p>
5090                  <code class="computeroutput"><span class="identifier">BOOST_WINDOWS</span></code>
5091                </p>
5092              </td>
5093<td>
5094                <p>
5095                  <code class="computeroutput"><span class="special">&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>
5096                </p>
5097              </td>
5098<td>
5099                <p>
5100                  Defined if the Windows platform API is available.
5101                </p>
5102              </td>
5103</tr>
5104<tr>
5105<td>
5106                <p>
5107                  <code class="computeroutput"><span class="identifier">BOOST_DINKUMWARE_STDLIB</span></code>
5108                </p>
5109              </td>
5110<td>
5111                <p>
5112                  <code class="computeroutput"><span class="special">&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>
5113                </p>
5114              </td>
5115<td>
5116                <p>
5117                  Defined if the dinkumware standard library is in use, takes the
5118                  same value as the Dinkumware library version macro <code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code> if defined, otherwise
5119                  1.
5120                </p>
5121              </td>
5122</tr>
5123<tr>
5124<td>
5125                <p>
5126                  <code class="computeroutput"><span class="identifier">BOOST_NO_WREGEX</span></code>
5127                </p>
5128              </td>
5129<td>
5130                <p>
5131                  <code class="computeroutput"><span class="special">&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>
5132                </p>
5133              </td>
5134<td>
5135                <p>
5136                  Defined if the regex library does not support wide character regular
5137                  expressions.
5138                </p>
5139              </td>
5140</tr>
5141<tr>
5142<td>
5143                <p>
5144                  <code class="computeroutput"><span class="identifier">BOOST_COMPILER</span></code>
5145                </p>
5146              </td>
5147<td>
5148                <p>
5149                  <code class="computeroutput"><span class="special">&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>
5150                </p>
5151              </td>
5152<td>
5153                <p>
5154                  Defined as a string describing the name and version number of the
5155                  compiler in use. Mainly for debugging the configuration.
5156                </p>
5157              </td>
5158</tr>
5159<tr>
5160<td>
5161                <p>
5162                  <code class="computeroutput"><span class="identifier">BOOST_STDLIB</span></code>
5163                </p>
5164              </td>
5165<td>
5166                <p>
5167                  <code class="computeroutput"><span class="special">&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>
5168                </p>
5169              </td>
5170<td>
5171                <p>
5172                  Defined as a string describing the name and version number of the
5173                  standard library in use. Mainly for debugging the configuration.
5174                </p>
5175              </td>
5176</tr>
5177<tr>
5178<td>
5179                <p>
5180                  <code class="computeroutput"><span class="identifier">BOOST_PLATFORM</span></code>
5181                </p>
5182              </td>
5183<td>
5184                <p>
5185                  <code class="computeroutput"><span class="special">&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>
5186                </p>
5187              </td>
5188<td>
5189                <p>
5190                  Defined as a string describing the name of the platform. Mainly
5191                  for debugging the configuration.
5192                </p>
5193              </td>
5194</tr>
5195<tr>
5196<td>
5197                <p>
5198                  <code class="computeroutput"><span class="identifier">BOOST_LIBSTDCXX_VERSION</span></code>
5199                </p>
5200              </td>
5201<td>
5202                <p>
5203                  <code class="computeroutput"><span class="special">&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>
5204                </p>
5205              </td>
5206<td>
5207                <p>
5208                  Defined if the libstdc++ standard library is in use. Has the value
5209                  of normalised 5 digit integer of the form VVMMM where VV is the
5210                  major version number, MM is the minor version number.
5211                </p>
5212              </td>
5213</tr>
5214</tbody>
5215</table></div>
5216</div>
5217<div class="section">
5218<div class="titlepage"><div><div><h3 class="title">
5219<a name="boost_config.boost_macro_reference.boost_deprecated_macros"></a><a name="deprecated_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros" title="Boost Deprecated Macros">Boost
5220      Deprecated Macros</a>
5221</h3></div></div></div>
5222<p>
5223        The following have been deprecated; please use the replacements instead.
5224        They will be removed in a future version of boost.
5225      </p>
5226<div class="informaltable"><table class="table">
5227<colgroup>
5228<col>
5229<col>
5230<col>
5231<col>
5232</colgroup>
5233<thead><tr>
5234<th>
5235                <p>
5236                  Deprecated Macro
5237                </p>
5238              </th>
5239<th>
5240                <p>
5241                  Replacement
5242                </p>
5243              </th>
5244<th>
5245                <p>
5246                  When deprecated
5247                </p>
5248              </th>
5249<th>
5250                <p>
5251                  When removed
5252                </p>
5253              </th>
5254</tr></thead>
5255<tbody>
5256<tr>
5257<td>
5258                <p>
5259                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code>
5260                </p>
5261              </td>
5262<td>
5263                <p>
5264                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
5265                </p>
5266              </td>
5267<td>
5268                <p>
5269                  Boost 1.50
5270                </p>
5271              </td>
5272<td>
5273              </td>
5274</tr>
5275<tr>
5276<td>
5277                <p>
5278                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code>
5279                </p>
5280              </td>
5281<td>
5282                <p>
5283                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
5284                </p>
5285              </td>
5286<td>
5287                <p>
5288                  Boost 1.50
5289                </p>
5290              </td>
5291<td>
5292              </td>
5293</tr>
5294<tr>
5295<td>
5296                <p>
5297                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code>
5298                </p>
5299              </td>
5300<td>
5301                <p>
5302                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
5303                </p>
5304              </td>
5305<td>
5306                <p>
5307                  Boost 1.50
5308                </p>
5309              </td>
5310<td>
5311              </td>
5312</tr>
5313<tr>
5314<td>
5315                <p>
5316                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code>
5317                </p>
5318              </td>
5319<td>
5320                <p>
5321                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
5322                </p>
5323              </td>
5324<td>
5325                <p>
5326                  Boost 1.50
5327                </p>
5328              </td>
5329<td>
5330              </td>
5331</tr>
5332<tr>
5333<td>
5334                <p>
5335                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code>
5336                </p>
5337              </td>
5338<td>
5339                <p>
5340                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
5341                </p>
5342              </td>
5343<td>
5344                <p>
5345                  Boost 1.50
5346                </p>
5347              </td>
5348<td>
5349              </td>
5350</tr>
5351<tr>
5352<td>
5353                <p>
5354                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code>
5355                </p>
5356              </td>
5357<td>
5358                <p>
5359                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
5360                </p>
5361              </td>
5362<td>
5363                <p>
5364                  Boost 1.50
5365                </p>
5366              </td>
5367<td>
5368              </td>
5369</tr>
5370<tr>
5371<td>
5372                <p>
5373                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code>
5374                </p>
5375              </td>
5376<td>
5377                <p>
5378                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
5379                </p>
5380              </td>
5381<td>
5382                <p>
5383                  Boost 1.50
5384                </p>
5385              </td>
5386<td>
5387              </td>
5388</tr>
5389<tr>
5390<td>
5391                <p>
5392                  <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code>
5393                </p>
5394              </td>
5395<td>
5396                <p>
5397                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
5398                </p>
5399              </td>
5400<td>
5401                <p>
5402                  Boost 1.50
5403                </p>
5404              </td>
5405<td>
5406              </td>
5407</tr>
5408<tr>
5409<td>
5410                <p>
5411                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code>
5412                </p>
5413              </td>
5414<td>
5415                <p>
5416                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
5417                </p>
5418              </td>
5419<td>
5420                <p>
5421                  Boost 1.50
5422                </p>
5423              </td>
5424<td>
5425              </td>
5426</tr>
5427<tr>
5428<td>
5429                <p>
5430                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code>
5431                </p>
5432              </td>
5433<td>
5434                <p>
5435                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
5436                </p>
5437              </td>
5438<td>
5439                <p>
5440                  Boost 1.50
5441                </p>
5442              </td>
5443<td>
5444              </td>
5445</tr>
5446<tr>
5447<td>
5448                <p>
5449                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code>
5450                </p>
5451              </td>
5452<td>
5453                <p>
5454                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
5455                </p>
5456              </td>
5457<td>
5458                <p>
5459                  Boost 1.50
5460                </p>
5461              </td>
5462<td>
5463              </td>
5464</tr>
5465<tr>
5466<td>
5467                <p>
5468                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code>
5469                </p>
5470              </td>
5471<td>
5472                <p>
5473                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
5474                </p>
5475              </td>
5476<td>
5477                <p>
5478                  Boost 1.50
5479                </p>
5480              </td>
5481<td>
5482              </td>
5483</tr>
5484<tr>
5485<td>
5486                <p>
5487                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code>
5488                </p>
5489              </td>
5490<td>
5491                <p>
5492                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
5493                </p>
5494              </td>
5495<td>
5496                <p>
5497                  Boost 1.50
5498                </p>
5499              </td>
5500<td>
5501              </td>
5502</tr>
5503<tr>
5504<td>
5505                <p>
5506                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code>
5507                </p>
5508              </td>
5509<td>
5510                <p>
5511                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
5512                </p>
5513              </td>
5514<td>
5515                <p>
5516                  Boost 1.50
5517                </p>
5518              </td>
5519<td>
5520              </td>
5521</tr>
5522<tr>
5523<td>
5524                <p>
5525                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code>
5526                </p>
5527              </td>
5528<td>
5529                <p>
5530                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
5531                </p>
5532              </td>
5533<td>
5534                <p>
5535                  Boost 1.50
5536                </p>
5537              </td>
5538<td>
5539              </td>
5540</tr>
5541<tr>
5542<td>
5543                <p>
5544                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code>
5545                </p>
5546              </td>
5547<td>
5548                <p>
5549                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
5550                </p>
5551              </td>
5552<td>
5553                <p>
5554                  Boost 1.50
5555                </p>
5556              </td>
5557<td>
5558              </td>
5559</tr>
5560<tr>
5561<td>
5562                <p>
5563                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code>
5564                </p>
5565              </td>
5566<td>
5567                <p>
5568                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
5569                </p>
5570              </td>
5571<td>
5572                <p>
5573                  Boost 1.50
5574                </p>
5575              </td>
5576<td>
5577              </td>
5578</tr>
5579<tr>
5580<td>
5581                <p>
5582                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code>
5583                </p>
5584              </td>
5585<td>
5586                <p>
5587                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
5588                </p>
5589              </td>
5590<td>
5591                <p>
5592                  Boost 1.50
5593                </p>
5594              </td>
5595<td>
5596              </td>
5597</tr>
5598<tr>
5599<td>
5600                <p>
5601                  <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code>
5602                </p>
5603              </td>
5604<td>
5605                <p>
5606                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
5607                </p>
5608              </td>
5609<td>
5610                <p>
5611                  Boost 1.50
5612                </p>
5613              </td>
5614<td>
5615              </td>
5616</tr>
5617<tr>
5618<td>
5619                <p>
5620                  <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
5621                </p>
5622              </td>
5623<td>
5624                <p>
5625                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
5626                </p>
5627              </td>
5628<td>
5629                <p>
5630                  Boost 1.50
5631                </p>
5632              </td>
5633<td>
5634              </td>
5635</tr>
5636<tr>
5637<td>
5638              </td>
5639<td>
5640              </td>
5641<td>
5642              </td>
5643<td>
5644              </td>
5645</tr>
5646<tr>
5647<td>
5648                <p>
5649                  <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_DECLARATIONS</span></code>
5650                </p>
5651              </td>
5652<td>
5653                <p>
5654                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code>
5655                </p>
5656              </td>
5657<td>
5658                <p>
5659                  Boost 1.51
5660                </p>
5661              </td>
5662<td>
5663              </td>
5664</tr>
5665<tr>
5666<td>
5667                <p>
5668                  <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_MULTIDECLARATIONS</span></code>
5669                </p>
5670              </td>
5671<td>
5672                <p>
5673                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code>
5674                </p>
5675              </td>
5676<td>
5677                <p>
5678                  Boost 1.51
5679                </p>
5680              </td>
5681<td>
5682              </td>
5683</tr>
5684<tr>
5685<td>
5686                <p>
5687                  <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR16_T</span></code>
5688                </p>
5689              </td>
5690<td>
5691                <p>
5692                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
5693                </p>
5694              </td>
5695<td>
5696                <p>
5697                  Boost 1.51
5698                </p>
5699              </td>
5700<td>
5701              </td>
5702</tr>
5703<tr>
5704<td>
5705                <p>
5706                  <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR32_T</span></code>
5707                </p>
5708              </td>
5709<td>
5710                <p>
5711                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
5712                </p>
5713              </td>
5714<td>
5715                <p>
5716                  Boost 1.51
5717                </p>
5718              </td>
5719<td>
5720              </td>
5721</tr>
5722<tr>
5723<td>
5724                <p>
5725                  <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_ALIASES</span></code>
5726                </p>
5727              </td>
5728<td>
5729                <p>
5730                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
5731                </p>
5732              </td>
5733<td>
5734                <p>
5735                  Boost 1.51
5736                </p>
5737              </td>
5738<td>
5739              </td>
5740</tr>
5741<tr>
5742<td>
5743                <p>
5744                  <code class="computeroutput"><span class="identifier">BOOST_NO_CONSTEXPR</span></code>
5745                </p>
5746              </td>
5747<td>
5748                <p>
5749                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code>
5750                </p>
5751              </td>
5752<td>
5753                <p>
5754                  Boost 1.51
5755                </p>
5756              </td>
5757<td>
5758              </td>
5759</tr>
5760<tr>
5761<td>
5762                <p>
5763                  <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE</span></code>
5764                </p>
5765              </td>
5766<td>
5767                <p>
5768                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code>
5769                </p>
5770              </td>
5771<td>
5772                <p>
5773                  Boost 1.51
5774                </p>
5775              </td>
5776<td>
5777              </td>
5778</tr>
5779<tr>
5780<td>
5781                <p>
5782                  <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE_N3276</span></code>
5783                </p>
5784              </td>
5785<td>
5786                <p>
5787                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code>
5788                </p>
5789              </td>
5790<td>
5791                <p>
5792                  Boost 1.51
5793                </p>
5794              </td>
5795<td>
5796              </td>
5797</tr>
5798<tr>
5799<td>
5800                <p>
5801                  <code class="computeroutput"><span class="identifier">BOOST_NO_DEFAULTED_FUNCTIONS</span></code>
5802                </p>
5803              </td>
5804<td>
5805                <p>
5806                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>
5807                </p>
5808              </td>
5809<td>
5810                <p>
5811                  Boost 1.51
5812                </p>
5813              </td>
5814<td>
5815              </td>
5816</tr>
5817<tr>
5818<td>
5819                <p>
5820                  <code class="computeroutput"><span class="identifier">BOOST_NO_DELETED_FUNCTIONS</span></code>
5821                </p>
5822              </td>
5823<td>
5824                <p>
5825                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code>
5826                </p>
5827              </td>
5828<td>
5829                <p>
5830                  Boost 1.51
5831                </p>
5832              </td>
5833<td>
5834              </td>
5835</tr>
5836<tr>
5837<td>
5838                <p>
5839                  <code class="computeroutput"><span class="identifier">BOOST_NO_EXPLICIT_CONVERSION_OPERATORS</span></code>
5840                </p>
5841              </td>
5842<td>
5843                <p>
5844                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code>
5845                </p>
5846              </td>
5847<td>
5848                <p>
5849                  Boost 1.51
5850                </p>
5851              </td>
5852<td>
5853              </td>
5854</tr>
5855<tr>
5856<td>
5857                <p>
5858                  <code class="computeroutput"><span class="identifier">BOOST_NO_EXTERN_TEMPLATE</span></code>
5859                </p>
5860              </td>
5861<td>
5862                <p>
5863                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code>
5864                </p>
5865              </td>
5866<td>
5867                <p>
5868                  Boost 1.51
5869                </p>
5870              </td>
5871<td>
5872              </td>
5873</tr>
5874<tr>
5875<td>
5876                <p>
5877                  <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
5878                </p>
5879              </td>
5880<td>
5881                <p>
5882                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
5883                </p>
5884              </td>
5885<td>
5886                <p>
5887                  Boost 1.51
5888                </p>
5889              </td>
5890<td>
5891              </td>
5892</tr>
5893<tr>
5894<td>
5895                <p>
5896                  <code class="computeroutput"><span class="identifier">BOOST_NO_LAMBDAS</span></code>
5897                </p>
5898              </td>
5899<td>
5900                <p>
5901                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code>
5902                </p>
5903              </td>
5904<td>
5905                <p>
5906                  Boost 1.51
5907                </p>
5908              </td>
5909<td>
5910              </td>
5911</tr>
5912<tr>
5913<td>
5914                <p>
5915                  <code class="computeroutput"><span class="identifier">BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
5916                </p>
5917              </td>
5918<td>
5919                <p>
5920                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
5921                </p>
5922              </td>
5923<td>
5924                <p>
5925                  Boost 1.51
5926                </p>
5927              </td>
5928<td>
5929              </td>
5930</tr>
5931<tr>
5932<td>
5933                <p>
5934                  <code class="computeroutput"><span class="identifier">BOOST_NO_NOEXCEPT</span></code>
5935                </p>
5936              </td>
5937<td>
5938                <p>
5939                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
5940                </p>
5941              </td>
5942<td>
5943                <p>
5944                  Boost 1.51
5945                </p>
5946              </td>
5947<td>
5948              </td>
5949</tr>
5950<tr>
5951<td>
5952                <p>
5953                  <code class="computeroutput"><span class="identifier">BOOST_NO_NULLPTR</span></code>
5954                </p>
5955              </td>
5956<td>
5957                <p>
5958                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code>
5959                </p>
5960              </td>
5961<td>
5962                <p>
5963                  Boost 1.51
5964                </p>
5965              </td>
5966<td>
5967              </td>
5968</tr>
5969<tr>
5970<td>
5971                <p>
5972                  <code class="computeroutput"><span class="identifier">BOOST_NO_RAW_LITERALS</span></code>
5973                </p>
5974              </td>
5975<td>
5976                <p>
5977                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
5978                </p>
5979              </td>
5980<td>
5981                <p>
5982                  Boost 1.51
5983                </p>
5984              </td>
5985<td>
5986              </td>
5987</tr>
5988<tr>
5989<td>
5990                <p>
5991                  <code class="computeroutput"><span class="identifier">BOOST_NO_RVALUE_REFERENCES</span></code>
5992                </p>
5993              </td>
5994<td>
5995                <p>
5996                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
5997                </p>
5998              </td>
5999<td>
6000                <p>
6001                  Boost 1.51
6002                </p>
6003              </td>
6004<td>
6005              </td>
6006</tr>
6007<tr>
6008<td>
6009                <p>
6010                  <code class="computeroutput"><span class="identifier">BOOST_NO_SCOPED_ENUMS</span></code>
6011                </p>
6012              </td>
6013<td>
6014                <p>
6015                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
6016                </p>
6017              </td>
6018<td>
6019                <p>
6020                  Boost 1.51
6021                </p>
6022              </td>
6023<td>
6024              </td>
6025</tr>
6026<tr>
6027<td>
6028                <p>
6029                  <code class="computeroutput"><span class="identifier">BOOST_NO_STATIC_ASSERT</span></code>
6030                </p>
6031              </td>
6032<td>
6033                <p>
6034                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
6035                </p>
6036              </td>
6037<td>
6038                <p>
6039                  Boost 1.51
6040                </p>
6041              </td>
6042<td>
6043              </td>
6044</tr>
6045<tr>
6046<td>
6047                <p>
6048                  <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
6049                </p>
6050              </td>
6051<td>
6052                <p>
6053                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
6054                </p>
6055              </td>
6056<td>
6057                <p>
6058                  Boost 1.51
6059                </p>
6060              </td>
6061<td>
6062              </td>
6063</tr>
6064<tr>
6065<td>
6066                <p>
6067                  <code class="computeroutput"><span class="identifier">BOOST_NO_UNICODE_LITERALS</span></code>
6068                </p>
6069              </td>
6070<td>
6071                <p>
6072                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
6073                </p>
6074              </td>
6075<td>
6076                <p>
6077                  Boost 1.51
6078                </p>
6079              </td>
6080<td>
6081              </td>
6082</tr>
6083<tr>
6084<td>
6085                <p>
6086                  <code class="computeroutput"><span class="identifier">BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX</span></code>
6087                </p>
6088              </td>
6089<td>
6090                <p>
6091                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
6092                </p>
6093              </td>
6094<td>
6095                <p>
6096                  Boost 1.51
6097                </p>
6098              </td>
6099<td>
6100              </td>
6101</tr>
6102<tr>
6103<td>
6104                <p>
6105                  <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_TEMPLATES</span></code>
6106                </p>
6107              </td>
6108<td>
6109                <p>
6110                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
6111                </p>
6112              </td>
6113<td>
6114                <p>
6115                  Boost 1.51
6116                </p>
6117              </td>
6118<td>
6119              </td>
6120</tr>
6121<tr>
6122<td>
6123                <p>
6124                  <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_MACROS</span></code>
6125                </p>
6126              </td>
6127<td>
6128                <p>
6129                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
6130                </p>
6131              </td>
6132<td>
6133                <p>
6134                  Boost 1.51
6135                </p>
6136              </td>
6137<td>
6138              </td>
6139</tr>
6140<tr>
6141<td>
6142                <p>
6143                  <code class="computeroutput"><span class="identifier">BOOST_NO_NUMERIC_LIMITS_LOWEST</span></code>
6144                </p>
6145              </td>
6146<td>
6147                <p>
6148                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
6149                </p>
6150              </td>
6151<td>
6152                <p>
6153                  Boost 1.51
6154                </p>
6155              </td>
6156<td>
6157              </td>
6158</tr>
6159<tr>
6160<td>
6161              </td>
6162<td>
6163              </td>
6164<td>
6165              </td>
6166<td>
6167              </td>
6168</tr>
6169<tr>
6170<td>
6171                <p>
6172                  <code class="computeroutput"><span class="identifier">BOOST_HAS_STATIC_ASSERT</span></code>
6173                </p>
6174              </td>
6175<td>
6176                <p>
6177                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
6178                  (negated)
6179                </p>
6180              </td>
6181<td>
6182                <p>
6183                  Boost 1.53
6184                </p>
6185              </td>
6186<td>
6187              </td>
6188</tr>
6189<tr>
6190<td>
6191                <p>
6192                  <code class="computeroutput"><span class="identifier">BOOST_HAS_VARIADIC_TMPL</span></code>
6193                </p>
6194              </td>
6195<td>
6196                <p>
6197                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
6198                  (negated)
6199                </p>
6200              </td>
6201<td>
6202                <p>
6203                  Boost 1.53
6204                </p>
6205              </td>
6206<td>
6207              </td>
6208</tr>
6209<tr>
6210<td>
6211                <p>
6212                  <code class="computeroutput"><span class="identifier">BOOST_HAS_RVALUE_REFS</span></code>
6213                </p>
6214              </td>
6215<td>
6216                <p>
6217                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
6218                  (negated)
6219                </p>
6220              </td>
6221<td>
6222                <p>
6223                  Boost 1.53
6224                </p>
6225              </td>
6226<td>
6227              </td>
6228</tr>
6229<tr>
6230<td>
6231                <p>
6232                  <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR16_T</span></code>
6233                </p>
6234              </td>
6235<td>
6236                <p>
6237                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
6238                  (negated)
6239                </p>
6240              </td>
6241<td>
6242                <p>
6243                  Boost 1.53
6244                </p>
6245              </td>
6246<td>
6247              </td>
6248</tr>
6249<tr>
6250<td>
6251                <p>
6252                  <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR32_T</span></code>
6253                </p>
6254              </td>
6255<td>
6256                <p>
6257                  <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
6258                  (negated)
6259                </p>
6260              </td>
6261<td>
6262                <p>
6263                  Boost 1.53
6264                </p>
6265              </td>
6266<td>
6267              </td>
6268</tr>
6269</tbody>
6270</table></div>
6271</div>
6272<div class="section">
6273<div class="titlepage"><div><div><h3 class="title">
6274<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" title="Macros for libraries with separate source code">Macros
6275      for libraries with separate source code</a>
6276</h3></div></div></div>
6277<div class="toc"><dl class="toc">
6278<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility">Macros
6279        controlling shared library symbol visibility</a></span></dt>
6280<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing">ABI
6281        Fixing</a></span></dt>
6282<dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection">Automatic
6283        library selection</a></span></dt>
6284</dl></div>
6285<p>
6286        The following macros and helper headers are of use to authors whose libraries
6287        include separate source code, and are intended to address several issues:
6288      </p>
6289<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6290<li class="listitem">
6291            Controlling shared library symbol visibility
6292          </li>
6293<li class="listitem">
6294            Fixing the ABI of the compiled library
6295          </li>
6296<li class="listitem">
6297            Selecting which compiled library to link against based upon the compilers
6298            settings
6299          </li>
6300</ul></div>
6301<p>
6302        See <a href="http://www.boost.org/development/separate_compilation.html" target="_top">Guidelines
6303        for Authors of Boost Libraries Containing Separate Source</a>
6304      </p>
6305<div class="section">
6306<div class="titlepage"><div><div><h4 class="title">
6307<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility" title="Macros controlling shared library symbol visibility">Macros
6308        controlling shared library symbol visibility</a>
6309</h4></div></div></div>
6310<p>
6311          Some compilers support C++ extensions that control which symbols will be
6312          exported from shared libraries such as dynamic shared objects (DSO's) on
6313          Unix-like systems or dynamic-link libraries (DLL's) on Windows.
6314        </p>
6315<p>
6316          The Microsoft VC++ compiler has long supplied <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> extensions for this purpose, as do virtually
6317          all other compilers targeting the Windows platform.
6318        </p>
6319<p>
6320          Modern versions of the GNU GCC compiler provide the <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">visibility</span><span class="special">(</span><span class="string">"default"</span><span class="special">)))</span></code> extension to indicate that a symbol
6321          should be exported. All other symbols may be hidden by using the <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">hidden</span></code>
6322          or <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">ms</span><span class="special">-</span><span class="identifier">compat</span></code> compiler switches.
6323        </p>
6324<p>
6325          Boost supplies several macros to make it easier to manage symbol visibility
6326          in a way that is portable between compilers and operating systems.
6327        </p>
6328<div class="informaltable"><table class="table">
6329<colgroup>
6330<col>
6331<col>
6332</colgroup>
6333<thead><tr>
6334<th>
6335                  <p>
6336                    Macro
6337                  </p>
6338                </th>
6339<th>
6340                  <p>
6341                    Description
6342                  </p>
6343                </th>
6344</tr></thead>
6345<tbody>
6346<tr>
6347<td>
6348                  <p>
6349                    <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_EXPORT</span></code>
6350                  </p>
6351                </td>
6352<td>
6353                  <p>
6354                    Defines the syntax of a C++ language extension that indicates
6355                    a symbol is to be exported from a shared library. If the compiler
6356                    has no such extension, the macro is defined with no replacement
6357                    text.
6358                  </p>
6359                </td>
6360</tr>
6361<tr>
6362<td>
6363                  <p>
6364                    <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_IMPORT</span></code>
6365                  </p>
6366                </td>
6367<td>
6368                  <p>
6369                    Defines the syntax of a C++ language extension that indicates
6370                    a symbol is to be imported from a shared library. If the compiler
6371                    has no such extension, the macro is defined with no replacement
6372                    text.
6373                  </p>
6374                </td>
6375</tr>
6376<tr>
6377<td>
6378                  <p>
6379                    <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_VISIBLE</span></code>
6380                  </p>
6381                </td>
6382<td>
6383                  <p>
6384                    Defines the syntax of a C++ language extension that indicates
6385                    a symbol is to be globally visible. If the compiler has no such
6386                    extension, the macro is defined with no replacement text. Needed
6387                    for classes that are not otherwise exported, but are used by
6388                    RTTI. Examples include class for objects that will be thrown
6389                    as exceptions or used in dynamic_casts, across shared library
6390                    boundaries. For example, a header-only exception class might
6391                    look like this:
6392</p>
6393<pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">class</span> <span class="identifier">BOOST_SYMBOL_VISIBLE</span> <span class="identifier">my_exception</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
6394</pre>
6395<p>
6396                    Without BOOST_SYMBOL_VISIBLE, it would be impossible to catch
6397                    my_exception thrown from a shared library compiled by GCC with
6398                    the -fvisibility=hidden option.
6399                  </p>
6400                </td>
6401</tr>
6402<tr>
6403<td>
6404                  <p>
6405                    <code class="computeroutput"><span class="identifier">BOOST_HAS_DECLSPEC</span></code>
6406                  </p>
6407                </td>
6408<td>
6409                  <p>
6410                    The compiler has C++ extensions <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> to control export/import of
6411                    symbols from shared libraries. <span class="emphasis"><em>Deprecated. This macro
6412                    is no longer necessary since BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT
6413                    are now supplied. It is provided to support legacy code.</em></span>
6414                  </p>
6415                </td>
6416</tr>
6417</tbody>
6418</table></div>
6419<p>
6420          Typical usage:
6421        </p>
6422<p>
6423          <span class="bold"><strong>boost/foo/config.hpp</strong></span>
6424        </p>
6425<pre class="programlisting"><span class="special">...</span>
6426<span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_DYN_LINK</span><span class="special">)</span> <span class="special">||</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_DYN_LINK</span><span class="special">)</span>
6427<span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_SOURCE</span><span class="special">)</span>
6428<span class="preprocessor">#   define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span>
6429<span class="preprocessor"># else</span>
6430<span class="preprocessor">#   define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_IMPORT</span>
6431<span class="preprocessor"># endif</span>
6432<span class="preprocessor">#else</span>
6433<span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span>
6434<span class="preprocessor">#endif</span>
6435<span class="special">...</span>
6436</pre>
6437<p>
6438          <span class="bold"><strong>boost/foo/foo.hpp</strong></span>
6439        </p>
6440<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&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>
6441<span class="special">...</span>
6442<span class="keyword">class</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">bar</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
6443<span class="special">...</span>
6444<span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">();</span>
6445<span class="special">...</span>
6446</pre>
6447<p>
6448          <span class="bold"><strong>boost/libs/foo/src/foo.cpp</strong></span>
6449        </p>
6450<pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_FOO_SOURCE</span>
6451<span class="preprocessor">#include</span> <span class="special">&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>
6452<span class="special">...</span>
6453<span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">()</span>
6454<span class="special">{</span>
6455  <span class="special">...</span>
6456<span class="special">}</span>
6457<span class="special">...</span>
6458</pre>
6459</div>
6460<div class="section">
6461<div class="titlepage"><div><div><h4 class="title">
6462<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing" title="ABI Fixing">ABI
6463        Fixing</a>
6464</h4></div></div></div>
6465<p>
6466          When linking against a pre-compiled library it vital that the ABI used
6467          by the compiler when building the library <span class="emphasis"><em>matches exactly</em></span>
6468          the ABI used by the code using the library. In this case ABI means things
6469          like the struct packing arrangement used, the name mangling scheme used,
6470          or the size of some types (enum types for example). This is separate from
6471          things like threading support, or runtime library variations, which have
6472          to be dealt with by build variants. To put this in perspective there is
6473          one compiler (Borland's) that has so many compiler options that make subtle
6474          changes to the ABI, that at least in theory there 3200 combinations, and
6475          that's without considering runtime library variations. Fortunately these
6476          variations can be managed by <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
6477          that tell the compiler what ABI to use for the types declared in your library.
6478          In order to avoid sprinkling <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
6479          all over the boost headers, there are some prefix and suffix headers that
6480          do the job. Typical usage is:
6481        </p>
6482<p>
6483          <span class="bold"><strong>my_library.hpp</strong></span>
6484        </p>
6485<pre class="programlisting"><span class="preprocessor">#ifndef</span> <span class="identifier">MY_INCLUDE_GUARD</span>
6486<span class="preprocessor">#define</span> <span class="identifier">MY_INCLUDE_GUARD</span>
6487
6488<span class="comment">// all includes go here:</span>
6489<code class="literal"><span class="bold"><strong>#include &lt;boost/config.hpp&gt;</strong></span></code>
6490<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">whatever</span><span class="special">&gt;</span>
6491
6492<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>
6493
6494<span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
6495
6496<span class="comment">// your code goes here</span>
6497
6498<span class="special">}</span>
6499
6500<code class="literal"><span class="bold"><strong>#include &lt;boost/config/abi_suffix.hpp&gt;</strong></span></code> <span class="comment">// pops abi_prefix.hpp pragmas</span>
6501
6502<span class="preprocessor">#endif</span> <span class="comment">// include guard</span>
6503</pre>
6504<p>
6505          <span class="bold"><strong>my_library.cpp</strong></span>
6506        </p>
6507<pre class="programlisting"><span class="special">...</span>
6508<span class="comment">// nothing special need be done in the implementation file</span>
6509<span class="special">...</span>
6510</pre>
6511<p>
6512          The user can disable this mechanism by defining <code class="computeroutput"><span class="identifier">BOOST_DISABLE_ABI_HEADERS</span></code>,
6513          or they can define <code class="computeroutput"><span class="identifier">BOOST_ABI_PREFIX</span></code>
6514          and/or <code class="computeroutput"><span class="identifier">BOOST_ABI_SUFFIX</span></code>
6515          to point to their own prefix/suffix headers if they so wish.
6516        </p>
6517</div>
6518<div class="section">
6519<div class="titlepage"><div><div><h4 class="title">
6520<a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection" title="Automatic library selection">Automatic
6521        library selection</a>
6522</h4></div></div></div>
6523<p>
6524          It is essential that users link to a build of a library which was built
6525          against the same runtime library that their application will be built against
6526          -if this does not happen then the library will not be binary compatible
6527          with their own code- and there is a high likelihood that their application
6528          will experience runtime crashes. These kinds of problems can be extremely
6529          time consuming and difficult to debug, and often lead to frustrated users
6530          and authors alike (simply selecting the right library to link against is
6531          not as easy as it seems when their are 6-8 of them to chose from, and some
6532          users seem to be blissfully unaware that there even are different runtimes
6533          available to them).
6534        </p>
6535<p>
6536          To solve this issue, some compilers allow source code to contain <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s that instruct the linker
6537          which library to link against, all the user need do is include the headers
6538          they need, place the compiled libraries in their library search path, and
6539          the compiler and linker do the rest. Boost.config supports this via the
6540          header <code class="computeroutput"><span class="special">&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
6541          more of the following macros need to be defined:
6542        </p>
6543<div class="variablelist">
6544<p class="title"><b></b></p>
6545<dl class="variablelist">
6546<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_NAME</span></code></span></dt>
6547<dd><p>
6548                Required: An identifier containing the basename of the library, for
6549                example 'boost_regex'.
6550              </p></dd>
6551<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_DYN_LINK</span></code></span></dt>
6552<dd><p>
6553                Optional: when set link to dll rather than static library.
6554              </p></dd>
6555<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_DIAGNOSTIC</span></code></span></dt>
6556<dd><p>
6557                Optional: when set the header will print out the name of the library
6558                selected (useful for debugging).
6559              </p></dd>
6560<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_NOMANGLE</span></code></span></dt>
6561<dd><p>
6562                Optional: whan set specifies that we should link to BOOST_LIB_NAME.lib,
6563                rather than a mangled-name version.
6564              </p></dd>
6565<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_TAGGED</span></code></span></dt>
6566<dd><p>
6567                Optional: Specifies that we link to libraries built with the --layout=tagged
6568                option. This is essentially the same as the default name-mangled
6569                version, but without the compiler name and version, or the Boost
6570                version. Just the build options.
6571              </p></dd>
6572<dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_SYSTEM</span></code></span></dt>
6573<dd><p>
6574                Optional: Specifies that we link to libraries built with the --layout=system
6575                option. This is essentially the same as the non-name-mangled version,
6576                but with the prefix to differentiate static and dll builds
6577              </p></dd>
6578</dl>
6579</div>
6580<p>
6581          If the compiler supports this mechanism, then it will be told to link against
6582          the appropriately named library, the actual algorithm used to mangle the
6583          name of the library is documented inside <code class="computeroutput"><span class="special">&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>
6584          and has to match that used to create the libraries via bjam 's install
6585          rules.
6586        </p>
6587<p>
6588          <span class="bold"><strong>my_library.hpp</strong></span>
6589        </p>
6590<pre class="programlisting"><span class="special">...</span>
6591<span class="comment">//</span>
6592<span class="comment">// Don't include auto-linking code if the user has disabled it by</span>
6593<span class="comment">// defining BOOST_ALL_NO_LIB, or BOOST_MY_LIBRARY_NO_LIB, or if this </span>
6594<span class="comment">// is one of our own source files (signified by BOOST_MY_LIBRARY_SOURCE):</span>
6595<span class="comment">//</span>
6596<span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_NO_LIB</span><span class="special">)</span> <span class="special">&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>
6597<span class="preprocessor">#  define</span> <span class="identifier">BOOST_LIB_NAME</span> <span class="identifier">boost_my_library</span>
6598<span class="preprocessor">#  ifdef</span> <span class="identifier">BOOST_MY_LIBRARY_DYN_LINK</span>
6599<span class="preprocessor">#     define</span> <span class="identifier">BOOST_DYN_LINK</span>
6600<span class="preprocessor">#  endif</span>
6601<span class="preprocessor">#  include</span> <span class="special">&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>
6602<span class="preprocessor">#endif</span>
6603<span class="special">...</span>
6604</pre>
6605<p>
6606          <span class="bold"><strong>my_library.cpp</strong></span>
6607        </p>
6608<pre class="programlisting"><span class="comment">// define BOOST_MY_LIBRARY_SOURCE so that the header knows that the</span>
6609<span class="comment">// library is being built (possibly exporting rather than importing code)</span>
6610<span class="comment">//</span>
6611<span class="preprocessor">#define</span> <span class="identifier">BOOST_MY_LIBRARY_SOURCE</span>
6612
6613<span class="preprocessor">#include</span> <span class="special">&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>
6614<span class="special">...</span>
6615</pre>
6616</div>
6617</div>
6618</div>
6619<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
6620<td align="left"></td>
6621<td align="right"><div class="copyright-footer">Copyright © 2001-2007 Beman Dawes, Vesa Karvonen, John
6622      Maddock<p>
6623        Distributed under the Boost Software License, Version 1.0. (See accompanying
6624        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
6625      </p>
6626</div></td>
6627</tr></table>
6628<hr>
6629<div class="spirit-nav">
6630<a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
6631</div>
6632</body>
6633</html>
6634