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)