CppUnit's coding guidelines for portability:
--------------------------------------------

- don't explicitly declare CppUnit namespace, instead use macro
  CPPUNIT_NS_BEGIN and CPPUNIT_NS_END.

- don't explicitly use 'CppUnit' to refer to class in CppUnit namespace,
  instead use macro CPPUNIT_NS which expands to either 'CppUnit' or 
  nothing depending on the configuration.

- don't use the 'using directive', always use full qualification. For STL,
  always use std::.

- don't use C++ style cast directly, instead use CppUnit's cast macro
  (CPPUNIT_CONST_CAST).

- don't use the mutable keyword, instead do a const cast.

- don't use the typename keyword in template declaration, instead use 'class'.

- don't make use of RTTI (typeid) or dynamic_cast mandatory.

- don't use STL container directly, instead use CppUnit's wrapper located
  in include/cppunit/portability. This help support compilers that don't 
  support default template parameter and require an allocator to be 
  specified.

- don't use default template parameters. If needed, use STLPort wrapper
  technic (see include/cppunit/portability/).

- don't use templatized member functions (template method declared inside a
  class), instead declares them as simple template functions (even
  mainstream compiler such as VC++ 6 as trouble with them).

- don't use default parameter value in template function. Not supported
  by all compiler (on OS/390 for instance).

- don't use STL container at() method, instead use the array accessor [].
  at() is not supported on some gcc versions.

- dereferencing containers must be done by (*ref_ptr).data instead of
  ref_ptr->data.

In brief, it should be possible to compile CppUnit on a C++ compiler that do
not have the following features:
- C++ style cast
- mutable and typename keyword
- RTTI
- template default parameters
- templatized member functions (that is a template function declared within a
  class).
- namespace

As such, usage of those features should always be optional.

Following those guidelines should allow to compile on most compilers, as long
as STL are available (in std namespace or not), with some form of strstream and
iostream, as well as exception support.

--
Baptiste Lepilleur <gaiacrtn@free.fr>
