
C++ porting notes
-----------------

I originally wrote this code using gcc/g++ as the compiler.

Below is a list of changes I had to make to accomodate SGI, Sun and Intel C++
compilers.

o Explicitly instantiate templates only in g++ (#ifdef __GNUG__).

o Avoid global static data referenced by template code. These symbols
  become undefined in the instantiated template functions.
  I use local static data, or global extern data instead (the latter
  #ifndef __GNUG__).

o Avoid non-static inline functions in templates (.cc files).  They
  don't get properly instantiated by Sun CC and result in undefined
  symbols.

o Use Sun CC -xar option to build libraries. This includes needed
  template instances in the library (see the new $(ARCHIVE) macro to
  refer to the appropriate archive command).

o To work around an internal compiler error in gcc 2.7.2, I had to
  add empty destructors in a few classes. Howver, I no longer use gcc 2.7.2
  in testing, so current version are no longer guaranteed to work with it.

o Intel C++ doesn't support arrays of non-POD objects on the stack.  I had
  to replace those with matching calls to new/delete.

Compilers that work
-------------------

(as of last checking, meaning current versions may not work out of the box)

+ gcc/g++ 2.8.1, 2.95.3, 3.2 and 3.3
+ Sun SC4.0
+ SGI NCC
+ Intel C++ 7.1

Compilers that don't work on this code
--------------------------------------

- Sun SC3.0.1
- CenterLine (Sun version, as of 6/96)

