blob: 19f79a5c22a43336204c8a7ebe1e20b361b67125 [file] [log] [blame]
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<!-- Copyright Aleksey Gurtovoy 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.3.6: http://docutils.sourceforge.net/" />
<title>THE BOOST MPL LIBRARY: Portability</title>
<link rel="stylesheet" href="../style.css" type="text/css" />
</head>
<body class="docframe">
<table class="header"><tr class="header"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./dependencies.html" class="navigation-link">Prev</a>&nbsp;<a href="./broken-integral-constant.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./dependencies.html" class="navigation-link">Back</a>&nbsp;Along</span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./technical-details.html" class="navigation-link">Up</a>&nbsp;<a href="../index.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./tutorial_toc.html" class="navigation-link">Full TOC</a></span></td>
<td class="header-group page-location"><a href="../index.html" class="navigation-link">Front Page</a> / <a href="./technical-details.html" class="navigation-link">Technical Details</a> / <a href="./portability.html" class="navigation-link">Portability</a></td>
</tr></table><div class="header-separator"></div>
<div class="section" id="portability">
<h1><a class="toc-backref" href="./technical-details.html#id73" name="portability">Portability</a></h1>
<p>It has always been a major goal of MPL development that a program
using the MPL should compile and run without modification on a wide
variety of compilers. To this end, the library goes to great
lengths to hide the quirks of less-than-perfect compilers. Of
course, there is only that much that you can do about an utterly
broken compiler. This section describes the places where those
quirks &quot;leak out&quot; of the library abstraction layer, and what you can
do about it when they do.</p>
<p>With respect to MPL compatibility we divide C++ compilers roughly
into three categories:</p>
<ol class="upperalpha simple">
<li>Reasonably conforming compilers that &quot;just work&quot; with the MPL.</li>
<li>Not-so-conforming compilers that work but require some workarounds in user code.</li>
<li>Compilers that are so broken that it's not practical to use them for any serious
metaprogramming work.</li>
</ol>
<p>We haven't tested every compiler in existence (simply because we don't have access to
all of them), but chances are the table below
will give you the information you are looking for. Please note that
the fact that one version of a compiler appears
in this list as &quot;Not supported&quot; does <em>not</em> mean that future versions are also
unworkable — some vendors are working hard to correct the
problems... and, as of this writing (late 2004), some are not.</p>
<p>Please keep in mind that this is not a complete list!</p>
<a class="target" id="compatibility-table" name="compatibility-table"></a><table border="1" class="table">
<colgroup>
<col width="27%" />
<col width="11%" />
<col width="11%" />
<col width="51%" />
</colgroup>
<thead valign="bottom">
<tr><th>Compiler</th>
<th>Versions</th>
<th>Category</th>
<th>Problematic Areas (if any)</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>Borland C++</td>
<td>5.6.4</td>
<td>B</td>
<td><a class="reference" href="./incomplete-support-for.html">Lambda Expressions</a>, <a class="reference" href="./broken-integral-constant.html">Integral Constant Expressions</a></td>
</tr>
<tr><td>Borland C++</td>
<td>5.6.1</td>
<td>C</td>
<td><strong>Not supported</strong></td>
</tr>
<tr><td>Comeau C/C++</td>
<td>4.2.45,
4.3.3</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>Compaq C++ (Tru64 UNIX)</td>
<td>6.5</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>GCC</td>
<td>3.2.2,
3.3.1, 3.4</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>GCC</td>
<td>2.95.3</td>
<td>B</td>
<td><a class="reference" href="./broken-integral-constant.html">Integral Constant Expressions</a></td>
</tr>
<tr><td>HP aCC</td>
<td>3.55</td>
<td>C</td>
<td><strong>Not supported</strong></td>
</tr>
<tr><td>Intel C++</td>
<td>7.1, 8.0</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>Metrowerks CodeWarrior</td>
<td>8.3, 9.2</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>Microsoft Visual C++</td>
<td>7.1</td>
<td>A</td>
<td>&nbsp;</td>
</tr>
<tr><td>Microsoft Visual C++</td>
<td>6.0 sp5,
7.0</td>
<td>B</td>
<td><a class="reference" href="./incomplete-support-for.html">Lambda Expressions</a>, <a class="reference" href="./eti.html">ETI</a>, <a class="reference" href="./broken-integral-constant.html">Integral Constant Expressions</a></td>
</tr>
<tr><td>SGI MIPSpro</td>
<td>7.3</td>
<td>B</td>
<td><a class="reference" href="./broken-integral-constant.html">Integral Constant Expressions</a></td>
</tr>
<tr><td>Sun CC</td>
<td>5.6</td>
<td>C</td>
<td><strong>Not supported</strong></td>
</tr>
</tbody>
</table>
<ul class="toc simple" id="outline">
<li><a class="reference" href="./broken-integral-constant.html" id="id74" name="id74">Broken Integral Constant Expressions</a></li>
<li><a class="reference" href="./incomplete-support-for.html" id="id75" name="id75">Incomplete Support for Lambda Expressions</a></li>
<li><a class="reference" href="./eti.html" id="id76" name="id76">ETI</a></li>
</ul>
</div>
<div class="footer-separator"></div>
<table class="footer"><tr class="footer"><td class="header-group navigation-bar"><span class="navigation-group"><a href="./dependencies.html" class="navigation-link">Prev</a>&nbsp;<a href="./broken-integral-constant.html" class="navigation-link">Next</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./dependencies.html" class="navigation-link">Back</a>&nbsp;Along</span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./technical-details.html" class="navigation-link">Up</a>&nbsp;<a href="../index.html" class="navigation-link">Home</a></span><span class="navigation-group-separator">&nbsp;|&nbsp;</span><span class="navigation-group"><a href="./tutorial_toc.html" class="navigation-link">Full TOC</a></span></td>
</tr></table></body>
</html>