compiler_specifics.html 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0.1 Transitional//EN">
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Boost.MultiIndex Documentation - Compiler specifics</title>
  6. <link rel="stylesheet" href="style.css" type="text/css">
  7. <link rel="start" href="index.html">
  8. <link rel="prev" href="reference/key_extraction.html">
  9. <link rel="up" href="index.html">
  10. <link rel="next" href="performance.html">
  11. </head>
  12. <body>
  13. <h1><img src="../../../boost.png" alt="boost.png (6897 bytes)" align=
  14. "middle" width="277" height="86">Boost.MultiIndex Compiler specifics</h1>
  15. <div class="prev_link"><a href="reference/key_extraction.html"><img src="prev.gif" alt="key extraction" border="0"><br>
  16. Key extraction
  17. </a></div>
  18. <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
  19. Index
  20. </a></div>
  21. <div class="next_link"><a href="performance.html"><img src="next.gif" alt="performance" border="0"><br>
  22. Performance
  23. </a></div><br clear="all" style="clear: all;">
  24. <hr>
  25. <p>
  26. Boost.MultiIndex utilizes some C++11 capabilities but is also equipped
  27. to work reasonably well in decent C++03-compliant environments.
  28. We list some of the possible limitations along with suitable workarounds when available.
  29. </p>
  30. <h2>Contents</h2>
  31. <ul>
  32. <li><a href="#move">Move semantics</a></li>
  33. <li><a href="#emplace">Emplace functions</a></li>
  34. <li><a href="#initializer_list">Initializer lists</a></li>
  35. <li><a href="#tuple">Tuples</a></li>
  36. <li><a href="#symbol_reduction">Reduction of symbol name lengths</a>
  37. <ul>
  38. <li><a href="#argument_limitation">Limitation of maximum number of arguments</a></li>
  39. <li><a href="#type_hiding">Type hiding</a></li>
  40. </ul>
  41. </li>
  42. <li><a href="#legacy">Legacy compilers</a></li>
  43. </ul>
  44. <h2><a name="move">Move semantics</a></h2>
  45. <p>
  46. Boost.MultiIndex uses <a href="../../../doc/html/move.html">Boost.Move</a>
  47. to support compilers without rvalue references. In such scenarios, taking
  48. advantage of <code>multi_index_container&lt;Value&gt;</code> capabilities for
  49. increased efficiency in insertion and handling of moveable-only elements will
  50. require that <code>Value</code> be suitably instrumented.
  51. </p>
  52. <h2><a name="emplace">Emplace functions</a></h2>
  53. <p>
  54. In compilers without variadic template support, Boost.MultiIndex emplace
  55. functions emulate this missing functionality by accepting up to
  56. <code>BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS</code>
  57. construction arguments that are internally forwarded with
  58. <a href="../../../doc/html/move.html">Boost.Move</a>:
  59. only constant lvalue references and rvalues are permitted as construction arguments
  60. in such case.
  61. </p>
  62. <p>
  63. <code>BOOST_MULTI_INDEX_LIMIT_VARTEMPL_ARGS</code>, which by default is 5, can
  64. be globally defined by the user to a different value.
  65. </p>
  66. <h2><a name="initializer_list">Initializer lists</a></h2>
  67. <p>
  68. No transparent emulation of this functionality can be provided in the absence of
  69. <code>std::initializer_list</code>: consider
  70. <a href="../../../libs/assign/index.html">Boost.Assign</a> as a
  71. possible replacement.
  72. </p>
  73. <h2><a name="tuple">Tuples</a></h2>
  74. <p>
  75. Everywhere where <code>std::tuple</code>s are used in the library interface,
  76. <code>boost::tuple</code>s can be resorted to in their place. The converse, however,
  77. is not true.
  78. </p>
  79. <h2><a name="symbol_reduction">Reduction of symbol name lengths</a></h2>
  80. <p>
  81. The types generated on the instantiations of <code>multi_index_container</code>s
  82. typically produce very long symbol names, sometimes beyond the internal limits
  83. of some compilers. There are several techniques to shorten generated symbol
  84. names: these techniques have also the beneficial side effect that resulting error
  85. messages are more readable.
  86. </p>
  87. <h3><a name="argument_limitation">Limitation of maximum number of arguments</a></h3>
  88. <p>
  89. The class templates <a href="reference/indices.html#indexed_by"><code>indexed_by</code></a>,
  90. <a href="reference/indices.html#tag"><code>tag</code></a> and
  91. <a href="reference/key_extraction.html#composite_key"><code>composite_key</code></a>
  92. accept a variable number of arguments whose maximum number is limited by
  93. internal macros. Even non-used arguments contribute to the final types,
  94. so manually adjusting the corresponding macros can result in a modest reduction
  95. of symbol names.
  96. </p>
  97. <p align="center">
  98. <table cellspacing="0">
  99. <caption><b>Limiting maximum number of arguments of some class templates
  100. of Boost.MultiIndex.</b></caption>
  101. <tr>
  102. <th>class template</th>
  103. <th>limiting macro</th>
  104. <th>default value</th>
  105. </tr>
  106. <tr>
  107. <td align="center">&nbsp;<code>indexed_by</code>&nbsp;</td>
  108. <td align="center">&nbsp;<code>BOOST_MULTI_INDEX_LIMIT_INDEXED_BY_SIZE</code>&nbsp;</td>
  109. <td align="center">20</td>
  110. </tr>
  111. <tr class="odd_tr">
  112. <td align="center">&nbsp;<code>tag</code>&nbsp;</td>
  113. <td align="center">&nbsp;<code>BOOST_MULTI_INDEX_LIMIT_TAG_SIZE</code>&nbsp;</td>
  114. <td align="center">20</td>
  115. </tr>
  116. <tr>
  117. <td align="center">&nbsp;<code>composite_key</code>&nbsp;</td>
  118. <td align="center">&nbsp;<code>BOOST_MULTI_INDEX_LIMIT_COMPOSITE_KEY_SIZE</code>&nbsp;</td>
  119. <td align="center">10</td>
  120. </tr>
  121. </table>
  122. </p>
  123. <h3><a name="type_hiding">Type hiding</a></h3>
  124. <p>
  125. Consider a typical instantiation of <code>multi_index_container</code>:
  126. </p>
  127. <blockquote><pre>
  128. <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
  129. <span class=identifier>employee</span><span class=special>,</span>
  130. <span class=identifier>indexed_by</span><span class=special>&lt;</span>
  131. <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;</span> <span class=special>&gt;,</span>
  132. <span class=identifier>ordered_non_unique</span><span class=special>&lt;</span><span class=identifier>member</span><span class=special>&lt;</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>,&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>&gt;</span> <span class=special>&gt;,</span>
  133. <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>member</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>,</span><span class=keyword>int</span><span class=special>,&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>&gt;</span> <span class=special>&gt;</span>
  134. <span class=special>&gt;</span>
  135. <span class=special>&gt;</span> <span class=identifier>employee_set</span><span class=special>;</span>
  136. </pre></blockquote>
  137. <p>
  138. Then, for instance, the type <code>employee_set::nth_index&lt;0&gt;::type</code>
  139. resolves to the following in GCC:
  140. </p>
  141. <blockquote><pre>
  142. <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>&lt;</span>
  143. <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>&lt;</span><span class=identifier>employee</span><span class=special>&gt;,</span>
  144. <span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;,</span>
  145. <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>&lt;</span>
  146. <span class=number>1</span><span class=special>,</span> <span class=identifier>employee</span><span class=special>,</span>
  147. <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>&lt;</span>
  148. <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>&lt;</span>
  149. <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>&lt;</span><span class=identifier>employee</span><span class=special>&gt;,</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>
  150. <span class=special>&gt;,</span>
  151. <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>&lt;</span>
  152. <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>&lt;</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>&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>&gt;,</span>
  153. <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>
  154. <span class=special>&gt;,</span>
  155. <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>&lt;</span>
  156. <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>&lt;</span><span class=identifier>employee</span><span class=special>,</span> <span class=keyword>int</span><span class=special>,</span> <span class=special>&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>&gt;,</span>
  157. <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>
  158. <span class=special>&gt;,</span>
  159. <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>
  160. <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>
  161. <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>
  162. <span class=special>&gt;,</span>
  163. <span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;</span>
  164. <span class=special>&gt;,</span>
  165. <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>&lt;</span><span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>&gt;,</span>
  166. <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>
  167. <span class=special>&gt;</span>
  168. </pre></blockquote>
  169. <p>
  170. It can be seen that a significant portion of the type name is contributed by
  171. the <code>indexed_by&lt;...&gt;</code> part, which is nothing but an expanded
  172. version of the index specifier list provided in the definition of
  173. <code>employee_set</code>. We can prevent this very long name from appearing
  174. in the final type by encapsulating it into another, shorter-named construct:
  175. </p>
  176. <blockquote><pre>
  177. <span class=comment>// reducing symbol names through type hiding
  178. // type hide the index specifier list within employee_set_indices</span>
  179. <span class=keyword>struct</span> <span class=identifier>employee_set_indices</span><span class=special>:</span>
  180. <span class=identifier>indexed_by</span><span class=special>&lt;</span>
  181. <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>identity</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;</span> <span class=special>&gt;,</span>
  182. <span class=identifier>ordered_non_unique</span><span class=special>&lt;</span><span class=identifier>member</span><span class=special>&lt;</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>,&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>name</span><span class=special>&gt;</span> <span class=special>&gt;,</span>
  183. <span class=identifier>ordered_unique</span><span class=special>&lt;</span><span class=identifier>member</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>,</span><span class=keyword>int</span><span class=special>,&amp;</span><span class=identifier>employee</span><span class=special>::</span><span class=identifier>ssnumber</span><span class=special>&gt;</span> <span class=special>&gt;</span>
  184. <span class=special>&gt;</span>
  185. <span class=special>{};</span>
  186. <span class=keyword>typedef</span> <span class=identifier>multi_index_container</span><span class=special>&lt;</span>
  187. <span class=identifier>employee</span><span class=special>,</span>
  188. <span class=identifier>employee_set_indices</span>
  189. <span class=special>&gt;</span> <span class=identifier>employee_set</span><span class=special>;</span>
  190. </pre></blockquote>
  191. <p>
  192. <code>employee_set_indices</code> works as a conventional <code>typedef</code>
  193. in all respects, save for a detail: its name does not explicitly
  194. include the information contained in the <code>indexed_by</code> instantiation.
  195. Applying this technique, <code>employee_set::nth_index&lt;0&gt;::type</code>
  196. now becomes:
  197. </p>
  198. <blockquote><pre>
  199. <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>&lt;</span>
  200. <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>&lt;</span><span class=identifier>employee</span><span class=special>&gt;,</span>
  201. <span class=identifier>std</span><span class=special>::</span><span class=identifier>less</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;,</span>
  202. <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>&lt;</span>
  203. <span class=number>1</span><span class=special>,</span> <span class=identifier>employee</span><span class=special>,</span>
  204. <span class=identifier>employee_set_indices</span><span class=special>,</span>
  205. <span class=identifier>std</span><span class=special>::</span><span class=identifier>allocator</span><span class=special>&lt;</span><span class=identifier>employee</span><span class=special>&gt;</span>
  206. <span class=special>&gt;,</span>
  207. <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>&lt;</span><span class=identifier>mpl_</span><span class=special>::</span><span class=identifier>na</span><span class=special>&gt;,</span>
  208. <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>
  209. <span class=special>&gt;</span>
  210. </pre></blockquote>
  211. <p>
  212. which is considerably shorter than the original, and also more
  213. easily parsed by a human reader. Type hiding would not work if, instead of
  214. making <code>employee_set_indices</code> a derived <code>struct</code> of
  215. <code>indexed_by&lt;...&gt;</code>, we had defined it as a <code>typedef</code>:
  216. <code>typedef</code>s are syntactic aliases and usually get expanded
  217. by the compiler before doing any further type handling.
  218. </p>
  219. <p>
  220. Type hiding techniques can also be applied to <code>composite_key</code> intantiations,
  221. which often contribute a great deal to symbol name lengths.
  222. </p>
  223. <h2><a name="legacy">Legacy compilers</a></h2>
  224. <p>
  225. Boost.MultiIndex support for legacy compilers is not actively kept, so if you happen
  226. to work with an old environment you might need to use a former version of the library.
  227. A table is provided of some legacy compilers along with the latest version of
  228. Boost.MultiIndex known to work for them (frequently with limitations as explained
  229. in the corresponding compiler specifics section.) If you successfully try one of those
  230. with newer versions of Boost.MultiIndex than stated here, please report back so that
  231. the information can be updated.
  232. </p>
  233. <p align="center">
  234. <table cellspacing="0" cellpadding="5">
  235. <caption><b>Support for legacy compilers.</b></caption>
  236. <tr>
  237. <th>Compiler</th>
  238. <th>Latest known<br>compatible version</th>
  239. <th>Date</th>
  240. </tr>
  241. <tr>
  242. <td>Borland C++ Builder 6.4 through 2006, CodeGear C++Builder 2010</td>
  243. <td>Never worked with Boost.MultiIndex</td>
  244. <td></td>
  245. </tr>
  246. <tr class="odd_tr">
  247. <td>Comeau C/C++ 4.3.10.1 for Windows (VC++ 9.0 backend)</td>
  248. <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>
  249. <td>February 2009</td>
  250. </tr>
  251. <tr>
  252. <td>Compaq C++ 6.5-042 through 7.1-006 for Tru64 UNIX</td>
  253. <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>
  254. <td>February 2009</td>
  255. </tr>
  256. <tr class="odd_tr">
  257. <td>GCC 3.2 through 3.4</td>
  258. <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>
  259. <td>November 2009</td>
  260. </tr>
  261. <tr>
  262. <td>HP aC++ A.06.12 through A.06.17 for HP-UX IA64</td>
  263. <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>
  264. <td>February 2009</td>
  265. </tr>
  266. <tr class="odd_tr">
  267. <td>HP aC++ A.03.80 through A.03.85 for HP-UX PA-RISC</td>
  268. <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>
  269. <td>February 2009</td>
  270. </tr>
  271. <tr>
  272. <td>IBM VisualAge C++ V6.0 for AIX</td>
  273. <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>
  274. <td>December 2006</td>
  275. </tr>
  276. <tr class="odd_tr">
  277. <td>IBM XL C/C++ V9.0 through V10.1 for AIX</td>
  278. <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>
  279. <td>November 2009</td>
  280. </tr>
  281. <tr>
  282. <td>Intel C++ Compiler for Linux 8.1 through 11.1</td>
  283. <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>
  284. <td>November 2009</td>
  285. </tr>
  286. <tr class="odd_tr">
  287. <td>Intel C++ Compiler for Mac OS 9.1 through 11.0</td>
  288. <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>
  289. <td>November 2009</td>
  290. </tr>
  291. <tr>
  292. <td>Intel C++ Compiler for Windows 32-bit 8.0 through 11.1</td>
  293. <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>
  294. <td>November 2009</td>
  295. </tr>
  296. <tr class="odd_tr">
  297. <td>Intel C++ Compiler for Windows 64-bit 10.0 through 11.11</td>
  298. <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>
  299. <td>November 2009</td>
  300. </tr>
  301. <tr>
  302. <td>Metrowerks CodeWarrior 8.3</td>
  303. <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>
  304. <td>August 2008</td>
  305. </tr>
  306. <tr class="odd_tr">
  307. <td>Metrowerks CodeWarrior 9 through 9.5</td>
  308. <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>
  309. <td>July 2007</td>
  310. </tr>
  311. <tr>
  312. <td>Microsoft Visual C++ 6.0 Service Pack 5</td>
  313. <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>
  314. <td>August 2008</td>
  315. </tr>
  316. <tr class="odd_tr">
  317. <td>Microsoft Visual C++ 7.0</td>
  318. <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>
  319. <td>March 2008</td>
  320. </tr>
  321. <tr>
  322. <td>Sun Studio 10 through 12 Update 1 for Solaris</td>
  323. <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>
  324. <td>November 2009</td>
  325. </tr>
  326. </table>
  327. </p>
  328. <hr>
  329. <div class="prev_link"><a href="reference/key_extraction.html"><img src="prev.gif" alt="key extraction" border="0"><br>
  330. Key extraction
  331. </a></div>
  332. <div class="up_link"><a href="index.html"><img src="up.gif" alt="index" border="0"><br>
  333. Index
  334. </a></div>
  335. <div class="next_link"><a href="performance.html"><img src="next.gif" alt="performance" border="0"><br>
  336. Performance
  337. </a></div><br clear="all" style="clear: all;">
  338. <br>
  339. <p>Revised August 20th 2014</p>
  340. <p>&copy; Copyright 2003-2014 Joaqu&iacute;n M L&oacute;pez Mu&ntilde;oz.
  341. Distributed under the Boost Software
  342. License, Version 1.0. (See accompanying file <a href="../../../LICENSE_1_0.txt">
  343. LICENSE_1_0.txt</a> or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">
  344. http://www.boost.org/LICENSE_1_0.txt</a>)
  345. </p>
  346. </body>
  347. </html>