3 <meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
4 <title>Boost Macro Reference</title>
5 <link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
6 <meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7 <link rel="home" href="../index.html" title="Boost.Config">
8 <link rel="up" href="../index.html" title="Boost.Config">
9 <link rel="prev" href="../index.html" title="Boost.Config">
10 <link rel="next" href="build_config.html" title="Build Time Configuration">
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>
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>
26 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
27 <a name="boost_config.boost_macro_reference"></a><a class="link" href="boost_macro_reference.html" title="Boost Macro Reference">Boost Macro Reference</a>
28 </h2></div></div></div>
29 <div class="toc"><dl class="toc">
30 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects">Macros
31 that describe C++03 defects</a></span></dt>
32 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features">Macros
33 that describe optional features</a></span></dt>
34 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features">Macros
35 that describe possible C++ future features</a></span></dt>
36 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported">Macros
37 that describe C++11 features not supported</a></span></dt>
38 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers">Macros
39 that allow use of C++11 features with C++03 compilers</a></span></dt>
40 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported">Macros
41 that describe C++14 features not supported</a></span></dt>
42 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers">Macros
43 that allow use of C++14 features with C++11 or earlier compilers</a></span></dt>
44 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported">Macros
45 that describe C++17 features not supported</a></span></dt>
46 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers">Macros
47 that allow use of C++17 features with C++14 or earlier compilers</a></span></dt>
48 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_">Macros
49 that describe features that have been removed from the standard.</a></span></dt>
50 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros">Boost
51 Helper Macros</a></span></dt>
52 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros">Boost
53 Informational Macros</a></span></dt>
54 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros">Boost
55 Deprecated Macros</a></span></dt>
56 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code">Macros
57 for libraries with separate source code</a></span></dt>
60 <div class="titlepage"><div><div><h3 class="title">
61 <a name="boost_config.boost_macro_reference.macros_that_describe_c__03_defects"></a><a name="config_defects"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__03_defects" title="Macros that describe C++03 defects">Macros
62 that describe C++03 defects</a>
63 </h3></div></div></div>
65 The following macros all describe features that are required by the C++03
66 standard, if one of the following macros is defined, then it represents a
67 defect in the compiler's conformance with the 2003 standard.
69 <div class="informaltable"><table class="table">
96 <code class="computeroutput"><span class="identifier">BOOST_BCB_PARTIAL_SPECIALIZATION_BUG</span></code>
106 The compiler exhibits certain partial specialisation bug - probably
107 Borland C++ Builder specific.
114 <code class="computeroutput"><span class="identifier">BOOST_FUNCTION_SCOPE_USING_DECLARATION_BREAKS_ADL</span></code>
124 Argument dependent lookup fails if there is a using declaration
125 for the symbol being looked up in the current scope. For example,
126 using <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">get_pointer</span></code>; prevents ADL from
127 finding overloads of <code class="computeroutput"><span class="identifier">get_pointer</span></code>
128 in namespaces nested inside boost (but not elsewhere). Probably
136 <code class="computeroutput"><span class="identifier">BOOST_NO_ADL_BARRIER</span></code>
146 The compiler locates and searches namespaces that it should <span class="emphasis"><em>*not*</em></span>
147 in fact search when performing argument dependent lookup.
154 <code class="computeroutput"><span class="identifier">BOOST_NO_ARGUMENT_DEPENDENT_LOOKUP</span></code>
164 Compiler does not implement argument-dependent lookup (also named
165 Koenig lookup); see std::3.4.2 [basic.koenig.lookup]
172 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
182 If the compiler / library supplies non-standard or broken <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
189 <code class="computeroutput"><span class="identifier">BOOST_NO_COMPLETE_VALUE_INITIALIZATION</span></code>
199 Compiler has not completely implemented value-initialization. See
200 also <a href="../../../../utility/value_init.htm#compiler_issues" target="_top">The
201 Utility/Value Init docs</a>
208 <code class="computeroutput"><span class="identifier">BOOST_NO_CTYPE_FUNCTIONS</span></code>
218 The Platform does not provide functions for the character-classifying
219 operations <code class="computeroutput"><span class="special"><</span><span class="identifier">ctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> and <code class="computeroutput"><span class="special"><</span><span class="identifier">cctype</span><span class="special">></span></code>,
227 <code class="computeroutput"><span class="identifier">BOOST_NO_CV_SPECIALIZATIONS</span></code>
237 If template specialisations for cv-qualified types conflict with
238 a specialisation for a cv-unqualififed type.
245 <code class="computeroutput"><span class="identifier">BOOST_NO_CV_VOID_SPECIALIZATIONS</span></code>
255 If template specialisations for cv-void types conflict with a specialisation
263 <code class="computeroutput"><span class="identifier">BOOST_NO_CWCHAR</span></code>
273 The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wchar</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
274 and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwchar</span><span class="special">></span></code>.
281 <code class="computeroutput"><span class="identifier">BOOST_NO_CWCTYPE</span></code>
291 The Platform does not provide <code class="computeroutput"><span class="special"><</span><span class="identifier">wctype</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
292 and <code class="computeroutput"><span class="special"><</span><span class="identifier">cwctype</span><span class="special">></span></code>.
299 <code class="computeroutput"><span class="identifier">BOOST_NO_FENV_H</span></code>
304 Platform, Standard library
309 The C standard library doesn't provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
310 <a href="../../../../../boost/detail/fenv.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">detail</span><span class="special">/</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a>
311 should be included instead of <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
312 for maximum portability on platforms which do provide <code class="computeroutput"><span class="special"><</span><span class="identifier">fenv</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
319 <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_NESTED_DERIVATIONS</span></code>
329 The compiler fails to compile a nested class that has a dependent
332 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
333 <span class="keyword">struct</span> <span class="identifier">foo</span> <span class="special">:</span> <span class="special">{</span>
334 <span class="keyword">template</span><span class="special"><</span><span class="keyword">typename</span> <span class="identifier">U</span><span class="special">></span>
335 <span class="keyword">struct</span> <span class="identifier">bar</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">U</span> <span class="special">{};</span>
345 <code class="computeroutput"><span class="identifier">BOOST_NO_DEPENDENT_TYPES_IN_TEMPLATE_VALUE_PARAMETERS</span></code>
355 Template value parameters cannot have a dependent type, for example:
357 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span> <span class="identifier">value</span><span class="special">></span>
358 <span class="keyword">class</span> <span class="identifier">X</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
367 <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTION_STD_NAMESPACE</span></code>
377 The standard library does not put some or all of the contents of
378 <code class="computeroutput"><span class="special"><</span><span class="identifier">exception</span><span class="special">></span></code> in namespace std.
385 <code class="computeroutput"><span class="identifier">BOOST_NO_EXCEPTIONS</span></code>
395 The compiler does not support exception handling (this setting
396 is typically required by many C++ compilers for embedded platforms).
397 Note that there is no requirement for boost libraries to honor
398 this configuration setting - indeed doing so may be impossible
399 in some cases. Those libraries that do honor this will typically
400 abort if a critical error occurs - you have been warned!
407 <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_ORDERING</span></code>
417 The compiler does not perform function template ordering or its
418 function template ordering is incorrect.
420 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="comment">// #1</span>
421 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">);</span>
423 <span class="comment">// #2</span>
424 <span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">,</span><span class="keyword">class</span> <span class="identifier">U</span><span class="special">></span> <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">(*)(</span><span class="identifier">U</span><span class="special">));</span>
426 <span class="keyword">void</span> <span class="identifier">bar</span><span class="special">(</span><span class="keyword">int</span><span class="special">);</span>
428 <span class="identifier">f</span><span class="special">(&</span><span class="identifier">bar</span><span class="special">);</span> <span class="comment">// should choose #2.</span>
437 <code class="computeroutput"><span class="identifier">BOOST_NO_INCLASS_MEMBER_INITIALIZATION</span></code>
447 Compiler violates std::9.4.2/4.
454 <code class="computeroutput"><span class="identifier">BOOST_NO_INTRINSIC_WCHAR_T</span></code>
464 The C++ implementation does not provide <code class="computeroutput"><span class="keyword">wchar_t</span></code>,
465 or it is really a synonym for another integral type. Use this symbol
466 to decide whether it is appropriate to explicitly specialize a
467 template on <code class="computeroutput"><span class="keyword">wchar_t</span></code>
468 if there is already a specialization for other integer types.
475 <code class="computeroutput"><span class="identifier">BOOST_NO_IOSFWD</span></code>
485 The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iosfwd</span><span class="special">></span></code>.
492 <code class="computeroutput"><span class="identifier">BOOST_NO_IOSTREAM</span></code>
502 The standard library lacks <code class="computeroutput"><span class="special"><</span><span class="identifier">iostream</span><span class="special">></span></code>,
503 <code class="computeroutput"><span class="special"><</span><span class="identifier">istream</span><span class="special">></span></code> or <code class="computeroutput"><span class="special"><</span><span class="identifier">ostream</span><span class="special">></span></code>.
510 <code class="computeroutput"><span class="identifier">BOOST_NO_IS_ABSTRACT</span></code>
520 The C++ compiler does not support SFINAE with abstract types, this
521 is covered by <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#337" target="_top">Core
522 Language DR337</a>, but is not part of the current standard.
523 Fortunately most compilers that support SFINAE also support this
524 DR. See also BOOST_NO_SFINAE and BOOST_NO_SFINAE_EXPR
531 <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS</span></code>
541 The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code>
542 header. Never check for this symbol in library code; always include
543 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, which guarantees to provide
544 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>.
551 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
561 C++11 additions to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">numeric_limits</span></code>
562 are not available for use. <code class="computeroutput"><span class="keyword">static</span>
563 <span class="identifier">function</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">lowest</span><span class="special">()</span></code> the lowest finite value representable
564 by the numeric type. <code class="computeroutput"><span class="keyword">static</span>
565 <span class="keyword">int</span> <span class="keyword">const</span>
566 <span class="identifier">max_digits10</span></code> the number
567 of decimal digits that are required to make sure that two distinct
568 values of the type have distinct decimal representations. <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span>
569 <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char16_t</span><span class="special">>;</span></code>, see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>,
570 <code class="computeroutput"><span class="keyword">template</span><span class="special"><></span>
571 <span class="keyword">class</span> <span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">char32_t</span><span class="special">>;</span></code> see also <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>.
572 Replaces BOOST_NO_NUMERIC_LIMITS_LOWEST.
579 <code class="computeroutput"><span class="identifier">BOOST_NO_LIMITS_COMPILE_TIME_CONSTANTS</span></code>
589 Constants such as <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">T</span><span class="special">>::</span><span class="identifier">is_signed</span></code>
590 are not available for use at compile-time.
597 <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG_NUMERIC_LIMITS</span></code>
607 There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">long</span>
608 <span class="keyword">long</span><span class="special">></span></code>
609 and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span>
610 <span class="keyword">long</span> <span class="keyword">long</span><span class="special">></span></code>. <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
611 will then add these specializations as a standard library "fix"
612 only if the compiler supports the <code class="computeroutput"><span class="keyword">long</span>
613 <span class="keyword">long</span></code> datatype.
620 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_FUNCTION_SPECIALIZATIONS</span></code>
630 The compiler does not support the specialization of individual
631 member functions of template classes.
638 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_KEYWORD</span></code>
648 If the compiler supports member templates, but not the template
649 keyword when accessing member template classes.
656 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATE_FRIENDS</span></code>
666 Member template friend syntax (<code class="computeroutput"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span>
667 <span class="identifier">P</span><span class="special">></span>
668 <span class="keyword">friend</span> <span class="keyword">class</span>
669 <span class="identifier">frd</span><span class="special">;</span></code>)
670 described in the C++ Standard, 14.5.3, not supported.
677 <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
687 Member template functions not fully supported.
694 <code class="computeroutput"><span class="identifier">BOOST_NO_MS_INT64_NUMERIC_LIMITS</span></code>
704 There is no specialization for <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="identifier">__int64</span><span class="special">></span></code> and <code class="computeroutput"><span class="identifier">numeric_limits</span><span class="special"><</span><span class="keyword">unsigned</span>
705 <span class="identifier">__int64</span><span class="special">></span></code>.
706 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">limits</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> will then add these specializations
707 as a standard library "fix", only if the compiler supports
708 the <code class="computeroutput"><span class="identifier">__int64</span></code> datatype.
715 <code class="computeroutput"><span class="identifier">BOOST_NO_NESTED_FRIENDSHIP</span></code>
725 Compiler doesn't allow a nested class to access private members
726 of its containing class. Probably Borland/CodeGear specific.
733 <code class="computeroutput"><span class="identifier">BOOST_NO_OPERATORS_IN_NAMESPACE</span></code>
743 Compiler requires inherited operator friend functions to be defined
744 at namespace scope, then using'ed to boost. Probably GCC specific.
745 See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
752 <code class="computeroutput"><span class="identifier">BOOST_NO_PARTIAL_SPECIALIZATION_IMPLICIT_DEFAULT_ARGS</span></code>
762 The compiler does not correctly handle partial specializations
763 which depend upon default arguments in the primary template.
770 <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_CONST</span></code>
780 The compiler does not correctly handle pointers to const member
781 functions, preventing use of these in overloaded function templates.
782 See <a href="../../../../../boost/functional.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">functional</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
789 <code class="computeroutput"><span class="identifier">BOOST_NO_POINTER_TO_MEMBER_TEMPLATE_PARAMETERS</span></code>
799 Pointers to members don't work when used as template parameters.
806 <code class="computeroutput"><span class="identifier">BOOST_NO_PRIVATE_IN_AGGREGATE</span></code>
816 The compiler misreads 8.5.1, treating classes as non-aggregate
817 if they contain private or protected member functions.
824 <code class="computeroutput"><span class="identifier">BOOST_NO_RESTRICT_REFERENCES</span></code>
834 Compiler-specific <code class="computeroutput"><span class="identifier">restrict</span></code>
835 keyword can not be applied to references.
842 <code class="computeroutput"><span class="identifier">BOOST_NO_RTTI</span></code>
852 The compiler may (or may not) have the typeid operator, but RTTI
853 on the dynamic type of an object is not supported.
860 <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE</span></code>
870 The compiler does not support the "Substitution Failure Is
871 Not An Error" meta-programming idiom. This is the lightweight
872 pre-C++11 version of SFINAE.
879 <code class="computeroutput"><span class="identifier">BOOST_NO_SFINAE_EXPR</span></code>
889 The compiler does not support usage of SFINAE with arbitrary expressions.
890 This is the post-C++11 SFINAE, but excludes a few specific corner
891 cases, see also BOOST_NO_CXX11_SFINAE_EXPR.
898 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ALLOCATOR</span></code>
908 The C++ standard library does not provide a standards conforming
909 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>.
916 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_DISTANCE</span></code>
926 The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">distance</span></code>.
933 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR</span></code>
943 The C++ implementation fails to provide the <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
944 class. Note that post C++17, this macro is re-purposed to indicate
945 that std::iterator has been removed or deprecated.
952 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_ITERATOR_TRAITS</span></code>
962 The compiler does not provide a standard compliant implementation
963 of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>. Note that the
964 compiler may still have a non-standard implementation.
971 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_LOCALE</span></code>
981 The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">locale</span></code>.
988 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MESSAGES</span></code>
998 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">messages</span></code>
1006 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_MIN_MAX</span></code>
1016 The C++ standard library does not provide the <code class="computeroutput"><span class="identifier">min</span><span class="special">()</span></code> and <code class="computeroutput"><span class="identifier">max</span><span class="special">()</span></code> template functions that should
1017 be in <code class="computeroutput"><span class="special"><</span><span class="identifier">algorithm</span><span class="special">></span></code>.
1024 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_OUTPUT_ITERATOR_ASSIGN</span></code>
1034 Defined if the standard library's output iterators are not assignable.
1041 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_TYPEINFO</span></code>
1051 The <typeinfo> header declares <code class="computeroutput"><span class="identifier">type_info</span></code>
1052 in the global namespace instead of namespace std.
1059 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_USE_FACET</span></code>
1069 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>.
1076 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTREAMBUF</span></code>
1086 The standard library's implementation of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_streambuf</span><span class="special"><</span><span class="keyword">wchar_t</span><span class="special">></span></code> is either missing, incomplete,
1094 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_WSTRING</span></code>
1104 The standard library lacks <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">wstring</span></code>.
1111 <code class="computeroutput"><span class="identifier">BOOST_NO_STDC_NAMESPACE</span></code>
1121 The contents of C++ standard headers for C library functions (the
1122 <code class="computeroutput"><span class="special"><</span><span class="identifier">c</span><span class="special">...></span></code> headers) have not been placed
1123 in namespace std. This test is difficult - some libraries "fake"
1124 the std C functions by adding using declarations to import them
1125 into namespace std, unfortunately they don't necessarily catch
1133 <code class="computeroutput"><span class="identifier">BOOST_NO_STRINGSTREAM</span></code>
1143 The C++ implementation does not provide the <code class="computeroutput"><span class="special"><</span><span class="identifier">sstream</span><span class="special">></span></code>
1151 <code class="computeroutput"><span class="identifier">BOOST_NO_SWPRINTF</span></code>
1161 The platform does not have a conforming version of <code class="computeroutput"><span class="identifier">swprintf</span></code>.
1168 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION</span></code>
1178 Class template partial specialization (14.5.4 [temp.class.spec])
1186 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_IOSTREAMS</span></code>
1196 The standard library does not provide templated iostream classes.
1203 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATED_ITERATOR_CONSTRUCTORS</span></code>
1213 The standard library does not provide templated iterator constructors
1221 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_TEMPLATES</span></code>
1231 The compiler does not support template template parameters.
1238 <code class="computeroutput"><span class="identifier">BOOST_NO_TYPEID</span></code>
1248 The compiler does not support the typeid operator at all.
1255 <code class="computeroutput"><span class="identifier">BOOST_NO_TYPENAME_WITH_CTOR</span></code>
1265 The typename keyword cannot be used when creating a temporary of
1273 <code class="computeroutput"><span class="identifier">BOOST_NO_UNREACHABLE_RETURN_DETECTION</span></code>
1283 If a return is unreachable, then no return statement should be
1284 required, however some compilers insist on it, while other issue
1285 a bunch of warnings if it is in fact present.
1292 <code class="computeroutput"><span class="identifier">BOOST_NO_USING_DECLARATION_OVERLOADS_FROM_TYPENAME_BASE</span></code>
1302 The compiler will not accept a using declaration that brings a
1303 function from a typename used as a base class into a derived class
1304 if functions of the same name are present in the derived class.
1311 <code class="computeroutput"><span class="identifier">BOOST_NO_USING_TEMPLATE</span></code>
1321 The compiler will not accept a using declaration that imports a
1322 template class or function from another namespace. Originally a
1323 Borland specific problem with imports to/from the global namespace,
1324 extended to MSVC6 which has a specific issue with importing template
1325 classes (but not functions).
1332 <code class="computeroutput"><span class="identifier">BOOST_NO_VOID_RETURNS</span></code>
1342 The compiler does not allow a void function to return the result
1343 of calling another void function.
1345 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{}</span>
1346 <span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="keyword">return</span> <span class="identifier">f</span><span class="special">();</span> <span class="special">}</span>
1355 <div class="section">
1356 <div class="titlepage"><div><div><h3 class="title">
1357 <a name="boost_config.boost_macro_reference.macros_that_describe_optional_features"></a><a name="config_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features" title="Macros that describe optional features">Macros
1358 that describe optional features</a>
1359 </h3></div></div></div>
1361 The following macros describe features that are not required by the C++ standard.
1362 The macro is only defined if the feature is present.
1364 <div class="informaltable"><table class="table">
1391 <code class="computeroutput"><span class="identifier">BOOST_HAS_BETHREADS</span></code>
1401 The platform supports BeOS style threads.
1408 <code class="computeroutput"><span class="identifier">BOOST_HAS_CLOCK_GETTIME</span></code>
1418 The platform has the POSIX API <code class="computeroutput"><span class="identifier">clock_gettime</span></code>.
1425 <code class="computeroutput"><span class="identifier">BOOST_HAS_DIRENT_H</span></code>
1435 The platform has the POSIX header <code class="computeroutput"><span class="special"><</span><span class="identifier">dirent</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
1442 <code class="computeroutput"><span class="identifier">BOOST_HAS_EXPM1</span></code>
1452 The platform has the functions <code class="computeroutput"><span class="identifier">expm1</span></code>,
1453 <code class="computeroutput"><span class="identifier">expm1f</span></code> and <code class="computeroutput"><span class="identifier">expm1l</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
1460 <code class="computeroutput"><span class="identifier">BOOST_HAS_FLOAT128</span></code>
1470 The compiler has <code class="computeroutput"><span class="identifier">__float128</span></code>
1471 as a native type which is distinct from all the regular C++ floating
1479 <code class="computeroutput"><span class="identifier">BOOST_HAS_FTIME</span></code>
1489 The platform has the Win32 API type FTIME.
1496 <code class="computeroutput"><span class="identifier">BOOST_HAS_GETSYSTEMTIMEASFILETIME</span></code>
1506 The platform has the Win32 API GetSystemTimeAsFileTime.
1513 <code class="computeroutput"><span class="identifier">BOOST_HAS_GETTIMEOFDAY</span></code>
1523 The platform has the POSIX API <code class="computeroutput"><span class="identifier">gettimeofday</span></code>.
1530 <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
1540 The C++ implementation provides the (SGI) hash_set and hash_map
1541 classes. When defined, <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code>
1542 and <code class="computeroutput"><span class="identifier">BOOST_HASH_LIST_HEADER</span></code>
1543 will contain the names of the header needed to access hash_set
1544 and hash_map; <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
1545 will provide the namespace in which the two class templates reside.
1552 <code class="computeroutput"><span class="identifier">BOOST_HAS_INT128</span></code>
1562 The compiler has <code class="computeroutput"><span class="identifier">__int128</span></code>
1563 and <code class="computeroutput"><span class="keyword">unsigned</span> <span class="identifier">__int128</span></code>
1564 as native types which are distinct from all the regular C++ integer
1572 <code class="computeroutput"><span class="identifier">BOOST_HAS_LOG1P</span></code>
1582 The platform has the functions <code class="computeroutput"><span class="identifier">log1p</span></code>,
1583 <code class="computeroutput"><span class="identifier">log1pf</span></code> and <code class="computeroutput"><span class="identifier">log1pl</span></code> in <code class="computeroutput"><span class="special"><</span><span class="identifier">math</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
1590 <code class="computeroutput"><span class="identifier">BOOST_HAS_MACRO_USE_FACET</span></code>
1600 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>,
1601 but has a macro <code class="computeroutput"><span class="identifier">_USE</span><span class="special">(</span><span class="identifier">loc</span><span class="special">,</span> <span class="identifier">Type</span><span class="special">)</span></code> that does the job. This is primarily
1602 for the Dinkumware std lib.
1609 <code class="computeroutput"><span class="identifier">BOOST_HAS_MS_INT64</span></code>
1619 The compiler supports the <code class="computeroutput"><span class="identifier">__int64</span></code>
1627 <code class="computeroutput"><span class="identifier">BOOST_HAS_NANOSLEEP</span></code>
1637 The platform has the POSIX API nanosleep.
1644 <code class="computeroutput"><span class="identifier">BOOST_HAS_NL_TYPES_H</span></code>
1654 The platform has an <code class="computeroutput"><span class="special"><</span><span class="identifier">nl_types</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
1661 <code class="computeroutput"><span class="identifier">BOOST_HAS_NRVO</span></code>
1671 Indicated that the compiler supports the named return value optimization
1672 (NRVO). Used to select the most efficient implementation for some
1673 function. See <a href="../../../../../boost/operators.hpp" target="_top"><code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">operators</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code></a> for example.
1680 <code class="computeroutput"><span class="identifier">BOOST_HAS_PARTIAL_STD_ALLOCATOR</span></code>
1690 The standard library has a partially conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code>
1691 class, but without any of the member templates.
1698 <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_ONCE</span></code>
1708 The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span>
1709 <span class="identifier">once</span></code> directive which
1710 tells that the containing header should be included only once while
1711 preprocessing the current translation unit. The pragma may improve
1712 compile times of large projects with some compilers.
1719 <code class="computeroutput"><span class="identifier">BOOST_HAS_PRAGMA_DETECT_MISMATCH</span></code>
1729 The compiler recognizes the <code class="computeroutput"><span class="preprocessor">#pragma</span>
1730 <span class="identifier">detect_mismatch</span><span class="special">(</span><span class="string">"name"</span><span class="special">,</span>
1731 <span class="string">"value"</span><span class="special">)</span></code>
1732 directive which tells that the link stage should be terminated
1733 with error if values for provided <code class="computeroutput"><span class="string">"name"</span></code>
1734 missmatch. This pragma may be a help in preventing ODR violations
1735 and ensuring that different modules are compiled with same flags.
1742 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_DELAY_NP</span></code>
1752 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_delay_np</span></code>.
1759 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_MUTEXATTR_SETTYPE</span></code>
1769 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_mutexattr_settype</span></code>.
1776 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREAD_YIELD</span></code>
1786 The platform has the POSIX API <code class="computeroutput"><span class="identifier">pthread_yield</span></code>.
1793 <code class="computeroutput"><span class="identifier">BOOST_HAS_PTHREADS</span></code>
1803 The platform support POSIX style threads.
1810 <code class="computeroutput"><span class="identifier">BOOST_HAS_SCHED_YIELD</span></code>
1820 The platform has the POSIX API <code class="computeroutput"><span class="identifier">sched_yield</span></code>.
1827 <code class="computeroutput"><span class="identifier">BOOST_HAS_SGI_TYPE_TRAITS</span></code>
1832 Compiler, Standard library
1837 The compiler has native support for SGI style type traits.
1844 <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code>
1854 The platform has a <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
1861 <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code>
1871 The C++ implementation provides the (SGI) slist class. When defined,
1872 <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code>
1873 will contain the name of the header needed to access <code class="computeroutput"><span class="identifier">slist</span></code> and <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
1874 will provide the namespace in which <code class="computeroutput"><span class="identifier">slist</span></code>
1882 <code class="computeroutput"><span class="identifier">BOOST_HAS_STLP_USE_FACET</span></code>
1892 The standard library lacks a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code>,
1893 but has a workaround class-version that does the job. This is primarily
1894 for the STLport std lib.
1901 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_ARRAY</span></code>
1911 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">array</span><span class="special">></span></code>.
1912 This macro is only guaranteed to be defined after including one
1913 of the headers from Boost.TR1. Further this macro is now deprecated
1914 in favour of BOOST_NO_CXX11_HDR_ARRAY.
1921 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_OVERLOADS</span></code>
1931 The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code>
1932 that supports passing scalars to the complex number algorithms.
1939 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_COMPLEX_INVERSE_TRIG</span></code>
1949 The library has a version of <code class="computeroutput"><span class="special"><</span><span class="identifier">complex</span><span class="special">></span></code>
1950 that includes the new inverse trig functions from TR1.
1957 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REFERENCE_WRAPPER</span></code>
1967 The library has TR1 conforming reference wrappers in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
1968 to be defined after including one of the headers from Boost.TR1.
1969 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
1976 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RESULT_OF</span></code>
1986 The library has a TR1 conforming result_of template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
1987 to be defined after including one of the headers from Boost.TR1.
1988 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
1995 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_MEM_FN</span></code>
2005 The library has a TR1 conforming mem_fn function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
2006 to be defined after including one of the headers from Boost.TR1.
2007 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
2014 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_BIND</span></code>
2024 The library has a TR1 conforming bind function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
2025 to be defined after including one of the headers from Boost.TR1.
2026 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
2033 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_FUNCTION</span></code>
2043 The library has a TR1 conforming function class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
2044 to be defined after including one of the headers from Boost.TR1.
2045 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
2052 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_HASH</span></code>
2062 The library has a TR1 conforming hash function template in <code class="computeroutput"><span class="special"><</span><span class="identifier">functional</span><span class="special">></span></code>. This macro is only guaranteed
2063 to be defined after including one of the headers from Boost.TR1.
2064 Further this macro is now deprecated in favour of BOOST_NO_CXX11_HDR_FUNCTIONAL.
2071 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_SHARED_PTR</span></code>
2081 The library has a TR1 conforming <code class="computeroutput"><span class="identifier">shared_ptr</span></code>
2082 class template in <code class="computeroutput"><span class="special"><</span><span class="identifier">memory</span><span class="special">></span></code>.
2083 This macro is only guaranteed to be defined after including one
2084 of the headers from Boost.TR1. Further this macro is now deprecated
2085 in favour of BOOST_NO_CXX11_SMART_PTR.
2092 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_RANDOM</span></code>
2102 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">random</span><span class="special">></span></code>.
2103 This macro is only guaranteed to be defined after including one
2104 of the headers from Boost.TR1. Further this macro is now deprecated
2105 in favour of BOOST_NO_CXX11_HDR_RANDOM.
2112 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_REGEX</span></code>
2122 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">regex</span><span class="special">></span></code>.
2123 This macro is only guaranteed to be defined after including one
2124 of the headers from Boost.TR1. Further this macro is now deprecated
2125 in favour of BOOST_NO_CXX11_HDR_REGEX.
2132 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TUPLE</span></code>
2142 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">tuple</span><span class="special">></span></code>.
2143 This macro is only guaranteed to be defined after including one
2144 of the headers from Boost.TR1. Further this macro is now deprecated
2145 in favour of BOOST_NO_CXX11_HDR_TUPLE.
2152 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_TYPE_TRAITS</span></code>
2162 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">type_traits</span><span class="special">></span></code>.
2163 This macro is only guaranteed to be defined after including one
2164 of the headers from Boost.TR1. Further this macro is now deprecated
2165 in favour of BOOST_NO_CXX11_HDR_TYPE_TRAITS.
2172 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UTILITY</span></code>
2182 The library has the TR1 additions to <code class="computeroutput"><span class="special"><</span><span class="identifier">utility</span><span class="special">></span></code>
2183 (tuple interface to <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pair</span></code>).
2184 This macro is only guaranteed to be defined after including one
2185 of the headers from Boost.TR1. Further this macro is now deprecated
2186 in favour of BOOST_NO_CXX11_HDR_TUPLE.
2193 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_MAP</span></code>
2203 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_map</span><span class="special">></span></code>.
2204 This macro is only guaranteed to be defined after including one
2205 of the headers from Boost.TR1. Further this macro is now deprecated
2206 in favour of BOOST_NO_CXX11_HDR_UNORDERED_MAP.
2213 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_UNORDERED_SET</span></code>
2223 The library has a TR1 conforming version of <code class="computeroutput"><span class="special"><</span><span class="identifier">unordered_set</span><span class="special">></span></code>.
2224 This macro is only guaranteed to be defined after including one
2225 of the headers from Boost.TR1. Further this macro is now deprecated
2226 in favour of BOOST_NO_CXX11_HDR_UNORDERED_SET.
2233 <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1</span></code>
2243 Implies all the other <code class="computeroutput"><span class="identifier">BOOST_HAS_TR1_</span><span class="special">*</span></code> macros should be set.
2250 <code class="computeroutput"><span class="identifier">BOOST_HAS_THREADS</span></code>
2260 Defined if the compiler, in its current translation mode, supports
2261 multiple threads of execution.
2268 <code class="computeroutput"><span class="identifier">BOOST_HAS_TWO_ARG_USE_FACET</span></code>
2278 The standard library lacks a conforming std::use_facet, but has
2279 a two argument version that does the job. This is primarily for
2280 the Rogue Wave std lib.
2287 <code class="computeroutput"><span class="identifier">BOOST_HAS_UNISTD_H</span></code>
2297 The Platform provides <code class="computeroutput"><span class="special"><</span><span class="identifier">unistd</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
2304 <code class="computeroutput"><span class="identifier">BOOST_HAS_WINTHREADS</span></code>
2314 The platform supports MS Windows style threads.
2321 <code class="computeroutput"><span class="identifier">BOOST_MSVC_STD_ITERATOR</span></code>
2331 Microsoft's broken version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
2332 is being used. This implies that <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator</span></code>
2333 takes no more than two template parameters.
2340 <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code>
2350 Microsoft Visual C++ 6.0 has enough member template idiosyncrasies
2351 (being polite) that <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
2352 is defined for this compiler. <code class="computeroutput"><span class="identifier">BOOST_MSVC6_MEMBER_TEMPLATES</span></code>
2353 is defined to allow compiler specific workarounds. This macro gets
2354 defined automatically if <code class="computeroutput"><span class="identifier">BOOST_NO_MEMBER_TEMPLATES</span></code>
2355 is not defined - in other words this is treated as a strict subset
2356 of the features required by the standard.
2363 <code class="computeroutput"><span class="identifier">BOOST_HAS_STDINT_H</span></code>
2373 There are no 1998 C++ Standard headers <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
2374 or <code class="computeroutput"><span class="special"><</span><span class="identifier">cstdint</span><span class="special">></span></code>, although the 1999 C Standard
2375 does include <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>.
2376 If <code class="computeroutput"><span class="special"><</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code> is present, <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
2377 can make good use of it, so a flag is supplied (signalling presence;
2378 thus the default is not present, conforming to the current C++
2386 <div class="section">
2387 <div class="titlepage"><div><div><h3 class="title">
2388 <a name="boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_possible_c___future_features" title="Macros that describe possible C++ future features">Macros
2389 that describe possible C++ future features</a>
2390 </h3></div></div></div>
2392 The following macros describe features that may be included in some future
2393 ISO C++ standard, but have not yet been approved for inclusion in the language.
2395 <div class="informaltable"><table class="table">
2415 <code class="computeroutput"><span class="identifier">BOOST_HAS_CONCEPTS</span></code>
2420 The compiler supports concepts.
2426 <div class="section">
2427 <div class="titlepage"><div><div><h3 class="title">
2428 <a name="boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__11_features_not_supported" title="Macros that describe C++11 features not supported">Macros
2429 that describe C++11 features not supported</a>
2430 </h3></div></div></div>
2432 The following macros describe features in the 2011 ISO C++ standard, formerly
2433 known as C++0x, that are not yet supported by a particular compiler or library.
2435 <div class="informaltable"><table class="table">
2456 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ADDRESSOF</span></code>
2461 The standard library header <memory> has no working std::addressof.
2468 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALIGNAS</span></code>
2473 The compiler does not support the <code class="computeroutput"><span class="keyword">alignas</span></code>
2481 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ALLOCATOR</span></code>
2486 The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">allocator</span></code> in <memory>.
2493 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_ATOMIC_SMART_PTR</span></code>
2498 The standard library <memory> does not support atomic smart
2506 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code>
2511 The compiler does not support type deduction for variables declared
2512 with the <code class="computeroutput"><span class="keyword">auto</span></code> keyword
2513 (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span>
2514 <span class="special">=</span> <span class="special">...;</span></code>).
2521 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code>
2526 The compiler does not support type deduction for multiple variables
2527 declared with the <code class="computeroutput"><span class="keyword">auto</span></code>
2528 keyword (<code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">var</span>
2529 <span class="special">=</span> <span class="special">...,</span>
2530 <span class="special">*</span><span class="identifier">ptr</span>
2531 <span class="special">=</span> <span class="special">...;</span></code>).
2538 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
2543 The compiler does not support type <code class="computeroutput"><span class="keyword">char16_t</span></code>.
2550 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
2555 The compiler does not support type <code class="computeroutput"><span class="keyword">char32_t</span></code>.
2562 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code>
2567 The compiler does not support <code class="computeroutput"><span class="keyword">constexpr</span></code>.
2574 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code>
2579 The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span></code>.
2586 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code>
2591 The compiler does not support the extension to <code class="computeroutput"><span class="keyword">decltype</span></code>
2592 described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3276.pdf" target="_top">N3276</a>,
2593 accepted in Madrid, March 2011.
2600 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code>
2605 The compiler does not support deleted (<code class="computeroutput"><span class="special">=</span>
2606 <span class="keyword">delete</span></code>) functions.
2613 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>
2618 The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span>
2619 <span class="keyword">default</span></code>) functions.
2626 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_MOVES</span></code>
2631 The compiler does not support defaulted move constructor or assignment.
2632 Other defaulted functions may still be supported.
2639 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code>
2644 The compiler does not support explicit conversion operators (<code class="computeroutput"><span class="keyword">explicit</span> <span class="keyword">operator</span>
2645 <span class="identifier">T</span><span class="special">()</span></code>).
2652 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code>
2657 The compiler does not support explicit instantiation forward declarations
2658 for templates (<code class="computeroutput"><span class="keyword">extern</span> <span class="keyword">template</span> <span class="special">...</span></code>).
2665 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code>
2670 The compiler does not support the C++ class-virt-specifier final.
2677 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FIXED_LENGTH_VARIADIC_TEMPLATE_EXPANSION_PACKS</span></code>
2682 The compiler does not support expanding a variadic template parameter
2683 pack into a template containing one or more fixed arguments
2690 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
2695 The compiler does not support default template arguments for function
2703 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ATOMIC</span></code>
2708 The standard library does not provide header <atomic>.
2715 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
2720 The standard library does not provide header <array>.
2727 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
2732 The standard library does not provide header <chrono>.
2739 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
2744 The standard library does not provide header <codecvt>.
2751 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
2756 The standard library does not provide header <condition_variable>.
2763 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_EXCEPTION</span></code>
2768 The standard library does not provide a C++11 compatible version
2769 of <exception>.
2776 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
2781 The standard library does not provide header <forward_list>.
2788 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUNCTIONAL</span></code>
2793 The standard library does not provide a C++11 compatible version
2794 of <functional>.
2801 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
2806 The standard library does not provide header <future>.
2813 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
2818 The standard library does not provide header <initializer_list>.
2825 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
2830 The standard library does not provide header <mutex>.
2837 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
2842 The standard library does not provide header <random>.
2849 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
2854 The standard library does not provide header <ratio>.
2861 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
2866 The standard library does not provide header <regex>.
2873 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
2878 The standard library does not provide header <system_error>.
2885 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
2890 The standard library does not provide header <thread>.
2897 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
2902 The standard library does not provide header <tuple>.
2909 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
2914 The standard library does not provide header <typeindex>.
2921 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
2926 The standard library does not provide header <type_traits>.
2933 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
2938 The standard library does not provide header <unordered_map>.
2945 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
2950 The standard library does not provide header <unordered_set>.
2957 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_INLINE_NAMESPACES</span></code>
2962 The compiler does not support inline namespaces.
2969 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code>
2974 The compiler does not support Lambdas.
2981 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
2986 The compiler does not allow to pass local classes as template parameters
2987 (this macro intentionally does not control passing of unnamed types
2988 as template parameters, see also <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm" target="_top">N2657</a>).
2995 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NON_PUBLIC_DEFAULTED_FUNCTIONS</span></code>
3000 The compiler does not support defaulted (<code class="computeroutput"><span class="special">=</span>
3001 <span class="keyword">default</span></code>) functions in access
3002 control sections other than <code class="computeroutput"><span class="keyword">public</span></code>.
3003 Public defaulted functions may still be supported, as indicated
3004 by <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>.
3005 Some compilers implementing an early draft of the C++11 standard
3006 (in particular, incorporating <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#906" target="_top">DR906</a>)
3007 are susceptible to this problem.
3014 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
3019 The compiler does not support <code class="computeroutput"><span class="keyword">noexcept</span></code>.
3026 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code>
3031 The compiler does not support <code class="computeroutput"><span class="keyword">nullptr</span></code>.
3038 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
3043 The standard library <code class="computeroutput"><span class="special"><</span><span class="identifier">limits</span><span class="special">></span></code>
3044 header does not support the C++11 version of <code class="computeroutput"><span class="identifier">numeric_limits</span></code>.
3051 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_POINTER_TRAITS</span></code>
3056 The standard library does not provide a C++11 version of <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">pointer_traits</span></code> in <memory>.
3063 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RANGE_BASED_FOR</span></code>
3068 The compiler does not support range-based for statements.
3075 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
3080 The compiler does not support raw string literals.
3087 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_REF_QUALIFIERS</span></code>
3092 The compiler does not support ref-qualifiers on member functions
3093 as described in <a href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm" target="_top">N2439</a>.
3100 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
3105 The compiler does not support r-value references.
3112 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
3117 The compiler does not support scoped enumerations (<code class="computeroutput"><span class="keyword">enum</span> <span class="keyword">class</span></code>).
3124 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SFINAE_EXPR</span></code>
3129 The compiler does not support usage of C++11 SFINAE with arbitrary
3130 expressions. Use this macro only if you are using all of the features
3131 of SFINAE including substitution-failure-on-private-member-access.
3132 Otherwise use BOOST_NO_SFINAE_EXPR or BOOST_NO_SFINAE which get
3133 defined for fewer compilers.
3140 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SMART_PTR</span></code>
3145 The standard library header <memory> has no shared_ptr and
3153 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
3158 The compiler does not support <code class="computeroutput"><span class="keyword">static_assert</span></code>.
3165 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_ALIGN</span></code>
3170 The standard library header <memory> has no working std::align.
3177 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
3182 The standard library does not support <unordered_map> and
3183 <unordered_set>.
3190 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
3195 The compiler does not support template aliases.
3202 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_THREAD_LOCAL</span></code>
3207 The compiler does not support the <code class="computeroutput"><span class="keyword">thread_local</span></code>
3215 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TRAILING_RESULT_TYPES</span></code>
3220 The compiler does not support the new function result type specification
3221 syntax (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">foo</span><span class="special">(</span><span class="identifier">T</span><span class="special">)</span>
3222 <span class="special">-></span> <span class="identifier">T</span><span class="special">;</span></code>).
3229 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
3234 The compiler does not support Unicode (<code class="computeroutput"><span class="identifier">u8</span></code>,
3235 <code class="computeroutput"><span class="identifier">u</span></code>, <code class="computeroutput"><span class="identifier">U</span></code>) literals.
3242 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
3247 The compiler does not support the <a href="http://en.wikipedia.org/wiki/C%2B%2B0x#Uniform_initialization" target="_top">C++11
3248 Unified Initialization Syntax</a>.
3255 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_USER_DEFINED_LITERALS</span></code>
3260 The compiler does not support user defined literals.
3267 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
3272 The compiler does not support variadic templates.
3279 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
3284 The compiler does not support variadic macros.
3291 <code class="computeroutput"><span class="identifier">BOOST_NO_LONG_LONG</span></code>
3296 The compiler does not support <code class="computeroutput"><span class="keyword">long</span>
3297 <span class="keyword">long</span></code>.
3304 <div class="section">
3305 <div class="titlepage"><div><div><h3 class="title">
3306 <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers"></a><a name="config_11_for_03"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__11_features_with_c__03_compilers" title="Macros that allow use of C++11 features with C++03 compilers">Macros
3307 that allow use of C++11 features with C++03 compilers</a>
3308 </h3></div></div></div>
3310 The following macros allow use of C++11 features even with compilers that
3311 do not yet provide compliant C++11 support.
3313 <div class="informaltable"><table class="table">
3334 <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>, <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code>
3339 Some compilers don't support the <code class="computeroutput"><span class="keyword">alignas</span></code>
3340 keyword but provide other means to specify alignment (usually,
3341 through compiler-specific attributes). The macro <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
3342 will expand to the <code class="computeroutput"><span class="keyword">alignas</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> keyword if the compiler supports
3343 it or to some compiler-specific attribute to achieve the specified
3344 alignment. If no such compiler-specific attribute is known then
3345 <code class="computeroutput"><span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code> will expand to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_ALIGNMENT</span></code> will be defined.
3346 Unlike native <code class="computeroutput"><span class="keyword">alignas</span></code>,
3347 <code class="computeroutput"><span class="identifier">X</span></code> must always be
3348 a compile-time integer constant. The macro can be used to specify
3349 alignment of types and data:
3351 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">16</span><span class="special">)</span> <span class="identifier">my_data</span>
3352 <span class="special">{</span>
3353 <span class="keyword">char</span> <span class="identifier">c</span><span class="special">[</span><span class="number">16</span><span class="special">];</span>
3354 <span class="special">};</span>
3355 <span class="identifier">BOOST_ALIGNMENT</span><span class="special">(</span><span class="number">8</span><span class="special">)</span> <span class="keyword">int</span> <span class="identifier">arr</span><span class="special">[</span><span class="number">32</span><span class="special">];</span>
3364 <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>
3369 Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3370 This macro expands to nothing on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code> elsewhere. For example,
3371 when defining a constexpr function or constructor replace:
3373 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">constexpr</span> <span class="identifier">tuple</span><span class="special">();</span>
3378 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_CONSTEXPR</span> <span class="identifier">tuple</span><span class="special">();</span>
3387 <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>
3392 Some compilers don't support the use of <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3393 This macro expands to <code class="computeroutput"><span class="keyword">const</span></code>
3394 on those compilers, and <code class="computeroutput"><span class="keyword">constexpr</span></code>
3395 elsewhere. For example, when defining const expr variables replace:
3397 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3402 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3411 <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTEXPR</span></code>
3416 This is a shortcut for <code class="computeroutput"><span class="keyword">static</span>
3417 <span class="identifier">BOOST_CONSTEXPR_OR_CONST</span></code>.
3418 For example, when defining const expr variables replace:
3420 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">static</span> <span class="keyword">constexpr</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3425 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_STATIC_CONSTEXPR</span> <span class="identifier">UIntType</span> <span class="identifier">xor_mask</span> <span class="special">=</span> <span class="identifier">a</span><span class="special">;</span>
3434 <code class="computeroutput"><span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">,</span> <span class="identifier">body</span><span class="special">)</span></code>
3439 This macro is intended to be used within a class definition in
3440 order to declare a default implementation of function <code class="computeroutput"><span class="identifier">fun</span></code>. For the compilers that do
3441 not support C++11 defaulted functions the macro will expand into
3442 an inline function definition with the <code class="computeroutput"><span class="identifier">body</span></code>
3443 implementation. For example:
3445 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3446 <span class="special">{</span>
3447 <span class="identifier">BOOST_DEFAULTED_FUNCTION</span><span class="special">(</span><span class="identifier">my_struct</span><span class="special">(),</span> <span class="special">{})</span>
3448 <span class="special">};</span>
3453 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3454 <span class="special">{</span>
3455 <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">=</span> <span class="keyword">default</span><span class="special">;</span>
3456 <span class="special">};</span>
3461 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">my_struct</span>
3462 <span class="special">{</span>
3463 <span class="identifier">my_struct</span><span class="special">()</span> <span class="special">{}</span>
3464 <span class="special">};</span>
3473 <code class="computeroutput"><span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">fun</span><span class="special">)</span></code>
3478 This macro is intended to be used within a class definition in
3479 order to declare a deleted function <code class="computeroutput"><span class="identifier">fun</span></code>.
3480 For the compilers that do not support C++11 deleted functions the
3481 macro will expand into a private function declaration with no definition.
3482 Since the macro may change the access mode, it is recommended to
3483 use this macro at the end of the class definition. For example:
3485 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3486 <span class="special">{</span>
3487 <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span>
3488 <span class="identifier">BOOST_DELETED_FUNCTION</span><span class="special">(</span><span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&))</span>
3489 <span class="special">};</span>
3494 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3495 <span class="special">{</span>
3496 <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
3497 <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&)</span> <span class="special">=</span> <span class="keyword">delete</span><span class="special">;</span>
3498 <span class="special">};</span>
3503 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">noncopyable</span>
3504 <span class="special">{</span>
3505 <span class="keyword">private</span><span class="special">:</span>
3506 <span class="identifier">noncopyable</span><span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span>
3507 <span class="identifier">noncopyable</span><span class="special">&</span> <span class="keyword">operator</span><span class="special">=</span> <span class="special">(</span><span class="identifier">noncopyable</span> <span class="keyword">const</span><span class="special">&);</span>
3508 <span class="special">};</span>
3518 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOEXCEPT</span>
3519 <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span>
3520 <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
3521 <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span>
3528 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
3529 is defined (i.e. C++03 compliant compilers) these macros are defined
3532 <div class="blockquote"><blockquote class="blockquote">
3535 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span>
3536 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">throw</span><span class="special">()</span>
3537 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span>
3538 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">false</span>
3544 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
3545 is not defined (i.e. C++11 compliant compilers) they are defined
3548 <div class="blockquote"><blockquote class="blockquote">
3551 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT</span> <span class="keyword">noexcept</span>
3552 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_OR_NOTHROW</span> <span class="keyword">noexcept</span>
3553 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_IF</span><span class="special">(</span><span class="identifier">Predicate</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Predicate</span><span class="special">))</span>
3554 <span class="preprocessor">#define</span> <span class="identifier">BOOST_NOEXCEPT_EXPR</span><span class="special">(</span><span class="identifier">Expression</span><span class="special">)</span> <span class="keyword">noexcept</span><span class="special">((</span><span class="identifier">Expression</span><span class="special">))</span>
3564 <code class="computeroutput"><span class="identifier">BOOST_FINAL</span></code>
3569 If <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FINAL</span></code>
3570 is not defined (i.e. C++11 compliant compilers), expands to <code class="computeroutput"><span class="identifier">final</span></code> keyword, otherwise expands
3578 <code class="computeroutput"><span class="identifier">BOOST_MSVC_ENABLE_2012_NOV_CTP</span></code>
3583 For Microsoft Visual C++ 2012, enable the C++11 features supplied
3584 by the November 2012 Community Technology Preview. These features
3585 are not automatically enabled because the CTP is non-supported
3586 alpha code that is not recommended for production use. This macro
3587 must be defined before including any Boost headers, and must be
3588 defined for all translation units in the program, including Boost
3589 library builds. This macro will no longer have any effect once
3590 an official Microsoft release supports the CTP features.
3597 <div class="section">
3598 <div class="titlepage"><div><div><h3 class="title">
3599 <a name="boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__14_features_not_supported" title="Macros that describe C++14 features not supported">Macros
3600 that describe C++14 features not supported</a>
3601 </h3></div></div></div>
3603 The following macros describe features in the 2014 ISO C++ standard, formerly
3604 known as C++0y, that are not yet supported by a particular compiler or library.
3606 <div class="informaltable"><table class="table">
3627 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_AGGREGATE_NSDMI</span></code>
3632 The compiler does not support member initializer for aggregates
3633 as in the following example:
3635 <div class="blockquote"><blockquote class="blockquote">
3638 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">Foo</span>
3639 <span class="special">{</span>
3640 <span class="keyword">int</span> <span class="identifier">x</span><span class="special">,</span> <span class="identifier">y</span> <span class="special">=</span> <span class="number">42</span><span class="special">;</span>
3641 <span class="special">};</span>
3643 <span class="identifier">Foo</span> <span class="identifier">foo</span> <span class="special">=</span> <span class="special">{</span> <span class="number">0</span> <span class="special">};</span>
3653 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_BINARY_LITERALS</span></code>
3658 The compiler does not binary literals (e.g. <code class="computeroutput"><span class="number">0</span><span class="identifier">b1010</span></code>).
3665 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_CONSTEXPR</span></code>
3670 The compiler does not support relaxed <code class="computeroutput"><span class="keyword">constexpr</span></code>.
3677 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DECLTYPE_AUTO</span></code>
3682 The compiler does not support <code class="computeroutput"><span class="keyword">decltype</span><span class="special">(</span><span class="keyword">auto</span><span class="special">)</span></code>.
3689 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_DIGIT_SEPARATORS</span></code>
3694 The compiler does not support digit separators (e.g. <code class="computeroutput"><span class="number">1</span><span class="char">'000'</span><span class="number">000</span></code>).
3701 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_STD_EXCHANGE</span></code>
3706 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">exchange</span><span class="special">()</span></code>.
3713 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_GENERIC_LAMBDAS</span></code>
3718 The compiler does not support generic lambda (e.g. <code class="computeroutput"><span class="special">[](</span><span class="keyword">auto</span>
3719 <span class="identifier">v</span><span class="special">){</span>
3720 <span class="special">}</span></code>).
3727 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_HDR_SHARED_MUTEX</span></code>
3732 The standard library does not provide header <shared_mutex>.
3739 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_INITIALIZED_LAMBDA_CAPTURES</span></code>
3744 The compiler does not support initialized lambda capture (e.g.
3745 <code class="computeroutput"><span class="special">[</span><span class="identifier">foo</span>
3746 <span class="special">=</span> <span class="number">42</span><span class="special">]{</span> <span class="special">}</span></code>).
3753 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_RETURN_TYPE_DEDUCTION</span></code>
3758 The compiler does not support return type deduction for normal
3759 functions (e.g. <code class="computeroutput"><span class="keyword">auto</span> <span class="identifier">f</span><span class="special">()</span>
3760 <span class="special">{</span> <span class="keyword">return</span>
3761 <span class="identifier">val</span><span class="special">;</span>
3762 <span class="special">}</span></code>).
3769 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX14_VARIABLE_TEMPLATES</span></code>
3774 The compiler does not support variable template (e.g. <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="identifier">T</span>
3775 <span class="identifier">kibi</span> <span class="special">=</span>
3776 <span class="identifier">T</span><span class="special">(</span><span class="number">1024</span><span class="special">);</span></code>).
3783 <div class="section">
3784 <div class="titlepage"><div><div><h3 class="title">
3785 <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers"></a><a name="config_14_for_11"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__14_features_with_c__11_or_earlier_compilers" title="Macros that allow use of C++14 features with C++11 or earlier compilers">Macros
3786 that allow use of C++14 features with C++11 or earlier compilers</a>
3787 </h3></div></div></div>
3789 The following macros allow use of C++14 features even with compilers that
3790 do not yet provide compliant C++14 support.
3792 <div class="informaltable"><table class="table">
3812 <code class="computeroutput"><span class="identifier">BOOST_CXX14_CONSTEXPR</span></code>
3817 This macro works similar to <code class="computeroutput"><span class="identifier">BOOST_CONSTEXPR</span></code>,
3818 but expands to <code class="computeroutput"><span class="keyword">constexpr</span></code>
3819 only if the C++14 "relaxed" <code class="computeroutput"><span class="keyword">constexpr</span></code>
3826 <div class="section">
3827 <div class="titlepage"><div><div><h3 class="title">
3828 <a name="boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__17_features_not_supported" title="Macros that describe C++17 features not supported">Macros
3829 that describe C++17 features not supported</a>
3830 </h3></div></div></div>
3832 The following macros describe features in the 2017 ISO C++ standard, formerly
3833 known as C++1z, that are not yet supported by a particular compiler or library.
3835 <div class="informaltable"><table class="table">
3856 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_OPTIONAL</span></code>
3861 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">optional</span><span class="special">></span></code>.
3868 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_VARIANT</span></code>
3873 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">variant</span><span class="special">></span></code>.
3880 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_HDR_STRING_VIEW</span></code>
3885 The compiler does not support the header <code class="computeroutput"><span class="special"><</span><span class="identifier">string_view</span><span class="special">></span></code>.
3892 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_APPLY</span></code>
3897 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">apply</span><span class="special">()</span></code>.
3904 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_STD_INVOKE</span></code>
3909 The compiler does not support <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">invoke</span><span class="special">()</span></code>.
3916 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_ITERATOR_TRAITS</span></code>
3921 The compiler does not support SFINAE-friendly <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">iterator_traits</span></code>.
3928 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_IF_CONSTEXPR</span></code>
3933 The compiler does not support <code class="computeroutput"><span class="keyword">if</span>
3934 <span class="keyword">constexpr</span></code>.
3941 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
3946 The compiler does not support <code class="computeroutput"><span class="keyword">inline</span></code>
3954 <div class="section">
3955 <div class="titlepage"><div><div><h3 class="title">
3956 <a name="boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers"></a><a name="config_17_for_14"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_allow_use_of_c__17_features_with_c__14_or_earlier_compilers" title="Macros that allow use of C++17 features with C++14 or earlier compilers">Macros
3957 that allow use of C++17 features with C++14 or earlier compilers</a>
3958 </h3></div></div></div>
3960 The following macros allow use of C++17 features even with compilers that
3961 do not yet provide compliant C++17 support.
3963 <div class="informaltable"><table class="table">
3983 <code class="computeroutput"><span class="identifier">BOOST_INLINE_VARIABLE</span></code>
3988 This macro expands to <code class="computeroutput"><span class="keyword">inline</span></code>
3989 on compilers that support C++17 inline variables and to nothing
3990 otherwise. Users may need to check for <code class="computeroutput"><span class="identifier">BOOST_NO_CXX17_INLINE_VARIABLES</span></code>
3991 for further adjustments to the code.
3997 <div class="section">
3998 <div class="titlepage"><div><div><h3 class="title">
3999 <a name="boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_features_that_have_been_removed_from_the_standard_" title="Macros that describe features that have been removed from the standard.">Macros
4000 that describe features that have been removed from the standard.</a>
4001 </h3></div></div></div>
4003 The following macros describe features which were required by one version
4004 of the standard, but have been removed by later versions.
4006 <div class="informaltable"><table class="table">
4027 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_RANDOM_SHUFFLE</span></code>
4032 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">random_shuffle</span><span class="special">()</span></code>. It was deprecated in C++11 and
4033 is removed from C++14.
4040 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_PTR</span></code>
4045 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">auto_ptr</span></code>.
4046 It was deprecated in C++11 and is removed from C++14.
4053 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_FUNCTION_BASE</span></code>
4058 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">unary_function</span></code>
4059 and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">binary_function</span></code>. They were deprecated
4060 in C++11 and is removed from C++14.
4067 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX98_BINDERS</span></code>
4072 The standard library no longer supports <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind1st</span></code>,
4073 <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bind2nd</span></code>, <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">ptr_fun</span></code>
4074 and <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">mem_fun</span></code>. They were deprecated
4075 in C++11 and is removed from C++14.
4082 <div class="section">
4083 <div class="titlepage"><div><div><h3 class="title">
4084 <a name="boost_config.boost_macro_reference.boost_helper_macros"></a><a name="config_helpers"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_helper_macros" title="Boost Helper Macros">Boost
4086 </h3></div></div></div>
4088 The following macros are either simple helpers, or macros that provide workarounds
4089 for compiler/standard library defects.
4091 <div class="informaltable"><table class="table">
4112 <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span></code>
4117 This macro is used where a compiler specific workaround is required
4118 that is not otherwise described by one of the other Boost.Config
4119 macros. To use the macro you must first
4121 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">workaround</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
4126 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#if</span> <span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">MACRONAME</span><span class="special">,</span> <span class="identifier">CONDITION</span><span class="special">)</span>
4127 <span class="comment">// workaround code goes here...</span>
4128 <span class="preprocessor">#else</span>
4129 <span class="comment">// Standard conforming code goes here...</span>
4130 <span class="preprocessor">#endif</span>
4133 where <code class="computeroutput"><span class="identifier">MACRONAME</span></code>
4134 is a macro that usually describes the version number to be tested
4135 against, and <code class="computeroutput"><span class="identifier">CONDITION</span></code>
4136 is a comparison operator followed by a value. For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">BOOST_INTEL</span><span class="special">,</span>
4137 <span class="special"><=</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.
4140 The macro can also be used with <code class="computeroutput"><span class="identifier">BOOST_TESTED_AT</span></code>
4141 if all current compiler versions exhibit the issue, but the issue
4142 is expected to be fixed at some later point.
4145 For example <code class="computeroutput"><span class="identifier">BOOST_WORKAROUND</span><span class="special">(</span><span class="identifier">__BORLANDC__</span><span class="special">,</span> <span class="identifier">BOOST_TESTED_AT</span><span class="special">(</span><span class="number">0x590</span><span class="special">))</span></code> would normally evaluate to <code class="computeroutput"><span class="number">1</span></code> for all values of <code class="computeroutput"><span class="identifier">__BORLANDC__</span></code> <span class="emphasis"><em>unless</em></span>
4146 the macro <code class="computeroutput"><span class="identifier">BOOST_DETECT_OUTDATED_WORKAROUNDS</span></code>
4147 is defined, in which case evaluates to <code class="computeroutput"><span class="special">(</span><span class="identifier">__BORLANDC__</span> <span class="special"><=</span>
4148 <span class="number">0x590</span><span class="special">)</span></code>.
4151 <span class="bold"><strong>Note</strong></span>: the ultimate source of documentation
4152 for this macro is in <a href="../../../../../boost/config/workaround.hpp" target="_top">boost/config/workaround.hpp</a>.
4159 <code class="computeroutput"><span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span></code>
4164 Sometimes you have a function name with the same name as a C macro,
4165 for example "min" and "max" member functions,
4166 in which case one can prevent the function being expanded as a
4169 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">min</span> <span class="identifier">BOOST_PREVENT_MACRO_SUBSTITUTION</span><span class="special">(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
4172 The following also works in most, but not all, contexts:
4174 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="special">(</span><span class="identifier">someclass</span><span class="special">.</span><span class="identifier">max</span><span class="special">)(</span><span class="identifier">arg1</span><span class="special">,</span> <span class="identifier">arg2</span><span class="special">);</span>
4183 <code class="computeroutput"><span class="identifier">BOOST_DEDUCED_TYPENAME</span></code>
4188 Some compilers don't support the use of typename for dependent
4189 types in deduced contexts. This macro expands to nothing on those
4190 compilers, and typename elsewhere. For example, replace: <code class="computeroutput"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span> <span class="keyword">void</span>
4191 <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span>
4192 <span class="keyword">typename</span> <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code> with: <code class="computeroutput"><span class="keyword">template</span>
4193 <span class="special"><</span><span class="keyword">class</span>
4194 <span class="identifier">T</span><span class="special">></span>
4195 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">,</span> <span class="identifier">BOOST_DEDUCED_TYPENAME</span>
4196 <span class="identifier">T</span><span class="special">::</span><span class="identifier">type</span><span class="special">);</span></code>
4203 <code class="computeroutput"><span class="identifier">BOOST_HASH_MAP_HEADER</span></code>
4208 The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_map</span></code>
4209 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
4217 <code class="computeroutput"><span class="identifier">BOOST_HASH_SET_HEADER</span></code>
4222 The header to include to get the SGI <code class="computeroutput"><span class="identifier">hash_set</span></code>
4223 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_HASH</span></code>
4231 <code class="computeroutput"><span class="identifier">BOOST_SLIST_HEADER</span></code>
4236 The header to include to get the SGI <code class="computeroutput"><span class="identifier">slist</span></code>
4237 class. This macro is only available if <code class="computeroutput"><span class="identifier">BOOST_HAS_SLIST</span></code>
4245 <code class="computeroutput"><span class="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
4250 The namespace used for std library extensions (hashtable classes
4258 <code class="computeroutput"><span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">assignment</span><span class="special">)</span></code>
4263 On compilers which don't allow in-class initialization of static
4264 integral constant members, we must use enums as a workaround if
4265 we want the constants to be available at compile-time. This macro
4266 gives us a convenient way to declare such constants. For example
4269 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
4270 <span class="keyword">static</span> <span class="keyword">const</span> <span class="keyword">int</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">;</span>
4271 <span class="special">};</span>
4276 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">foo</span><span class="special">{</span>
4277 <span class="identifier">BOOST_STATIC_CONSTANT</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">value</span> <span class="special">=</span> <span class="number">2</span><span class="special">);</span>
4278 <span class="special">};</span>
4287 <code class="computeroutput"><span class="identifier">BOOST_UNREACHABLE_RETURN</span><span class="special">(</span><span class="identifier">result</span><span class="special">)</span></code>
4292 Normally evaluates to nothing, but evaluates to return x; if the
4293 compiler requires a return, even when it can never be reached.
4300 <code class="computeroutput"><span class="identifier">BOOST_FALLTHROUGH</span></code>
4305 The BOOST_FALLTHROUGH macro can be used to annotate implicit fall-through
4306 between switch labels:
4308 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">switch</span> <span class="special">(</span><span class="identifier">x</span><span class="special">)</span> <span class="special">{</span>
4309 <span class="keyword">case</span> <span class="number">40</span><span class="special">:</span>
4310 <span class="keyword">case</span> <span class="number">41</span><span class="special">:</span>
4311 <span class="keyword">if</span> <span class="special">(</span><span class="identifier">truth_is_out_there</span><span class="special">)</span> <span class="special">{</span>
4312 <span class="special">++</span><span class="identifier">x</span><span class="special">;</span>
4313 <span class="identifier">BOOST_FALLTHROUGH</span><span class="special">;</span> <span class="comment">// Use instead of/along with annotations in </span>
4314 <span class="comment">// comments. </span>
4315 <span class="special">}</span> <span class="keyword">else</span> <span class="special">{</span>
4316 <span class="keyword">return</span> <span class="identifier">x</span><span class="special">;</span>
4317 <span class="special">}</span>
4318 <span class="keyword">case</span> <span class="number">42</span><span class="special">:</span>
4319 <span class="special">...</span>
4322 As shown in the example above, the BOOST_FALLTHROUGH macro should
4323 be followed by a semicolon. It is designed to mimic control-flow
4324 statements like 'break;', so it can be placed in most places where
4325 'break;' can, but only if there are no statements on the execution
4326 path between it and the next switch label.
4329 When compiled with Clang >3.2 in C++11 mode, the BOOST_FALLTHROUGH
4330 macro is expanded to <code class="computeroutput"><span class="special">[[</span><span class="identifier">clang</span><span class="special">::</span><span class="identifier">fallthrough</span><span class="special">]]</span></code>
4331 attribute, which is analysed when performing switch labels fall-through
4332 diagnostic ('-Wimplicit-fallthrough'). See clang <a href="http://clang.llvm.org/docs/LanguageExtensions.html#clang__fallthrough" target="_top">documentation
4333 on language extensions for details.</a>
4336 When used with unsupported compilers, the BOOST_FALLTHROUGH macro
4337 has no effect on diagnostics.
4340 In either case this macro has no effect on runtime behavior and
4341 performance of code.
4348 <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
4351 <code class="computeroutput"><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
4354 <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">)</span></code>
4357 <code class="computeroutput"><span class="identifier">BOOST_APPEND_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="identifier">t</span><span class="special">,</span><span class="identifier">v</span><span class="special">)</span></code>
4362 Some compilers silently "fold" different function template
4363 instantiations if some of the template parameters don't appear
4364 in the function parameter list. For instance:
4366 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">iostream</span><span class="special">></span>
4367 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">ostream</span><span class="special">></span>
4368 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">typeinfo</span><span class="special">></span>
4370 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span>
4371 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="identifier">n</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span>
4373 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
4374 <span class="keyword">void</span> <span class="identifier">g</span><span class="special">()</span> <span class="special">{</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special"><<</span> <span class="keyword">typeid</span><span class="special">(</span><span class="identifier">T</span><span class="special">).</span><span class="identifier">name</span><span class="special">()</span> <span class="special"><<</span> <span class="char">' '</span><span class="special">;</span> <span class="special">}</span>
4376 <span class="keyword">int</span> <span class="identifier">main</span><span class="special">()</span> <span class="special">{</span>
4377 <span class="identifier">f</span><span class="special"><</span><span class="number">1</span><span class="special">>();</span>
4378 <span class="identifier">f</span><span class="special"><</span><span class="number">2</span><span class="special">>();</span>
4380 <span class="identifier">g</span><span class="special"><</span><span class="keyword">int</span><span class="special">>();</span>
4381 <span class="identifier">g</span><span class="special"><</span><span class="keyword">double</span><span class="special">>();</span>
4382 <span class="special">}</span>
4385 incorrectly outputs <code class="literal">2 2 double double</code> on VC++
4386 6. These macros, to be used in the function parameter list, fix
4387 the problem without effects on the calling syntax. For instance,
4388 in the case above write:
4390 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span> <span class="special"><</span><span class="keyword">int</span> <span class="identifier">n</span><span class="special">></span>
4391 <span class="keyword">void</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_NON_TYPE</span><span class="special">(</span><span class="keyword">int</span><span class="special">,</span> <span class="identifier">n</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
4393 <span class="keyword">template</span> <span class="special"><</span><span class="keyword">typename</span> <span class="identifier">T</span><span class="special">></span>
4394 <span class="keyword">void</span> <span class="identifier">g</span><span class="special">(</span><span class="identifier">BOOST_EXPLICIT_TEMPLATE_TYPE</span><span class="special">(</span><span class="identifier">T</span><span class="special">))</span> <span class="special">{</span> <span class="special">...</span> <span class="special">}</span>
4397 Beware that they can declare (for affected compilers) a dummy defaulted
4401 <span class="bold"><strong>a)</strong></span> should be always invoked <span class="bold"><strong>at the end</strong></span> of the parameter list
4404 <span class="bold"><strong>b)</strong></span> can't be used if your function
4405 template is multiply declared.
4408 Furthermore, in order to add any needed comma separator, an <code class="computeroutput"><span class="identifier">APPEND_</span><span class="special">*</span></code>
4409 version must be used when the macro invocation appears after a
4410 normal parameter declaration or after the invocation of another
4411 macro of this same group.
4418 <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
4423 When the standard library does not have a conforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span></code> there are various workarounds
4424 available, but they differ from library to library. This macro
4425 provides a consistent way to access a locale's facets. For example,
4426 replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">use_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code>
4427 with: <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
4428 prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_USE_FACET</span></code>.
4435 <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">)</span></code>
4440 When the standard library does not have a comforming <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span></code> there are various workarounds
4441 available, but they differ from library to library. This macro
4442 provides a consistent way to check a locale's facets. For example,
4443 replace: <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">has_facet</span><span class="special"><</span><span class="identifier">Type</span><span class="special">>(</span><span class="identifier">loc</span><span class="special">);</span></code>
4444 with: <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span><span class="special">(</span><span class="identifier">Type</span><span class="special">,</span> <span class="identifier">loc</span><span class="special">);</span></code> Note do not add a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span></code>
4445 prefix to the front of <code class="computeroutput"><span class="identifier">BOOST_HAS_FACET</span></code>.
4452 <code class="computeroutput"><span class="identifier">BOOST_NESTED_TEMPLATE</span></code>
4457 Member templates are supported by some compilers even though they
4458 can't use the <code class="computeroutput"><span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
4459 <span class="identifier">member</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span></code>
4460 syntax, as a workaround replace: <code class="computeroutput"><span class="keyword">typedef</span>
4461 <span class="keyword">typename</span> <span class="identifier">A</span><span class="special">::</span><span class="keyword">template</span>
4462 <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span>
4463 <span class="identifier">binder</span><span class="special">;</span></code>
4464 with: <code class="computeroutput"><span class="keyword">typedef</span> <span class="keyword">typename</span>
4465 <span class="identifier">A</span><span class="special">::</span><span class="identifier">BOOST_NESTED_TEMPLATE</span> <span class="identifier">rebind</span><span class="special"><</span><span class="identifier">U</span><span class="special">></span> <span class="identifier">binder</span><span class="special">;</span></code>
4472 <code class="computeroutput"><span class="identifier">BOOST_STRINGIZE</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4477 Converts the parameter <code class="computeroutput"><span class="identifier">X</span></code>
4478 to a string after macro replacement on <code class="computeroutput"><span class="identifier">X</span></code>
4486 <code class="computeroutput"><span class="identifier">BOOST_JOIN</span><span class="special">(</span><span class="identifier">X</span><span class="special">,</span><span class="identifier">Y</span><span class="special">)</span></code>
4491 This piece of macro magic joins the two arguments together, even
4492 when one of the arguments is itself a macro (see 16.3.1 in C++
4493 standard). This is normally used to create a mangled name in combination
4494 with a predefined macro such a __LINE__.
4501 <code class="computeroutput"><span class="identifier">BOOST_RESTRICT</span></code>
4506 This macro can be used in place of the compiler specific variant
4507 of the C99 <code class="computeroutput"><span class="identifier">restrict</span></code>
4508 keyword to notify the compiler that, for the lifetime of the qualified
4509 pointer variable, only it and its derivative value will be used
4510 to gain access to the object it references. This limits the effect
4511 of pointer aliasing and helps the optimizers in generating better
4512 code. However, i this condition is violated, undefined behavior
4518 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">void</span> <span class="identifier">perform_computation</span><span class="special">(</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">in</span><span class="special">,</span> <span class="keyword">float</span><span class="special">*</span> <span class="identifier">BOOST_RESTRICT</span> <span class="identifier">out</span> <span class="special">)</span>
4519 <span class="special">{</span>
4520 <span class="special">*</span><span class="identifier">out</span> <span class="special">=</span> <span class="special">*</span><span class="identifier">in</span> <span class="special">*</span> <span class="number">0.5f</span><span class="special">;</span>
4521 <span class="special">}</span>
4530 <code class="computeroutput"><span class="identifier">BOOST_FORCEINLINE</span></code>
4535 This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
4536 keyword to instruct the compiler that the function should always
4537 be inlined. Overuse of this macro can lead to significant bloat,
4538 while good use can increase performance in certain cases, such
4539 as computation-intensive code built through generative programming
4545 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">template</span><span class="special"><</span><span class="keyword">class</span> <span class="identifier">T</span><span class="special">></span>
4546 <span class="identifier">BOOST_FORCEINLINE</span> <span class="identifier">T</span><span class="special">&</span> <span class="identifier">f</span><span class="special">(</span><span class="identifier">T</span><span class="special">&</span> <span class="identifier">t</span><span class="special">)</span>
4547 <span class="special">{</span>
4548 <span class="keyword">return</span> <span class="identifier">t</span><span class="special">;</span>
4549 <span class="special">}</span>
4554 Note that use of this macro can lead to cryptic error messages
4555 with some compilers. Consider defining it to <code class="computeroutput"><span class="keyword">inline</span></code>
4556 before including the Boost.Config header in order to be able to
4557 debug errors more easily.
4564 <code class="computeroutput"><span class="identifier">BOOST_NOINLINE</span></code>
4569 This macro can be used in place of the <code class="computeroutput"><span class="keyword">inline</span></code>
4570 keyword to instruct the compiler that the function should never
4571 be inlined. One should typically use this macro to mark functions
4572 that are unlikely to be called, such as error handling routines.
4577 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NOINLINE</span> <span class="keyword">void</span> <span class="identifier">handle_error</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
4578 <span class="special">{</span>
4579 <span class="comment">// ...</span>
4580 <span class="special">}</span>
4589 <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
4594 This macro can be used before the function declaration or definition
4595 to instruct the compiler that the function does not return normally
4596 (i.e. with a <code class="computeroutput"><span class="keyword">return</span></code>
4597 statement or by leaving the function scope, if the function return
4598 type is <code class="computeroutput"><span class="keyword">void</span></code>). The
4599 macro can be used to mark functions that always throw exceptions
4600 or terminate the application. Compilers that support this markup
4601 may use this information to specifically organize the code surrounding
4602 calls to this function and suppress warnings about missing <code class="computeroutput"><span class="keyword">return</span></code> statements in the functions
4603 enclosing such calls.
4608 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="identifier">BOOST_NORETURN</span> <span class="keyword">void</span> <span class="identifier">on_error_occurred</span><span class="special">(</span><span class="keyword">const</span> <span class="keyword">char</span><span class="special">*</span> <span class="identifier">descr</span><span class="special">)</span>
4609 <span class="special">{</span>
4610 <span class="keyword">throw</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span><span class="special">(</span><span class="identifier">descr</span><span class="special">);</span>
4611 <span class="special">}</span>
4616 If the compiler does not support this markup, <code class="computeroutput"><span class="identifier">BOOST_NORETURN</span></code>
4617 is defined empty and an additional macro <code class="computeroutput"><span class="identifier">BOOST_NO_NORETURN</span></code>
4625 <code class="computeroutput"><span class="identifier">BOOST_LIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4628 <code class="computeroutput"><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">X</span><span class="special">)</span></code>
4633 These macros communicate to the compiler that the conditional expression
4634 <code class="computeroutput"><span class="identifier">X</span></code> is likely or
4635 unlikely to yield a positive result. The expression should result
4636 in a boolean value. The result of the macro is an integer or boolean
4637 value equivalent to the result of <code class="computeroutput"><span class="identifier">X</span></code>.
4640 The macros are intended to be used in branching statements. The
4641 additional hint they provide can be used by the compiler to arrange
4642 the compiled code of the branches more effectively.
4647 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">if</span> <span class="special">(</span><span class="identifier">BOOST_UNLIKELY</span><span class="special">(</span><span class="identifier">ptr</span> <span class="special">==</span> <span class="identifier">NULL</span><span class="special">))</span>
4648 <span class="identifier">handle_error</span><span class="special">(</span><span class="string">"ptr is NULL"</span><span class="special">);</span>
4657 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_UNUSED</span></code>
4662 Expands to <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">unused</span><span class="special">))</span></code> when this is available - can
4663 be used to disable compiler warnings relating to unused types or
4671 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NODISCARD</span></code>
4676 Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">nodiscard</span><span class="special">]]</span></code> when this is available - can
4677 be used to create a warning when a type or variable is unused.
4684 <code class="computeroutput"><span class="identifier">BOOST_ATTRIBUTE_NO_UNIQUE_ADDRESS</span></code>
4689 Expands to <code class="computeroutput"><span class="special">[[</span><span class="identifier">no_unique_address</span><span class="special">]]</span></code> when this is available - can
4690 be used to indicate that a non-static data member need not have
4691 a unique address (for example empty classes).
4698 <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>,
4699 <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4704 <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
4705 expands to a type attribute that can be used to mark types that
4706 may alias other types. Pointers or references to such marked types
4707 can be used to access objects of other types. If the compiler supports
4708 this feature <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4709 is not defined. Otherwise <code class="computeroutput"><span class="identifier">BOOST_MAY_ALIAS</span></code>
4710 expands to nothing and <code class="computeroutput"><span class="identifier">BOOST_NO_MAY_ALIAS</span></code>
4716 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">struct</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_struct</span><span class="special">;</span>
4717 <span class="keyword">typedef</span> <span class="keyword">unsigned</span> <span class="keyword">int</span> <span class="identifier">BOOST_MAY_ALIAS</span> <span class="identifier">aliasing_uint</span><span class="special">;</span>
4726 <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>
4731 Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">pragma_message</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>,
4732 this macro expands to the equivalent of <code class="computeroutput"><span class="preprocessor">#pragma</span>
4733 <span class="identifier">message</span><span class="special">(</span><span class="identifier">M</span><span class="special">)</span></code>.
4734 <code class="computeroutput"><span class="identifier">M</span></code> must be a string
4738 Example: <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span><span class="special">(</span><span class="string">"This header
4739 is deprecated."</span><span class="special">)</span></code>
4742 The messages issued by <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>
4743 can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_DISABLE_PRAGMA_MESSAGE</span></code>.
4750 <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="identifier">A</span><span class="special">)</span></code>
4755 Defined in header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">header_deprecated</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>,
4756 this macro issues the message "This header is deprecated.
4757 Use <code class="computeroutput"><span class="identifier">A</span></code> instead."
4758 via <code class="computeroutput"><span class="identifier">BOOST_PRAGMA_MESSAGE</span></code>.
4759 <code class="computeroutput"><span class="identifier">A</span></code> must be a string
4763 Example: <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span><span class="special">(</span><span class="string">"<boost/config/workaround.hpp>"</span><span class="special">)</span></code>
4766 The messages issued by <code class="computeroutput"><span class="identifier">BOOST_HEADER_DEPRECATED</span></code>
4767 can be suppressed by defining the macro <code class="computeroutput"><span class="identifier">BOOST_ALLOW_DEPRECATED_HEADERS</span></code>.
4774 <div class="section">
4775 <div class="titlepage"><div><div><h3 class="title">
4776 <a name="boost_config.boost_macro_reference.boost_informational_macros"></a><a name="config_info_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_informational_macros" title="Boost Informational Macros">Boost
4777 Informational Macros</a>
4778 </h3></div></div></div>
4780 The following macros describe boost features; these are, generally speaking
4781 the only boost macros that should be tested in user code.
4783 <div class="informaltable"><table class="table">
4810 <code class="computeroutput"><span class="identifier">BOOST_VERSION</span></code>
4815 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">version</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4820 Describes the boost version number in XYYYZZ format such that:
4821 <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span>
4822 <span class="special">%</span> <span class="number">100</span><span class="special">)</span></code> is the sub-minor version, <code class="computeroutput"><span class="special">((</span><span class="identifier">BOOST_VERSION</span>
4823 <span class="special">/</span> <span class="number">100</span><span class="special">)</span> <span class="special">%</span> <span class="number">1000</span><span class="special">)</span></code>
4824 is the minor version, and <code class="computeroutput"><span class="special">(</span><span class="identifier">BOOST_VERSION</span> <span class="special">/</span>
4825 <span class="number">100000</span><span class="special">)</span></code>
4826 is the major version.
4833 <code class="computeroutput"><span class="identifier">BOOST_NO_INT64_T</span></code>
4838 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
4843 Defined if there are no 64-bit integral types: <code class="computeroutput"><span class="identifier">int64_t</span></code>,
4844 <code class="computeroutput"><span class="identifier">uint64_t</span></code> etc.
4851 <code class="computeroutput"><span class="identifier">BOOST_NO_INTEGRAL_INT64_T</span></code>
4856 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code> <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">stdint</span><span class="special">.</span><span class="identifier">h</span><span class="special">></span></code>
4861 Defined if <code class="computeroutput"><span class="identifier">int64_t</span></code>
4862 as defined by <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">cstdint</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4863 is not usable in integral constant expressions.
4870 <code class="computeroutput"><span class="identifier">BOOST_MSVC</span></code>
4875 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4880 Defined if the compiler is really Microsoft Visual C++, as opposed
4881 to one of the many other compilers that also define <code class="computeroutput"><span class="identifier">_MSC_VER</span></code>. Has the same value
4889 <code class="computeroutput"><span class="identifier">BOOST_MSVC_FULL_VER</span></code>
4894 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4899 Defined to a normalised 9 digit version of _MSC_FULL_VER (which
4900 sometimes only has 8 digits), the macro has the form VVMMPPPPP
4901 where VV is the major version number, MM is the minor version number,
4902 and PPPPP is the compiler build number.
4909 <code class="computeroutput"><span class="identifier">BOOST_GCC</span></code>
4914 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4919 Defined if the compiler is really GCC, as opposed to one of the
4920 many other compilers that also define <code class="computeroutput"><span class="identifier">__GNUC__</span></code>.
4921 Has the value: <code class="computeroutput"><span class="identifier">__GNUC__</span>
4922 <span class="special">*</span> <span class="number">10000</span>
4923 <span class="special">+</span> <span class="identifier">__GNUC_MINOR__</span>
4924 <span class="special">*</span> <span class="number">100</span>
4925 <span class="special">+</span> <span class="identifier">__GNUC_PATCHLEVEL__</span></code>.
4932 <code class="computeroutput"><span class="identifier">BOOST_INTEL</span></code>
4937 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4942 Defined if the compiler is an Intel compiler, takes the same value
4943 as the compiler version macro.
4950 <code class="computeroutput"><span class="identifier">BOOST_CLANG</span></code>
4955 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4960 Defined to 1 if the compiler is the Clang compiler.
4967 <code class="computeroutput"><span class="identifier">BOOST_WINDOWS</span></code>
4972 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4977 Defined if the Windows platform API is available.
4984 <code class="computeroutput"><span class="identifier">BOOST_DINKUMWARE_STDLIB</span></code>
4989 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
4994 Defined if the dinkumware standard library is in use, takes the
4995 same value as the Dinkumware library version macro <code class="computeroutput"><span class="identifier">_CPPLIB_VER</span></code> if defined, otherwise
5003 <code class="computeroutput"><span class="identifier">BOOST_NO_WREGEX</span></code>
5008 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">regex</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
5013 Defined if the regex library does not support wide character regular
5021 <code class="computeroutput"><span class="identifier">BOOST_COMPILER</span></code>
5026 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
5031 Defined as a string describing the name and version number of the
5032 compiler in use. Mainly for debugging the configuration.
5039 <code class="computeroutput"><span class="identifier">BOOST_STDLIB</span></code>
5044 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
5049 Defined as a string describing the name and version number of the
5050 standard library in use. Mainly for debugging the configuration.
5057 <code class="computeroutput"><span class="identifier">BOOST_PLATFORM</span></code>
5062 <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
5067 Defined as a string describing the name of the platform. Mainly
5068 for debugging the configuration.
5075 <div class="section">
5076 <div class="titlepage"><div><div><h3 class="title">
5077 <a name="boost_config.boost_macro_reference.boost_deprecated_macros"></a><a name="deprecated_macros"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.boost_deprecated_macros" title="Boost Deprecated Macros">Boost
5078 Deprecated Macros</a>
5079 </h3></div></div></div>
5081 The following have been deprecated; please use the replacements instead.
5082 They will be removed in a future version of boost.
5084 <div class="informaltable"><table class="table">
5117 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_ARRAY</span></code>
5122 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_ARRAY</span></code>
5136 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CHRONO</span></code>
5141 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CHRONO</span></code>
5155 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CODECVT</span></code>
5160 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CODECVT</span></code>
5174 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_CONDITION_VARIABLE</span></code>
5179 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_CONDITION_VARIABLE</span></code>
5193 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FORWARD_LIST</span></code>
5198 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FORWARD_LIST</span></code>
5212 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_FUTURE</span></code>
5217 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_FUTURE</span></code>
5231 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_INITIALIZER_LIST</span></code>
5236 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
5250 <code class="computeroutput"><span class="identifier">BOOST_NO_INITIALIZER_LISTS</span></code>
5255 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_INITIALIZER_LIST</span></code>
5269 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_MUTEX</span></code>
5274 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_MUTEX</span></code>
5288 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RANDOM</span></code>
5293 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RANDOM</span></code>
5307 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_RATIO</span></code>
5312 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_RATIO</span></code>
5326 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_REGEX</span></code>
5331 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_REGEX</span></code>
5345 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_SYSTEM_ERROR</span></code>
5350 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_SYSTEM_ERROR</span></code>
5364 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_THREAD</span></code>
5369 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_THREAD</span></code>
5383 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TUPLE</span></code>
5388 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TUPLE</span></code>
5402 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPE_TRAITS</span></code>
5407 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPE_TRAITS</span></code>
5421 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_TYPEINDEX</span></code>
5426 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_TYPEINDEX</span></code>
5440 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_SET</span></code>
5445 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
5459 <code class="computeroutput"><span class="identifier">BOOST_NO_0X_HDR_UNORDERED_MAP</span></code>
5464 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_MAP</span></code>
5478 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
5483 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_HDR_UNORDERED_SET</span></code>
5507 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_DECLARATIONS</span></code>
5512 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_DECLARATIONS</span></code>
5526 <code class="computeroutput"><span class="identifier">BOOST_NO_AUTO_MULTIDECLARATIONS</span></code>
5531 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_AUTO_MULTIDECLARATIONS</span></code>
5545 <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR16_T</span></code>
5550 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
5564 <code class="computeroutput"><span class="identifier">BOOST_NO_CHAR32_T</span></code>
5569 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
5583 <code class="computeroutput"><span class="identifier">BOOST_NO_TEMPLATE_ALIASES</span></code>
5588 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_TEMPLATE_ALIASES</span></code>
5602 <code class="computeroutput"><span class="identifier">BOOST_NO_CONSTEXPR</span></code>
5607 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CONSTEXPR</span></code>
5621 <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE</span></code>
5626 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE</span></code>
5640 <code class="computeroutput"><span class="identifier">BOOST_NO_DECLTYPE_N3276</span></code>
5645 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DECLTYPE_N3276</span></code>
5659 <code class="computeroutput"><span class="identifier">BOOST_NO_DEFAULTED_FUNCTIONS</span></code>
5664 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DEFAULTED_FUNCTIONS</span></code>
5678 <code class="computeroutput"><span class="identifier">BOOST_NO_DELETED_FUNCTIONS</span></code>
5683 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_DELETED_FUNCTIONS</span></code>
5697 <code class="computeroutput"><span class="identifier">BOOST_NO_EXPLICIT_CONVERSION_OPERATORS</span></code>
5702 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXPLICIT_CONVERSION_OPERATORS</span></code>
5716 <code class="computeroutput"><span class="identifier">BOOST_NO_EXTERN_TEMPLATE</span></code>
5721 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_EXTERN_TEMPLATE</span></code>
5735 <code class="computeroutput"><span class="identifier">BOOST_NO_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
5740 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_FUNCTION_TEMPLATE_DEFAULT_ARGS</span></code>
5754 <code class="computeroutput"><span class="identifier">BOOST_NO_LAMBDAS</span></code>
5759 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LAMBDAS</span></code>
5773 <code class="computeroutput"><span class="identifier">BOOST_NO_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
5778 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_LOCAL_CLASS_TEMPLATE_PARAMETERS</span></code>
5792 <code class="computeroutput"><span class="identifier">BOOST_NO_NOEXCEPT</span></code>
5797 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NOEXCEPT</span></code>
5811 <code class="computeroutput"><span class="identifier">BOOST_NO_NULLPTR</span></code>
5816 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NULLPTR</span></code>
5830 <code class="computeroutput"><span class="identifier">BOOST_NO_RAW_LITERALS</span></code>
5835 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RAW_LITERALS</span></code>
5849 <code class="computeroutput"><span class="identifier">BOOST_NO_RVALUE_REFERENCES</span></code>
5854 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
5868 <code class="computeroutput"><span class="identifier">BOOST_NO_SCOPED_ENUMS</span></code>
5873 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_SCOPED_ENUMS</span></code>
5887 <code class="computeroutput"><span class="identifier">BOOST_NO_STATIC_ASSERT</span></code>
5892 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
5906 <code class="computeroutput"><span class="identifier">BOOST_NO_STD_UNORDERED</span></code>
5911 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STD_UNORDERED</span></code>
5925 <code class="computeroutput"><span class="identifier">BOOST_NO_UNICODE_LITERALS</span></code>
5930 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNICODE_LITERALS</span></code>
5944 <code class="computeroutput"><span class="identifier">BOOST_NO_UNIFIED_INITIALIZATION_SYNTAX</span></code>
5949 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_UNIFIED_INITIALIZATION_SYNTAX</span></code>
5963 <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_TEMPLATES</span></code>
5968 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
5982 <code class="computeroutput"><span class="identifier">BOOST_NO_VARIADIC_MACROS</span></code>
5987 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_MACROS</span></code>
6001 <code class="computeroutput"><span class="identifier">BOOST_NO_NUMERIC_LIMITS_LOWEST</span></code>
6006 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_NUMERIC_LIMITS</span></code>
6030 <code class="computeroutput"><span class="identifier">BOOST_HAS_STATIC_ASSERT</span></code>
6035 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_STATIC_ASSERT</span></code>
6050 <code class="computeroutput"><span class="identifier">BOOST_HAS_VARIADIC_TMPL</span></code>
6055 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_VARIADIC_TEMPLATES</span></code>
6070 <code class="computeroutput"><span class="identifier">BOOST_HAS_RVALUE_REFS</span></code>
6075 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_RVALUE_REFERENCES</span></code>
6090 <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR16_T</span></code>
6095 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR16_T</span></code>
6110 <code class="computeroutput"><span class="identifier">BOOST_HAS_CHAR32_T</span></code>
6115 <code class="computeroutput"><span class="identifier">BOOST_NO_CXX11_CHAR32_T</span></code>
6130 <div class="section">
6131 <div class="titlepage"><div><div><h3 class="title">
6132 <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code" title="Macros for libraries with separate source code">Macros
6133 for libraries with separate source code</a>
6134 </h3></div></div></div>
6135 <div class="toc"><dl class="toc">
6136 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility">Macros
6137 controlling shared library symbol visibility</a></span></dt>
6138 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing">ABI
6139 Fixing</a></span></dt>
6140 <dt><span class="section"><a href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection">Automatic
6141 library selection</a></span></dt>
6144 The following macros and helper headers are of use to authors whose libraries
6145 include separate source code, and are intended to address several issues:
6147 <div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
6148 <li class="listitem">
6149 Controlling shared library symbol visibility
6151 <li class="listitem">
6152 Fixing the ABI of the compiled library
6154 <li class="listitem">
6155 Selecting which compiled library to link against based upon the compilers
6160 See <a href="http://www.boost.org/development/separate_compilation.html" target="_top">Guidelines
6161 for Authors of Boost Libraries Containing Separate Source</a>
6163 <div class="section">
6164 <div class="titlepage"><div><div><h4 class="title">
6165 <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.macros_controlling_shared_library_symbol_visibility" title="Macros controlling shared library symbol visibility">Macros
6166 controlling shared library symbol visibility</a>
6167 </h4></div></div></div>
6169 Some compilers support C++ extensions that control which symbols will be
6170 exported from shared libraries such as dynamic shared objects (DSO's) on
6171 Unix-like systems or dynamic-link libraries (DLL's) on Windows.
6174 The Microsoft VC++ compiler has long supplied <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> extensions for this purpose, as do virtually
6175 all other compilers targeting the Windows platform.
6178 Modern versions of the GNU GCC compiler provide the <code class="computeroutput"><span class="identifier">__attribute__</span><span class="special">((</span><span class="identifier">visibility</span><span class="special">(</span><span class="string">"default"</span><span class="special">)))</span></code> extension to indicate that a symbol
6179 should be exported. All other symbols may be hidden by using the <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">hidden</span></code>
6180 or <code class="computeroutput"><span class="special">-</span><span class="identifier">fvisibility</span><span class="special">-</span><span class="identifier">ms</span><span class="special">-</span><span class="identifier">compat</span></code> compiler switches.
6183 Boost supplies several macros to make it easier to manage symbol visibility
6184 in a way that is portable between compilers and operating systems.
6186 <div class="informaltable"><table class="table">
6207 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_EXPORT</span></code>
6212 Defines the syntax of a C++ language extension that indicates
6213 a symbol is to be exported from a shared library. If the compiler
6214 has no such extension, the macro is defined with no replacement
6222 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_IMPORT</span></code>
6227 Defines the syntax of a C++ language extension that indicates
6228 a symbol is to be imported from a shared library. If the compiler
6229 has no such extension, the macro is defined with no replacement
6237 <code class="computeroutput"><span class="identifier">BOOST_SYMBOL_VISIBLE</span></code>
6242 Defines the syntax of a C++ language extension that indicates
6243 a symbol is to be globally visible. If the compiler has no such
6244 extension, the macro is defined with no replacement text. Needed
6245 for classes that are not otherwise exported, but are used by
6246 RTTI. Examples include class for objects that will be thrown
6247 as exceptions or used in dynamic_casts, across shared library
6248 boundaries. For example, a header-only exception class might
6251 <pre xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="table-programlisting"><span class="keyword">class</span> <span class="identifier">BOOST_SYMBOL_VISIBLE</span> <span class="identifier">my_exception</span> <span class="special">:</span> <span class="keyword">public</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">runtime_error</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
6254 Without BOOST_SYMBOL_VISIBLE, it would be impossible to catch
6255 my_exception thrown from a shared library compiled by GCC with
6256 the -fvisibility=hidden option.
6263 <code class="computeroutput"><span class="identifier">BOOST_HAS_DECLSPEC</span></code>
6268 The compiler has C++ extensions <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllexport</span><span class="special">)</span></code> and <code class="computeroutput"><span class="identifier">__declspec</span><span class="special">(</span><span class="identifier">dllimport</span><span class="special">)</span></code> to control export/import of
6269 symbols from shared libraries. <span class="emphasis"><em>Deprecated. This macro
6270 is no longer necessary since BOOST_SYMBOL_EXPORT and BOOST_SYMBOL_IMPORT
6271 are now supplied. It is provided to support legacy code.</em></span>
6281 <span class="bold"><strong>boost/foo/config.hpp</strong></span>
6283 <pre class="programlisting"><span class="special">...</span>
6284 <span class="preprocessor">#if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_DYN_LINK</span><span class="special">)</span> <span class="special">||</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_DYN_LINK</span><span class="special">)</span>
6285 <span class="preprocessor"># if</span> <span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_FOO_SOURCE</span><span class="special">)</span>
6286 <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_EXPORT</span>
6287 <span class="preprocessor"># else</span>
6288 <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">BOOST_SYMBOL_IMPORT</span>
6289 <span class="preprocessor"># endif</span>
6290 <span class="preprocessor">#else</span>
6291 <span class="preprocessor"># define</span> <span class="identifier">BOOST_FOO_DECL</span>
6292 <span class="preprocessor">#endif</span>
6293 <span class="special">...</span>
6296 <span class="bold"><strong>boost/foo/foo.hpp</strong></span>
6298 <pre class="programlisting"><span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">config</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
6299 <span class="special">...</span>
6300 <span class="keyword">class</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">bar</span> <span class="special">{</span> <span class="special">...</span> <span class="special">};</span>
6301 <span class="special">...</span>
6302 <span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">();</span>
6303 <span class="special">...</span>
6306 <span class="bold"><strong>boost/libs/foo/src/foo.cpp</strong></span>
6308 <pre class="programlisting"><span class="preprocessor">#define</span> <span class="identifier">BOOST_FOO_SOURCE</span>
6309 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">foo</span><span class="special">/</span><span class="identifier">foo</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
6310 <span class="special">...</span>
6311 <span class="keyword">void</span> <span class="identifier">BOOST_FOO_DECL</span> <span class="identifier">f</span><span class="special">()</span>
6312 <span class="special">{</span>
6313 <span class="special">...</span>
6314 <span class="special">}</span>
6315 <span class="special">...</span>
6318 <div class="section">
6319 <div class="titlepage"><div><div><h4 class="title">
6320 <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.abi_fixing" title="ABI Fixing">ABI
6322 </h4></div></div></div>
6324 When linking against a pre-compiled library it vital that the ABI used
6325 by the compiler when building the library <span class="emphasis"><em>matches exactly</em></span>
6326 the ABI used by the code using the library. In this case ABI means things
6327 like the struct packing arrangement used, the name mangling scheme used,
6328 or the size of some types (enum types for example). This is separate from
6329 things like threading support, or runtime library variations, which have
6330 to be dealt with by build variants. To put this in perspective there is
6331 one compiler (Borland's) that has so many compiler options that make subtle
6332 changes to the ABI, that at least in theory there 3200 combinations, and
6333 that's without considering runtime library variations. Fortunately these
6334 variations can be managed by <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
6335 that tell the compiler what ABI to use for the types declared in your library.
6336 In order to avoid sprinkling <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s
6337 all over the boost headers, there are some prefix and suffix headers that
6338 do the job. Typical usage is:
6341 <span class="bold"><strong>my_library.hpp</strong></span>
6343 <pre class="programlisting"><span class="preprocessor">#ifndef</span> <span class="identifier">MY_INCLUDE_GUARD</span>
6344 <span class="preprocessor">#define</span> <span class="identifier">MY_INCLUDE_GUARD</span>
6346 <span class="comment">// all includes go here:</span>
6347 <code class="literal"><span class="bold"><strong>#include <boost/config.hpp></strong></span></code>
6348 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">whatever</span><span class="special">></span>
6350 <code class="literal"><span class="bold"><strong>#include <boost/config/abi_prefix.hpp></strong></span></code> <span class="comment">// must be the last #include</span>
6352 <span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span>
6354 <span class="comment">// your code goes here</span>
6356 <span class="special">}</span>
6358 <code class="literal"><span class="bold"><strong>#include <boost/config/abi_suffix.hpp></strong></span></code> <span class="comment">// pops abi_prefix.hpp pragmas</span>
6360 <span class="preprocessor">#endif</span> <span class="comment">// include guard</span>
6363 <span class="bold"><strong>my_library.cpp</strong></span>
6365 <pre class="programlisting"><span class="special">...</span>
6366 <span class="comment">// nothing special need be done in the implementation file</span>
6367 <span class="special">...</span>
6370 The user can disable this mechanism by defining <code class="computeroutput"><span class="identifier">BOOST_DISABLE_ABI_HEADERS</span></code>,
6371 or they can define <code class="computeroutput"><span class="identifier">BOOST_ABI_PREFIX</span></code>
6372 and/or <code class="computeroutput"><span class="identifier">BOOST_ABI_SUFFIX</span></code>
6373 to point to their own prefix/suffix headers if they so wish.
6376 <div class="section">
6377 <div class="titlepage"><div><div><h4 class="title">
6378 <a name="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection"></a><a class="link" href="boost_macro_reference.html#boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code.automatic_library_selection" title="Automatic library selection">Automatic
6379 library selection</a>
6380 </h4></div></div></div>
6382 It is essential that users link to a build of a library which was built
6383 against the same runtime library that their application will be built against
6384 -if this does not happen then the library will not be binary compatible
6385 with their own code- and there is a high likelihood that their application
6386 will experience runtime crashes. These kinds of problems can be extremely
6387 time consuming and difficult to debug, and often lead to frustrated users
6388 and authors alike (simply selecting the right library to link against is
6389 not as easy as it seems when their are 6-8 of them to chose from, and some
6390 users seem to be blissfully unaware that there even are different runtimes
6394 To solve this issue, some compilers allow source code to contain <code class="computeroutput"><span class="preprocessor">#pragma</span></code>'s that instruct the linker
6395 which library to link against, all the user need do is include the headers
6396 they need, place the compiled libraries in their library search path, and
6397 the compiler and linker do the rest. Boost.config supports this via the
6398 header <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>, before including this header one or
6399 more of the following macros need to be defined:
6401 <div class="variablelist">
6402 <p class="title"><b></b></p>
6403 <dl class="variablelist">
6404 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_NAME</span></code></span></dt>
6406 Required: An identifier containing the basename of the library, for
6407 example 'boost_regex'.
6409 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_DYN_LINK</span></code></span></dt>
6411 Optional: when set link to dll rather than static library.
6413 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_LIB_DIAGNOSTIC</span></code></span></dt>
6415 Optional: when set the header will print out the name of the library
6416 selected (useful for debugging).
6418 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_NOMANGLE</span></code></span></dt>
6420 Optional: whan set specifies that we should link to BOOST_LIB_NAME.lib,
6421 rather than a mangled-name version.
6423 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_TAGGED</span></code></span></dt>
6425 Optional: Specifies that we link to libraries built with the --layout=tagged
6426 option. This is essentially the same as the default name-mangled
6427 version, but without the compiler name and version, or the Boost
6428 version. Just the build options.
6430 <dt><span class="term"><code class="computeroutput"><span class="identifier">BOOST_AUTO_LINK_SYSTEM</span></code></span></dt>
6432 Optional: Specifies that we link to libraries built with the --layout=system
6433 option. This is essentially the same as the non-name-mangled version,
6434 but with the prefix to differentiate static and dll builds
6439 If the compiler supports this mechanism, then it will be told to link against
6440 the appropriately named library, the actual algorithm used to mangle the
6441 name of the library is documented inside <code class="computeroutput"><span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span></code>
6442 and has to match that used to create the libraries via bjam 's install
6446 <span class="bold"><strong>my_library.hpp</strong></span>
6448 <pre class="programlisting"><span class="special">...</span>
6449 <span class="comment">//</span>
6450 <span class="comment">// Don't include auto-linking code if the user has disabled it by</span>
6451 <span class="comment">// defining BOOST_ALL_NO_LIB, or BOOST_MY_LIBRARY_NO_LIB, or if this </span>
6452 <span class="comment">// is one of our own source files (signified by BOOST_MY_LIBRARY_SOURCE):</span>
6453 <span class="comment">//</span>
6454 <span class="preprocessor">#if</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_ALL_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_NO_LIB</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">defined</span><span class="special">(</span><span class="identifier">BOOST_MY_LIBRARY_SOURCE</span><span class="special">)</span>
6455 <span class="preprocessor"># define</span> <span class="identifier">BOOST_LIB_NAME</span> <span class="identifier">boost_my_library</span>
6456 <span class="preprocessor"># ifdef</span> <span class="identifier">BOOST_MY_LIBRARY_DYN_LINK</span>
6457 <span class="preprocessor"># define</span> <span class="identifier">BOOST_DYN_LINK</span>
6458 <span class="preprocessor"># endif</span>
6459 <span class="preprocessor"># include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">config</span><span class="special">/</span><span class="identifier">auto_link</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
6460 <span class="preprocessor">#endif</span>
6461 <span class="special">...</span>
6464 <span class="bold"><strong>my_library.cpp</strong></span>
6466 <pre class="programlisting"><span class="comment">// define BOOST_MY_LIBRARY_SOURCE so that the header knows that the</span>
6467 <span class="comment">// library is being built (possibly exporting rather than importing code)</span>
6468 <span class="comment">//</span>
6469 <span class="preprocessor">#define</span> <span class="identifier">BOOST_MY_LIBRARY_SOURCE</span>
6471 <span class="preprocessor">#include</span> <span class="special"><</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">/</span><span class="identifier">my_library</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span>
6472 <span class="special">...</span>
6477 <table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
6478 <td align="left"></td>
6479 <td align="right"><div class="copyright-footer">Copyright © 2001-2007 Beman Dawes, Vesa Karvonen, John
6481 Distributed under the Boost Software License, Version 1.0. (See accompanying
6482 file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
6487 <div class="spirit-nav">
6488 <a accesskey="p" href="../index.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../index.html"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="build_config.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>