391 lines
24 KiB
HTML
391 lines
24 KiB
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
|
|
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
|
<title>Boost.MultiIndex Documentation - Compiler specifics</title>
|
|
<link rel="stylesheet" href="style.css" type="text/css">
|
|
<link rel="start" href="index.html">
|
|
<link rel="prev" href="reference/key_extraction.html">
|
|
<link rel="up" href="index.html">
|
|
<link rel="next" href="performance.html">
|
|
</head>
|
|
|
|
<body>
|
|
<h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
|
|
"middle" width="277" height="86">Boost.MultiIndex Compiler specifics</h1>
|
|
|
|
<div class="prev_link"><a href="reference/key_extraction.html"><img src="prev.gif" alt="key extraction" border="0"><br>
|
|
Key extraction
|
|
</a></div>
|
|
<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
|
|
Index
|
|
</a></div>
|
|
<div class="next_link"><a href="performance.html"><img src="next.gif" alt="performance" border="0"><br>
|
|
Performance
|
|
</a></div><br clear="all" style="clear: all;">
|
|
|
|
<hr>
|
|
|
|
<p>
|
|
Boost.MultiIndex utilizes some C++11 capabilities but is also equipped
|
|
to work reasonably well in decent C++03-compliant environments.
|
|
We list some of the possible limitations along with suitable workarounds when available.
|
|
</p>
|
|
|
|
<h2>Contents</h2>
|
|
|
|
<ul>
|
|
<li><a href="#move">Move semantics</a></li>
|
|
<li><a href="#emplace">Emplace functions</a></li>
|
|
<li><a href="#initializer_list">Initializer lists</a></li>
|
|
<li><a href="#tuple">Tuples</a></li>
|
|
<li><a href="#symbol_reduction">Reduction of symbol name lengths</a>
|
|
<ul>
|
|
<li><a href="#argument_limitation">Limitation of maximum number of arguments</a></li>
|
|
<li><a href="#type_hiding">Type hiding</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#legacy">Legacy compilers</a></li>
|
|
</ul>
|
|
|
|
<h2><a name="move">Move semantics</a></h2>
|
|
|
|
<p>
|
|
Boost.MultiIndex uses <a href="../../../doc/html/move.html">Boost.Move</a>
|
|
to support compilers without rvalue references. In such scenarios, taking
|
|
advantage of <code>multi_index_container<Value></code> capabilities for
|
|
increased efficiency in insertion and handling of moveable-only elements will
|
|
require that <code>Value</code> be suitably instrumented.
|
|
</p>
|
|
|
|
<h2><a name="emplace">Emplace functions</a></h2>
|
|
|
|
<p>
|
|
In compilers without variadic template support, Boost.MultiIndex emplace
|
|
functions emulate this missing functionality by accepting up to
|
|
<code>BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS</code>
|
|
construction arguments that are internally forwarded with
|
|
<a href="../../../doc/html/move.html">Boost.Move</a>:
|
|
only constant lvalue references and rvalues are permitted as construction arguments
|
|
in such case.
|
|
</p>
|
|
|
|
<p>
|
|
<code>BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS</code>, which by default is 5, can
|
|
be globally defined by the user to a different value.
|
|
</p>
|
|
|
|
<h2><a name="initializer_list">Initializer lists</a></h2>
|
|
|
|
<p>
|
|
No transparent emulation of this functionality can be provided in the absence of
|
|
<code>std::initializer_list</code>: consider
|
|
<a href="../../../libs/assign/index.html">Boost.Assign</a> as a
|
|
possible replacement.
|
|
</p>
|
|
|
|
<h2><a name="tuple">Tuples</a></h2>
|
|
|
|
<p>
|
|
Everywhere where <code>std::tuple</code>s are used in the library interface,
|
|
<code>boost::tuple</code>s can be resorted to in their place. The converse, however,
|
|
is not true.
|
|
</p>
|
|
|
|
<h2><a name="symbol_reduction">Reduction of symbol name lengths</a></h2>
|
|
|
|
<p>
|
|
The types generated on the instantiations of <code>multi_index_container</code>s
|
|
typically produce very long symbol names, sometimes beyond the internal limits
|
|
of some compilers. There are several techniques to shorten generated symbol
|
|
names: these techniques have also the beneficial side effect that resulting error
|
|
messages are more readable.
|
|
</p>
|
|
|
|
<h3><a name="argument_limitation">Limitation of maximum number of arguments</a></h3>
|
|
|
|
<p>
|
|
The class templates <a href="reference/indices.html#indexed_by"><code>indexed_by</code></a>,
|
|
<a href="reference/indices.html#tag"><code>tag</code></a> and
|
|
<a href="reference/key_extraction.html#composite_key"><code>composite_key</code></a>
|
|
accept a variable number of arguments whose maximum number is limited by
|
|
internal macros. Even non-used arguments contribute to the final types,
|
|
so manually adjusting the corresponding macros can result in a modest reduction
|
|
of symbol names.
|
|
</p>
|
|
|
|
<p align="center">
|
|
<table cellspacing="0">
|
|
<caption><b>Limiting maximum number of arguments of some class templates
|
|
of Boost.MultiIndex.</b></caption>
|
|
<tr>
|
|
<th>class template</th>
|
|
<th>limiting macro</th>
|
|
<th>default value</th>
|
|
</tr>
|
|
<tr>
|
|
<td align="center"> <code>indexed_by</code> </td>
|
|
<td align="center"> <code>BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE</code> </td>
|
|
<td align="center">20</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td align="center"> <code>tag</code> </td>
|
|
<td align="center"> <code>BOOST_MULTI_INDEX_LIMIT_TAG_SIZE</code> </td>
|
|
<td align="center">20</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center"> <code>composite_key</code> </td>
|
|
<td align="center"> <code>BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE</code> </td>
|
|
<td align="center">10</td>
|
|
</tr>
|
|
</table>
|
|
</p>
|
|
|
|
<h3><a name="type_hiding">Type hiding</a></h3>
|
|
|
|
<p>
|
|
Consider a typical instantiation of <code>multi_index_container</code>:
|
|
</p>
|
|
|
|
<blockquote><pre>
|
|
<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
|
|
<span class=identifier>employee</span><span class=special>,</span>
|
|
<span class=identifier>indexed_by</span><span class=special><</span>
|
|
<span class=identifier>ordered_unique</span><span class=special><</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>employee</span><span class=special>></span> <span class=special>>,</span>
|
|
<span class=identifier>ordered_non_unique</span><span class=special><</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>></span> <span class=special>>,</span>
|
|
<span class=identifier>ordered_unique</span><span class=special><</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span><span class=keyword>int</span><span class=special>,&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>></span> <span class=special>></span>
|
|
<span class=special>></span>
|
|
<span class=special>></span> <span class=identifier>employee_set</span><span class=special>;</span>
|
|
</pre></blockquote>
|
|
|
|
<p>
|
|
Then, for instance, the type <code>employee_set::nth_index<0>::type</code>
|
|
resolves to the following in GCC:
|
|
</p>
|
|
|
|
<blockquote><pre>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>ordered_index</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>employee</span><span class=special>>,</span>
|
|
<span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special><</span><span class=identifier>employee</span><span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>nth_layer</span><span class=special><</span>
|
|
<span class=number>1</span><span class=special>,</span> <span class=identifier>employee</span><span class=special>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>indexed_by</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>ordered_unique</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>employee</span><span class=special>>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>ordered_non_unique</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span> <span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,</span> <span class=special>&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>>,</span>
|
|
<span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>ordered_unique</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span> <span class=keyword>int</span><span class=special>,</span> <span class=special>&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>>,</span>
|
|
<span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span>
|
|
<span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span>
|
|
<span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>,</span> <span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special><</span><span class=identifier>employee</span><span class=special>></span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>mpl</span><span class=special>::</span><span class=identifier>vector0</span><span class=special><</span><span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>ordered_unique_tag</span>
|
|
<span class=special>></span>
|
|
</pre></blockquote>
|
|
|
|
<p>
|
|
It can be seen that a significant portion of the type name is contributed by
|
|
the <code>indexed_by<...></code> part, which is nothing but an expanded
|
|
version of the index specifier list provided in the definition of
|
|
<code>employee_set</code>. We can prevent this very long name from appearing
|
|
in the final type by encapsulating it into another, shorter-named construct:
|
|
</p>
|
|
|
|
<blockquote><pre>
|
|
<span class=comment>// reducing symbol names through type hiding
|
|
// type hide the index specifier list within employee_set_indices</span>
|
|
|
|
<span class=keyword>struct</span> <span class=identifier>employee_set_indices</span><span class=special>:</span>
|
|
<span class=identifier>indexed_by</span><span class=special><</span>
|
|
<span class=identifier>ordered_unique</span><span class=special><</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>employee</span><span class=special>></span> <span class=special>>,</span>
|
|
<span class=identifier>ordered_non_unique</span><span class=special><</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span><span class=identifier>std</span><span class=special>::</span><span class=identifier>string</span><span class=special>,&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>></span> <span class=special>>,</span>
|
|
<span class=identifier>ordered_unique</span><span class=special><</span><span class=identifier>member</span><span class=special><</span><span class=identifier>employee</span><span class=special>,</span><span class=keyword>int</span><span class=special>,&</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>></span> <span class=special>></span>
|
|
<span class=special>></span>
|
|
<span class=special>{};</span>
|
|
|
|
<span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special><</span>
|
|
<span class=identifier>employee</span><span class=special>,</span>
|
|
<span class=identifier>employee_set_indices</span>
|
|
<span class=special>></span> <span class=identifier>employee_set</span><span class=special>;</span>
|
|
</pre></blockquote>
|
|
|
|
<p>
|
|
<code>employee_set_indices</code> works as a conventional <code>typedef</code>
|
|
in all respects, save for a detail: its name does not explicitly
|
|
include the information contained in the <code>indexed_by</code> instantiation.
|
|
Applying this technique, <code>employee_set::nth_index<0>::type</code>
|
|
now becomes:
|
|
</p>
|
|
|
|
<blockquote><pre>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>ordered_index</span><span class=special><</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>identity</span><span class=special><</span><span class=identifier>employee</span><span class=special>>,</span>
|
|
<span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special><</span><span class=identifier>employee</span><span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>nth_layer</span><span class=special><</span>
|
|
<span class=number>1</span><span class=special>,</span> <span class=identifier>employee</span><span class=special>,</span>
|
|
<span class=identifier>employee_set_indices</span><span class=special>,</span>
|
|
<span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special><</span><span class=identifier>employee</span><span class=special>></span>
|
|
<span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>mpl</span><span class=special>::</span><span class=identifier>vector0</span><span class=special><</span><span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>>,</span>
|
|
<span class=identifier>boost</span><span class=special>::</span><span class=identifier>multi_index</span><span class=special>::</span><span class=identifier>detail</span><span class=special>::</span><span class=identifier>ordered_unique_tag</span>
|
|
<span class=special>></span>
|
|
</pre></blockquote>
|
|
|
|
<p>
|
|
which is considerably shorter than the original, and also more
|
|
easily parsed by a human reader. Type hiding would not work if, instead of
|
|
making <code>employee_set_indices</code> a derived <code>struct</code> of
|
|
<code>indexed_by<...></code>, we had defined it as a <code>typedef</code>:
|
|
<code>typedef</code>s are syntactic aliases and usually get expanded
|
|
by the compiler before doing any further type handling.
|
|
</p>
|
|
|
|
<p>
|
|
Type hiding techniques can also be applied to <code>composite_key</code> intantiations,
|
|
which often contribute a great deal to symbol name lengths.
|
|
</p>
|
|
|
|
<h2><a name="legacy">Legacy compilers</a></h2>
|
|
|
|
<p>
|
|
Boost.MultiIndex support for legacy compilers is not actively kept, so if you happen
|
|
to work with an old environment you might need to use a former version of the library.
|
|
A table is provided of some legacy compilers along with the latest version of
|
|
Boost.MultiIndex known to work for them (frequently with limitations as explained
|
|
in the corresponding compiler specifics section.) If you successfully try one of those
|
|
with newer versions of Boost.MultiIndex than stated here, please report back so that
|
|
the information can be updated.
|
|
</p>
|
|
|
|
<p align="center">
|
|
<table cellspacing="0" cellpadding="5">
|
|
<caption><b>Support for legacy compilers.</b></caption>
|
|
<tr>
|
|
<th>Compiler</th>
|
|
<th>Latest known<br>compatible version</th>
|
|
<th>Date</th>
|
|
</tr>
|
|
<tr>
|
|
<td>Borland C++ Builder 6.4 through 2006, CodeGear C++Builder 2010</td>
|
|
<td>Never worked with Boost.MultiIndex</td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>Comeau C/C++ 4.3.10.1 for Windows (VC++ 9.0 backend)</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_38_0/libs/multi_index/doc/compiler_specifics.html#comeau_43101_win_vc7_71">Boost 1.38</a></td>
|
|
<td>February 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Compaq C++ 6.5-042 through 7.1-006 for Tru64 UNIX</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_38_0/libs/multi_index/doc/compiler_specifics.html#compaq_65">Boost 1.38</a></td>
|
|
<td>February 2009</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>GCC 3.2 through 3.4</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#gcc_32">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>HP aC++ A.06.12 through A.06.17 for HP-UX IA64</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_38_0/libs/multi_index/doc/compiler_specifics.html#acc_612_ia64">Boost 1.38</a></td>
|
|
<td>February 2009</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>HP aC++ A.03.80 through A.03.85 for HP-UX PA-RISC</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_38_0/libs/multi_index/doc/compiler_specifics.html#acc_380_pa_risc">Boost 1.38</a></td>
|
|
<td>February 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>IBM VisualAge C++ V6.0 for AIX</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_33_1/libs/multi_index/doc/compiler_specifics.html#va_60">Boost 1.33.1</a></td>
|
|
<td>December 2006</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>IBM XL C/C++ V9.0 through V10.1 for AIX</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#xl_90">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Intel C++ Compiler for Linux 8.1 through 11.1</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#intel_81_lin">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>Intel C++ Compiler for Mac OS 9.1 through 11.0</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#intel_91_mac">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Intel C++ Compiler for Windows 32-bit 8.0 through 11.1</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#intel_80_win">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>Intel C++ Compiler for Windows 64-bit 10.0 through 11.11</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#intel_100_win64">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Metrowerks CodeWarrior 8.3</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_36_0/libs/multi_index/doc/compiler_specifics.html#cw_83">Boost 1.36</a></td>
|
|
<td>August 2008</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>Metrowerks CodeWarrior 9 through 9.5</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_34_1/libs/multi_index/doc/compiler_specifics.html#cw_9x">Boost 1.34.1</a></td>
|
|
<td>July 2007</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Microsoft Visual C++ 6.0 Service Pack 5</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_36_0/libs/multi_index/doc/compiler_specifics.html#msvc_60">Boost 1.36</a></td>
|
|
<td>August 2008</td>
|
|
</tr>
|
|
<tr class="odd_tr">
|
|
<td>Microsoft Visual C++ 7.0</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_35_0/libs/multi_index/doc/compiler_specifics.html#msvc_70">Boost 1.35</a></td>
|
|
<td>March 2008</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Sun Studio 10 through 12 Update 1 for Solaris</td>
|
|
<td><a href="http://www.boost.org/doc/libs/1_41_0/libs/multi_index/doc/compiler_specifics.html#sun_10">Boost 1.41</a></td>
|
|
<td>November 2009</td>
|
|
</tr>
|
|
</table>
|
|
</p>
|
|
|
|
<hr>
|
|
|
|
<div class="prev_link"><a href="reference/key_extraction.html"><img src="prev.gif" alt="key extraction" border="0"><br>
|
|
Key extraction
|
|
</a></div>
|
|
<div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
|
|
Index
|
|
</a></div>
|
|
<div class="next_link"><a href="performance.html"><img src="next.gif" alt="performance" border="0"><br>
|
|
Performance
|
|
</a></div><br clear="all" style="clear: all;">
|
|
|
|
<br>
|
|
|
|
<p>Revised August 20th 2014</p>
|
|
|
|
<p>© Copyright 2003-2014 Joaquín M López Muñoz.
|
|
Distributed under the Boost Software
|
|
License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
|
|
LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
|
|
http://www.boost.org/LICENSE_1_0.txt</a>)
|
|
</p>
|
|
|
|
</body>
|
|
</html>
|