<aname="boost_config.boost_macro_reference.macros_that_describe_defects"></a><ahref="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_defects"title="Macros that describe defects">Macros
Argument dependent lookup fails if there is a using declaration for
the symbol being looked up in the current scope. For example, using
<codeclass="computeroutput"><spanclass="identifier">boost</span><spanclass="special">::</span><spanclass="identifier">get_pointer</span></code>; prevents ADL from
finding overloads of <codeclass="computeroutput"><spanclass="identifier">get_pointer</span></code>
in namespaces nested inside boost (but not elsewhere). Probably Borland
If the compiler / library supplies non-standard or broken <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">auto_ptr</span></code>.
The Platform does not provide functions for the character-classifying
operations <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">ctype</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code> and <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">cctype</span><spanclass="special">></span></code>,
The Platform does not provide <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">wchar</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
and <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">cwchar</span><spanclass="special">></span></code>.
The Platform does not provide <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">wctype</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
and <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">cwctype</span><spanclass="special">></span></code>.
The standard library does not put some or all of the contents of
<codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">exception</span><spanclass="special">></span></code> in namespace std.
<spanclass="identifier">f</span><spanclass="special">(&</span><spanclass="identifier">bar</span><spanclass="special">);</span><spanclass="comment">// should choose #2.
The standard library lacks <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">iosfwd</span><spanclass="special">></span></code>.
The standard library lacks <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">iostream</span><spanclass="special">></span></code>,
<codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">istream</span><spanclass="special">></span></code> or <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">ostream</span><spanclass="special">></span></code>.
The C++ implementation does not provide the <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">limits</span><spanclass="special">></span></code>
header. Never check for this symbol in library code; always include
<codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">limits</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code>, which guarantees to provide
Constants such as <codeclass="computeroutput"><spanclass="identifier">numeric_limits</span><spanclass="special"><</span><spanclass="identifier">T</span><spanclass="special">>::</span><spanclass="identifier">is_signed</span></code>
There is no specialization for <codeclass="computeroutput"><spanclass="identifier">numeric_limits</span><spanclass="special"><</span><spanclass="keyword">long</span>
Member template friend syntax (<codeclass="computeroutput"><spanclass="keyword">template</span><spanclass="special"><</span><spanclass="keyword">class</span>
There is no specialization for <codeclass="computeroutput"><spanclass="identifier">numeric_limits</span><spanclass="special"><</span><spanclass="identifier">__int64</span><spanclass="special">></span></code> and <codeclass="computeroutput"><spanclass="identifier">numeric_limits</span><spanclass="special"><</span><spanclass="keyword">unsigned</span>
<codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">limits</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code> will then add these specializations
as a standard library "fix", only if the compiler supports
the <codeclass="computeroutput"><spanclass="identifier">__int64</span></code> datatype.
Compiler requires inherited operator friend functions to be defined
at namespace scope, then using'ed to boost. Probably GCC specific.
See <ahref="../../../../../boost/operators.hpp"target="_top"><codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">operators</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code></a>
The compiler does not correctly handle pointers to const member functions,
preventing use of these in overloaded function templates. See <ahref="../../../../../boost/functional.hpp"target="_top"><codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">functional</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code></a>
The platform does not have a conforming version of <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">distance</span></code>.
The C++ implementation fails to provide the <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">iterator</span></code>
The compiler does not provide a standard compliant implementation
of <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">iterator_traits</span></code>. Note that the
compiler may still have a non-standard implementation.
The standard library lacks <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">locale</span></code>.
The standard library lacks a conforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">messages</span></code>
The C++ standard library does not provide the <codeclass="computeroutput"><spanclass="identifier">min</span><spanclass="special">()</span></code> and <codeclass="computeroutput"><spanclass="identifier">max</span><spanclass="special">()</span></code> template functions that should
be in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">algorithm</span><spanclass="special">></span></code>.
The standard library lacks a conforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">use_facet</span></code>.
The standard library's implementation of <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">basic_streambuf</span><spanclass="special"><</span><spanclass="keyword">wchar_t</span><spanclass="special">></span></code> is either missing, incomplete,
The standard library lacks <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">wstring</span></code>.
The contents of C++ standard headers for C library functions (the
<codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">c</span><spanclass="special">...></span></code> headers) have not been placed
in namespace std. This test is difficult - some libraries "fake"
the std C functions by adding using declarations to import them into
namespace std, unfortunately they don't necessarily catch all of
The C++ implementation does not provide the <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">sstream</span><spanclass="special">></span></code>
<aname="boost_config.boost_macro_reference.macros_that_describe_optional_features"></a><ahref="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_optional_features"title="Macros that describe optional features">Macros
The compiler uses <codeclass="computeroutput"><spanclass="identifier">__declspec</span><spanclass="special">(</span><spanclass="identifier">dllexport</span><spanclass="special">)</span></code> and <codeclass="computeroutput"><spanclass="identifier">__declspec</span><spanclass="special">(</span><spanclass="identifier">dllimport</span><spanclass="special">)</span></code> to export/import symbols from dll's.
The platform has the POSIX header <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">dirent</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>.
The platform has the functions <codeclass="computeroutput"><spanclass="identifier">expm1</span></code>,
<codeclass="computeroutput"><spanclass="identifier">expm1f</span></code> and <codeclass="computeroutput"><spanclass="identifier">expm1l</span></code> in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">math</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
The platform has the functions <codeclass="computeroutput"><spanclass="identifier">log1p</span></code>,
<codeclass="computeroutput"><spanclass="identifier">log1pf</span></code> and <codeclass="computeroutput"><spanclass="identifier">log1pl</span></code> in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">math</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>.
The standard library lacks a conforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">use_facet</span></code>,
but has a macro <codeclass="computeroutput"><spanclass="identifier">_USE</span><spanclass="special">(</span><spanclass="identifier">loc</span><spanclass="special">,</span><spanclass="identifier">Type</span><spanclass="special">)</span></code> that does the job. This is primarily
The platform has an <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">nl_types</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>.
Indicated that the compiler supports the named return value optimization
(NRVO). Used to select the most efficient implementation for some
function. See <ahref="../../../../../boost/operators.hpp"target="_top"><codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">operators</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code></a> for example.
The standard library has a partially conforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">allocator</span></code>
The platform has a <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">stdint</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
will contain the name of the header needed to access <codeclass="computeroutput"><spanclass="identifier">slist</span></code> and <codeclass="computeroutput"><spanclass="identifier">BOOST_STD_EXTENSION_NAMESPACE</span></code>
will provide the namespace in which <codeclass="computeroutput"><spanclass="identifier">slist</span></code>
The standard library lacks a conforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">use_facet</span></code>,
but has a workaround class-version that does the job. This is primarily
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">array</span><spanclass="special">></span></code>.
The library has a version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">complex</span><spanclass="special">></span></code>
that supports passing scalars to the complex number algorithms.
The library has a version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">complex</span><spanclass="special">></span></code>
that includes the new inverse trig functions from TR1.
The library has TR1 conforming reference wrappers in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming result_of template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming mem_fn function template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming bind function template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming function class template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming hash function template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">functional</span><spanclass="special">></span></code>.
The library has a TR1 conforming <codeclass="computeroutput"><spanclass="identifier">shared_ptr</span></code>
class template in <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">memory</span><spanclass="special">></span></code>.
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">random</span><spanclass="special">></span></code>.
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">regex</span><spanclass="special">></span></code>.
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">tuple</span><spanclass="special">></span></code>.
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">type_traits</span><spanclass="special">></span></code>.
The library has the TR1 additions to <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">utility</span><spanclass="special">></span></code>
(tuple interface to <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">pair</span></code>).
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">unordered_map</span><spanclass="special">></span></code>.
The library has a TR1 conforming version of <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">unordered_set</span><spanclass="special">></span></code>.
Implies all the other <codeclass="computeroutput"><spanclass="identifier">BOOST_HAS_TR1_</span><spanclass="special">*</span></code> macros should be set.
The Platform provides <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">unistd</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>.
Microsoft's broken version of <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">iterator</span></code>
is being used. This implies that <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">iterator</span></code>
There are no 1998 C++ Standard headers <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">stdint</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
or <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">cstdint</span><spanclass="special">></span></code>, although the 1999 C Standard
does include <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">stdint</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>. If <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">stdint</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code>
is present, <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">stdint</span><spanclass="special">.</span><spanclass="identifier">h</span><spanclass="special">></span></code> can make good use of it, so a
flag is supplied (signalling presence; thus the default is not present,
<aname="boost_config.boost_macro_reference.macros_that_describe_c__0x_features"></a><ahref="boost_macro_reference.html#boost_config.boost_macro_reference.macros_that_describe_c__0x_features"title="Macros that describe C++0x features">Macros
Beware that they can declare (for affected compilers) a dummy defaulted
parameter, so they
</p>
<p>
<spanclass="bold"><strong>a)</strong></span> should be always invoked <spanclass="bold"><strong>at the end</strong></span> of the parameter list
</p>
<p>
<spanclass="bold"><strong>b)</strong></span> can't be used if your function
template is multiply declared.
</p>
<p>
Furthermore, in order to add any needed comma separator, an <codeclass="computeroutput"><spanclass="identifier">APPEND_</span><spanclass="special">*</span></code>
version must be used when the macro invocation appears after a normal
parameter declaration or after the invocation of another macro of
When the standard library does not have a comforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">use_facet</span></code> there are various workarounds
available, but they differ from library to library. This macro provides
a consistent way to access a locale's facets. For example, replace:
with: <codeclass="computeroutput"><spanclass="identifier">BOOST_USE_FACET</span><spanclass="special">(</span><spanclass="identifier">Type</span><spanclass="special">,</span><spanclass="identifier">loc</span><spanclass="special">);</span></code> Note do not add a <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span></code>
prefix to the front of <codeclass="computeroutput"><spanclass="identifier">BOOST_USE_FACET</span></code>.
When the standard library does not have a comforming <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span><spanclass="identifier">has_facet</span></code> there are various workarounds
available, but they differ from library to library. This macro provides
a consistent way to check a locale's facets. For example, replace:
with: <codeclass="computeroutput"><spanclass="identifier">BOOST_HAS_FACET</span><spanclass="special">(</span><spanclass="identifier">Type</span><spanclass="special">,</span><spanclass="identifier">loc</span><spanclass="special">);</span></code> Note do not add a <codeclass="computeroutput"><spanclass="identifier">std</span><spanclass="special">::</span></code>
prefix to the front of <codeclass="computeroutput"><spanclass="identifier">BOOST_HAS_FACET</span></code>.
Member templates are supported by some compilers even though they
can't use the <codeclass="computeroutput"><spanclass="identifier">A</span><spanclass="special">::</span><spanclass="keyword">template</span><spanclass="identifier">member</span><spanclass="special"><</span><spanclass="identifier">U</span><spanclass="special">></span></code> syntax, as a workaround replace:
Describes the boost version number in XXYYZZ format such that: <codeclass="computeroutput"><spanclass="special">(</span><spanclass="identifier">BOOST_VERSION</span>
<spanclass="special">%</span><spanclass="number">100</span><spanclass="special">)</span></code> is the sub-minor version, <codeclass="computeroutput"><spanclass="special">((</span><spanclass="identifier">BOOST_VERSION</span>
is the minor version, and <codeclass="computeroutput"><spanclass="special">(</span><spanclass="identifier">BOOST_VERSION</span><spanclass="special">/</span>
Defined if <codeclass="computeroutput"><spanclass="identifier">int64_t</span></code>
as defined by <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">cstdint</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code> is not usable in integral constant
<aname="boost_config.boost_macro_reference.macros_for_libraries_with_separate_source_code"></a><ahref="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
<codeclass="literal"><spanclass="bold"><strong>#include <boost/config/abi_prefix.hpp></strong></span></code><spanclass="comment">// must be the last #include
It is essential that users link to a build of a library which was built
against the same runtime library that their application will be built against
-if this does not happen then the library will not be binary compatible
with their own code- and there is a high likelihood that their application
will experience runtime crashes. These kinds of problems can be extremely
time consuming and difficult to debug, and often lead to frustrated users
and authors alike (simply selecting the right library to link against is
not as easy as it seems when their are 6-8 of them to chose from, and some
users seem to be blissfully unaware that there even are different runtimes
available to them).
</p>
<p>
To solve this issue, some compilers allow source code to contain <codeclass="computeroutput"><spanclass="preprocessor">#pragma</span></code>'s that instruct the linker
which library to link against, all the user need do is include the headers
they need, place the compiled libraries in their library search path, and
the compiler and linker do the rest. Boost.config supports this via the
header <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">config</span><spanclass="special">/</span><spanclass="identifier">auto_link</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code>, before including this header one or
If the compiler supports this mechanism, then it will be told to link against
the appropriately named library, the actual algorithm used to mangle the
name of the library is documented inside <codeclass="computeroutput"><spanclass="special"><</span><spanclass="identifier">boost</span><spanclass="special">/</span><spanclass="identifier">config</span><spanclass="special">/</span><spanclass="identifier">auto_link</span><spanclass="special">.</span><spanclass="identifier">hpp</span><spanclass="special">></span></code>
and has to match that used to create the libraries via bjam 's install