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