Copyright 2001 Karl Einar Nelson ------------------------------------------------------------------ The following things are required for Libsigc++. A good compiler with the following features - capable of handling numerous templates (>200) - proper template specialization - proper partial specialization - templates with default arguments. It works better with (but does not require) - template friend specialization - namespaces - void returns M4 to parse the header files if you wish to rebuild the headers from macro source. ================================================== Platform Issues: A number of platforms do not support global C++ objects in shared libraries. Although not required by this library, it may result in problems when building C++ libraries on those platforms. The work arround is to use statics in functions or pointers which must be initialized. Platforms known to have this bug include NetBSD, HP-UX 9, HP-UX 10, Solaris without patch. ================================================== Compiler Issues: UNIX ---- Cfront-based compilers: Fails ----- Forget it, get a modern c++ compiler. GNU G++ 2.7.2: Fails ----- Upgrade, new versions of GNU G++ are easily and freely available. A port to this compiler is possible with effort. GNU G++ 2.8: unknown (marginal on 1.0) namespaces: no partial specialization: yes void returns: yes ----- Is known to work correctly, but some performance may be subpar. Recommend upgrading to latest gcc. GNU egcs 1.0: unknown (marginal on 1.0) namespaces: no partial specialization: yes void returns: yes ----- Is known to work correctly, but some performance may be subpar. Recommend upgrading to latest gcc. GNU egcs 1.1: unknown (pass on 1.0) namespaces: yes partial specialization: yes void returns: yes ----- Some issues with multiple inheritance require swapping around object declaration orders. Known problems with dynamic cast in constructors. GNU gcc 2.95.2: works namspaces: yes partial specialization: yes void returns: yes ----- Some issues with multiple inheritance require swapping around object declaration orders. Known problems with dynamic cast in constructors. ABI is not compatible with egcs nor 2.96, thus do not mix binaries. GNU gcc 2.96 (redhat): unknown namespaces: yes partial specialization: yes void returns: yes ----- Compiler is slightly more picky than 2.95.2 thus older code may fail without minor corrections. ABI is not compatible with previous versions, do not mix binaries. HP C++: fails ----- This is a cfront compiler. No where close. Get a modern c++ compiler. HP aC++ A.01.22: unknown (works on 1.0) namespaces: yes partial specialization: yes void returns: yes (only most recent version) ----- HP improved template support thus allowing compilation. Earlier compilers lacked support for void returns and proper templates. Missing - use one below MipsPro 7.3 Compler on Irix: unknown (marginal on 1.0) namespaces: yes partial specialization: yes void returns: no ----- This compiler is barely within the range of usable compilers. Requires compiling a specialization for all types in library due to non-standard return behavior. Should be usable. In effort to cut compile times a void return kludge is used in place of partial specialization. Requires a switch to get templates right. Use CC=cc CXX=CC CPPFLAGS="-ptused" ./configure Missing - use one below SunPro C++ 4.1: fails namespaces: no partial specialization: no void returns: no ----- lacks basic template support. SunPro C++ 5.0: fails namespaces: yes partial specialization: yes void returns: no specialize references: no member templates: no use of traits: no ----- Lack of traits and member templates kill the current formulation. Port possible but functionality damaged. SunPro Forte C++ 6.0: fails namespaces: yes partial specialization: yes void returns: no specialize references: no member templates: no use of traits: no ----- NON-UNIX -------- Visual C++ 5.0: unknown (special on 1.0) namespaces: yes partial specialization: no void returns: no ----- Although not quite up to par, a port was completed and should be the basis for porting back to other earlier compilers. VC++ lacks the ablity to use optional class arguments so marshallers must be explicitly declared. (see doc/win32) Borland C++ builder 4: unknown (pass on 1.0) namespaces: yes partial specialization: yes void returns: yes ----- This was a clear pass in 1.0, needs testing for 1.1. Metrowerks CodwWarrior 6: unknown (pass on 1.0) namespaces: yes partial specialization: yes void returns: yes ----- 1.0 required mild alterations, needs testing for 1.1. ================================================== Some compilers have not yet fully adopted the standard header files. (Usually because they lack some compiler feature required for the standard header.) For those compilers a kludge is necessary to make the same code compile on both standard and non-standard headers. Add the following file to the standard include path. #ifndef IOSTREAM_KLUDGE #define IOSTREAM_KLUDGE #include namespace std { void iostream_kludge(); }; #endif