Front Page / Technical Details / Portability

Portability

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 "leak out" of the library abstraction layer, and what you can do about it when they do.

With respect to MPL compatibility we divide C++ compilers roughly into three categories:

  1. Reasonably conforming compilers that "just work" with the MPL.
  2. Not-so-conforming compilers that work but require some workarounds in user code.
  3. Compilers that are so broken that it's not practical to use them for any serious metaprogramming work.

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 "Not supported" does not 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.

Please keep in mind that this is not a complete list!

Compiler Versions Category Problematic Areas (if any)
Borland C++ 5.6.4 B Lambda Expressions, Integral Constant Expressions
Borland C++ 5.6.1 C Not supported
Comeau C/C++ 4.2.45, 4.3.3 A  
Compaq C++ (Tru64 UNIX) 6.5 A  
GCC 3.2.2, 3.3.1, 3.4 A  
GCC 2.95.3 B Integral Constant Expressions
HP aCC 3.55 C Not supported
Intel C++ 7.1, 8.0 A  
Metrowerks CodeWarrior 8.3, 9.2 A  
Microsoft Visual C++ 7.1 A  
Microsoft Visual C++ 6.0 sp5, 7.0 B Lambda Expressions, ETI, Integral Constant Expressions
SGI MIPSpro 7.3 B Integral Constant Expressions
Sun CC 5.6 C Not supported