The following fix was made in 4.0 since 4.0 Release Candidate :

	* _threads.h/_config.h : for all platforms, static mutexes made non-indirect

	* _iterator_base.h : made possible to choose between iterator_traits approach
	  and old-style iterator queries like iterator_category(), value_type(), etc. 
	  (Thanks to John R. Bandela for pointing this out)
	* _config.h, stl_user_config.h : introduced __STL_OLD_HP_ITERATOR_QUERIES switch to
	  allow old-style and new-style iterator queries (for all compilers). 
	  iterator_traits<> made always defined. 

	* _ptr_specialize.h - specializations of type_traits<> for compilers w/o partial spec
	  moved into separate file. Added iterator_traits<> specializations for pointer types
	  for __STL_NO_OLD_HP_ITERATOR_QUERIES case. Macro __STL_POINTERS_SPECIALIZE is now available
	  to specialize both type_traits and iterator_traits for a pointer to user-defined 
	  type (latter for standard-style iterator queries mode only)

	* vc5.mak : __STL_NO_FORCE_INSTANTIATE flag restored

	* _site_config.h : if __STL_NO_NEW_IOSTREAMS or __STL_NO_IOSTREAMS specified, 
	 SGI iostreams are being turned off. __STL_NO_SGI_IOSTREAMS moved into stl_user_config.h
	(Thanks to Sathish T C for the report)

	* stl_watcom.h : _REENTRANT is being set if _MT is set (thanks to Ricardo E. Gayoso for the input)
	
The following fix was made in 4.0 Release Candidate :
	* _threads.h, _alloc.c : fixed use of _STL_mutex_base instead of _STL_STATIC_MUTEX macro 

The following changes were made in 4.0 Release Candidate since 4.0 beta 8:

	* fstream.cpp : WIN32 fstreambuf::open flag mapping fixed
	  (thanks to Alberto Barbati for the reports)

	* ctype.cpp : fixed classic table regarding ios_base::print/ios_base::space
	  conflict (thanks to Alberto Barbati for the report)

	* cmath : added same workaround for SUN's math exception/std::exception name clash
	  as was there in math.h before
	
	* _streambuf.c : added "typename" to out-of-line functions (thanks to Michael Tsirkin for the report)

	* README fixed to be consistent about SGI iostreams setting (thanks to Ed Brey for the report)

	* _bitset.h : fixed SUN CC 4.2 crash with -g option (thanks to Alex Vanic for the report),
	  fixed bug in bitset<>::reference base bitset typedef

	* _threads.h/.c  - fixed issue with inconsistent system's macro for initialization
	  and warning about partially bracketed initializer

	* debug/_vector.h : fixed _Vector_nonconst_traits specialization for bit_vector
	  (thanks for Dave Abrahams for the fix & reminder)

	* config/msvc.h - addidional level 4 warnings suppressed (thanks to Ed Brey for the report) 
	* _ios.h : fixed DLL export decl for MSVC (thanks to Alberto Barbati for the report)

	* stdio_streambuf.cpp : compatibility fix for glibc 2.2 (thanks to Bill Shanahan for the patch)
	* _iterator_base.h : added iterator<output_iterator_tag, void,..> specialization;
	  _stream_iterator.h : ostream_iterator changed to inherit from iterator<>
	 (thanks to Raphael Bossek for the report)

	* INSTALL : added some exaples and fixed typos (thanks to Beman Dawes for the report)

	* _site_config.h : more consistency checks for MT (thanks to John Maddock for the input)

	* _messages_facets.h : added DLL export decls (thanks to John Maddock for the report)

	* complex_io_w.cpp : fixed specialization syntax for aCC (thanks to Paul E. Blanchard for the report)

	* complex_exp.cpp : fixed pow() bug for negative arguments (thanks to Anton Sergeev for the report)
	* _fstream.h/_streambuf.h : MRC/MPW workarounds (thanks for Tsutomu Yoshida for the report)

	* using/fstream.h : added missing end-of-line (thanks to Jean-Francois Panisset for the report)

	* <typeinfo> : workaround for VC++ 6.0 defining type_info in gobal namespace (thanks to Bosko Ivanisevic for pointing that out)

	* _threads.h/_threads.c/pthread_alloc : improved pthreads portability (thatnks to Michael Tsirkin for the patch) 

	* _debug.h/_debug.c : __STL_ASSERT/__STL_VERBOSE_ASSERT/__STL_VERBOSE_RETUN macros guarded to be overridable by user (thanks to Tony Gould for the input)

	* _valarray.h : added assert to operator= 

	* config/vc_select_lib.h : added _AFXDLL recognition (thanks to Andrew Phipps for input)

	* _rope.h : added default constructors to please gcc-2.7.2

	* _set.h/_hash_set.h : pointer and reference typedefs fixed (thanks to Anton Sergeev for the report)

	* stl/_config.h : stl_user config.h included prior to other parts of configuration
	(thanks to Frank Samuel for the report)
	
The following changes were made in 4.0 beta 8 since 4.0 beta 7:

	* Merged changes for 06/08 SGI library snapshot; mostly in locale
	
	* Merged series of fixes/workarounds by Tsutomu Yoshida (thanks!):
	*   _rope.c - fixed memory leak bug;	
	*   _debug.c/_debug.h - added extra zero-initialization for more robustness;
	*   _list.h - MPW - specific fixes;
	*   _hashtable.h - fixed debug renaming clash for __STL_USE_ABBREVS 
	*   EH workarounds to make Apple compilers behave

	* _fstream.c : fixed tellg() bug in text mode

	* <csignal> : added sig_atomic_t import

	* series of fixes for HP aCC 1.23 ( thanks to Michael Tsirkin for the patch ):
	  _bvector.h : all relops are specialized;
	  stl_hpacc.h - fixed config;
	  hpacc.mak : added makefiles for HP aCC in src and test
	  debug/_iterator.h, debug/_vector.h - removed future errors due to baseclass member use 
	
	* <cstdlib> : added import of system() call (thanks to Petr Ovchenkov for the report) 

	* _REENTRANT is now set by default to be on for all SGI iostreams compilations.
	  Same is being enforced if SGI iostreams are used.
	
	* _pair.h : added workaround for make_pair in case of char literals 
	  (extension, only works with partial function order)

	* config/stl_gcc.h - fixed configuration problem for "g++-3" directory used in Cygnus and Mingw 
	  distributions for gcc-2.95.2, while all other platforms use "g++". Added recognition section.
	  Thanks to Dave Abrahams for the report.

	* config/stl_mlc.h : added support for MLC compiler (thanks to Anton Sergeev for the patch)

	* <memory> : auto_ptr simplified (thanks to Kon Tantos for problem report)
	
	* num_get.cpp : included <ostream> to get external symbols right. 

	* stl_ibm.h : __STL_NO_TYPEINFO added for OS/2 (thanks to Willie Arbuckle for the report)

	* stl_bc.h  : fixed enforcement of static library until dynamic made to work (thanks to J. Lambert for the report) 
	* src/stlport.rc : improved version definition to work with mingw32, <winres.h> changed to <windows.h>
	
	* src/mingw32.mak : Made use of stlport.rc for DLL build (thanks to Danny Smith for the suggestion)
	* debug/_vector.h : name clash removed for _Base (thanks to Will Fike for the report)

	* _monetary.h - added "static const bool intl" member to meneypunct<> templates 
	  (thanks to Anton Sergeev for the report)

	* _bitset.h : added forward friend decraration for reference (thanks to Anton Sergeev for the report)

	* _tree.h : made _Rb_tree_base_iterator::_M_node initialized in default constructor (thanks to Dean Sturtevant for the report)

	* _set.h : reinterpret_cast<> changed to C-style cast (thanks to Dave Abrahams for the suggestion)

	* Use of raw SGI allocators (like __node_alloc) as an allocator parameter deprecated, 
	  available only with __STL_USE_RAW_SGI_ALLOCATORS macro. May be removed later.
	  __allocator<T> still available unless __STL_NO_EXTENSIONS is specified

	* _limits.h/_limits.c - alignment fix for Solaris;
	* Modified __format_float* routines to take long double as parameter;
          (thatnks to Anthony Williams for the patch)

	* debug/_iterator.h - wrappers for noncompliant compilers moved under 
	  #ifdef __SGI_STL_NO_ARROW_OPERATOR  (thanks to Dave Abrahams for the input)

	* _numeric_facets.h - num_put<> , num_get<> virtual members made outline to work
	  aroung gcc-2.95 bug.
	
	* <cstdio> : undefined obsolete C macros : getchar/putchar & the like.

	* ctype.cpp : fixed bug with ctype<char>::is (const char*, const char*, mask)
	
	* ctype.cpp : fixed is(print) for certain platforms where print is a separate flag

	* ftstream.cpp : fixed corner case bug for Win32 text output (thanks for Dirk Schreib for the report) 

	* _streambuf.h, _fstream.h, stdio_strembuf.h : fixed overflow/pbackfail() virtuals definition;
	* _bitset.h : _M_copy_from_string fixed for non-member-template case (thanks to Alex Vanic for the report)

	* gcc-glibc.mak, common_macros.mak : GLIBC compilation fixes (thanks to Thomas Witt for the report)
	* WCHAR_MIN, WCHAR_MAX definitions moved from <limits> to <cwchar>

	* char_traits<char>::to_char_type : parameter changed to int

	* <cstddef> included in <new> (for size_t)

	* _codecvt<>::do_length: fixed first parameter to be const mbstate_t &;
	  virtual fns moved into .cpp, to work aroung gcc bugs

	* _complex.h : fixed complex<>::operator= and constructors signature to take const T& 

	* _istream.c : fixed formatted input involving binary '0'

	* locale_impl.cpp : insertion of time_put<wchar_t> fixed
	
The following changes were made in 4.0 beta 7 since 4.0 beta 6:

       	* Merged series of fixes/workarounds by Tsutomu Yoshida (thanks!):	
       	* cmath,  _complex.h, stl_apple.h, _deque.h - MPW/MRC specific workarounds
       	* _bitset.h - removed the obsolete _WordT template parameters.
       	* _ctype.h, _codecvt.h, _collate.h, _istream.h,     _messages_facets.h, _monetary.c
       	  _monetary.h, _numeric_facets.h,  _time_facets.h - added workaround for locale's nested class.
       	* _ostream.c_ostream.h - added proposed modification against the <ostream> circular inclusion problem.
       	* test/eh/test_deque.cpp - removed the obsolete template argument

	* _bitset.h - removed obsolete adaptor (thanks to Alex Vanic for the report)

	* _[io]stream.h - removed extra DLL specs (thanks to Danny Smith for the report)

	* stl_msvc.h - fixed bug caused static lib to always be selected
	
	* gcc.mak - fixed AR definition for static link 

	* Added workaround for static locale::id member in DLL for mingw32 (thanks for Danny Smith for the report)
	
	* _string_io.h : added _widen() to get getline() compile with wchar (somewhat missing in b6 , thanks to Mikhail Leonov for reminder)
	
	* threads.h - fixed guards for DreamSega WinCE (thanks to Ben Nason for the report)

	* fstream.cpp : fixed truncation for WIN32 (thanks to Bruce Alderson for the report)

	* _istream.c/_M_ignore_unbuffered() - fixed count bug 

	* _istream.c/ readsome() : fixed extra failbit setting on eof

	* __get_integer - enhanced using a table; input value made unchanged in case of error.

	* __get_base_or_zero - more code factored out

	* stl_wince.h : fixed assert() definition for Win CE (thanks to Andrew Waters for the report)

	* vc_select_lib.h " fixed __declspec selection for Win CE (thanks to Andrew Waters for the report)

	* _rope.c - fixed bug in _S_destr_concat_char_iter (thanks to E.Musser for the fix)

	* debug/_vector.h - fixed DLL export for vector<void*>

	* _vector.h, _deque.h, _bvector.h - obsolete guards around at() methods removed ;
	* type_traits.h - WinCE compatibility fixes for -> operator definition ;
	* _vector.h, _deque,h - removed extra casts (thanks to Andrew Waters for the report)

	* _algobase.h - optimized lexicografical_compare() overload for char*
	
The following changes were made in 4.0 beta 6 since 4.0 beta 5:

	* Merged changes from SGI STL snapshots 04/03, 04/14, 04/18.

	* Iostreams ported to Apple MPW/MRC (thanks to Tsutomu Yoshida for the contribution)

	* Iostreams ported to OSF1/Tru64 (thanks to Marc W. Mengel for the contribution)

	* Iostreams ported to FreeBSD ( Thanks to Sms for the contribution)
	
	* <deque> : extra template parameter removed
	
	* locale::id, locale::facet : reverted to nested classes as standard prescribes
	
	* _string_io.h : added _widen() to get getline() compile with wchar (thanks to Mikhail Leonov for the patch)

	* collate_byname[_w].cpp : fixes for VC++ 5.0 build w/__STL_DEBUG (thanks to Petr Ovchenkov for the patch)

	* <complex> : __STL_COMPLEX_NAMESPACE defined before inclusion of impl. header 
	              (thanks to Matthew Kelly for the patch)

	* makefiles in "src" : improved to get each compiler to put object files in separate directory :
	  ./obj/$(COMP)/Debug, etc. COMP is given some default value for each compiler, but may be also overridden.

	* "src" subdirectory : added stlport_prefix.h file for precompiled header support; 
	   VC++ makefiles make use of them  
	
	* stl/_iterator_base.h : provided __STL_NONTEMPL_BASE_MATCH_BUG 
	  workaround for new form of distance().

	* <limits> : added cast to WCHAR_MAX definition (thanks for Dave Abrahams for the report).  

	* stl_user_config.h, stl/_config.h - setting splitted and organized more properly. 

	* time_facets.cpp - extra instantiations removed (thanks to Matti Rintala for the report).

	* stdio_streambuf.h : added explicit qualifications of C lib functions for gcc-2.91

	* SGI code used for compatibility w/older versions are guarded with #ifndef __STL_NO_ANACHRONISMS

	* SGI extensions are guarded with #ifndef __STL_NO_EXTENSIONS

	* SGI/HP anachronisms are guarded with #ifndef __STL_NO_ANACHRONISMS

	* <typeinfo> : .h file included if __STL_NO_NEW_NEW header is set 
	 (thanks to Willie Arbuckle for the report)

	* Suppresed spurious BC55 warnings about iterators

	* complex_io.h - fixed operators declarations for MetroWerks 	

	* debug/_slist.h - cleaned up use of stl_debug_do obsolete macro (thanks to Matti Rintala)

	* debug/_iterator.h, debug/_vector.h - fixed relaxed iterator constructors (thanks to Dave Abrahams for the patch) 

	* stl/_complex.h - fixes for gcc-2.95 on IRIX (thanks to Marc W. Mengel) 
	
        * debug/_iterator.h : fixed relaxed const/non-const iterator construction for debug mode
	  (thanks to Dave Abrahams for the patch)
	
	* collate : added workaround for SUNpro linker (thanks to Petr Ovchenkov for the fix)

	* _ios.h, _streambuf.h - added obsolete stuff required by the standard

	* _config.h/stdexcept - introduced __STL_NOTHROW_INHERITED to be used when we actually need
	  exception specification due to inheritance (thanks to Joe for the report)

	* _locale.h:104 : fixed ummaned parameters

	* _tempbuf.h - fixed absent inclusion of _tempbuf.c

	* <exception> : relaxed rules for importing vendor symbols

	* _deque.h - added != operator

	* _streambuf.h - fixed snextc() bug for wchar_t

	* <ostream>, _numeric_facets.h - circular dependency resolved

	* stl/_iosfwd.h - added include guard

	* basic_[io]stream::sentry made inner class again (as per standard) 
	  for non-DLL compilations.

	* vector<void*> is used in locale implementation to reduce code bloat,
	  vector<void*> exported from DLL

	* <stdexcept> : exported more stuff

	* stl_intel.h : ICL config merged into stl_msvc.h

	* gcc.mak - fixed for shared target
	
The following changes were made in 4.0 beta 5 since 4.0 beta 4:

	* _hastable.c:263 : removed inneeded cast (thanks to Will Fike for the report)

	* debug/_string.h :  added conversion to non-SGI string (thanks to Todd Richmond for the report)

	* _complex.h : fixed DLL declarations for i/o operators

	* _ostream.h : fixed sentry behavoiur and DLL specs.

	* _istream.h : fixed DLL specs, optimized some try/catch blocks

	* _vector.h : fixed vector::insert body definition for __STL_INLINE_MEMBER_TEMPLATES

	* <exception> : more compilers listed as having full exception header

	* debug/_debug.h : added namespace to __STL_ASSERT for EH test which uses this internal macro.

	* resource info fixed (thanks to Michael Entin for the report)

	* debug/_string.h : fixed _M_start resolution bug (thanks to Rob for the report )

	* <new> : added import of new_handler stuff from vendor namespace (thanks to Niran Bala for the report).

	* src/c_locale_glibc - missed directory contents restored (thanks to Todd Rider for the report)

	* mwerks_prj - project updated for new file set, target names for x86 changed to conform to common schema

	* _ostream.c/_istream.c : fixed lookup for _S_eof symbol (thanks to Anton Sergeev for the report)

	* _ios.h - fixed VC++ DLL warning for specializations

	* stl_ibm.h - disabled "long long" due to incomplete support on MVS by request (thanks to Tinny Ng)
	
	* char_traits.h - worked around weird gcc internal bug (__sz identifier changed to _Sz)
	
The following changes were made in 4.0 beta 4 since 4.0 beta 3:

	* "src" directory : source divided into smaller parts to be more manageable and to
	  get more cache locality

	* throw specifications removed (macros made void) - thanks to Dave Abrahams for the suggestion
	
	* stl/_list.c - fixed reverse() "inline", 
	  _deque.h - fixed cast bug for xlC (thanks to Alex Vanic for the reports)
		
	* stl/_strstream.h - fixed DLL specs (thanks to Parcival Willems for the report)

	* stl/_string.h, debug/_string.h - fixed conversion from native string with __STL_DEBUG
	  (thanks to Todd Richmond for the report).

	* stl/_istream.h - fixed clash of "__N" symbol with ctype.h macro for some compilers
	  (thanks to Kees de Bruin for the report)

	* Configuration fixed for Borland C++ 5.02 compiler [ deque still does not work with it ]

	* gcc-2.7.2 configuration fixed	

	* SGI iostreams now work for Borland 5.5 with static lib , some problems with
	  locale initialization when DLL is used.
	
	* __get_c_string exported in DLL (thanks to Ed Ball for the report).

	* ENDIAN fixes for CodeWarrior/DEC (thanks to Kevin Wooten for bringing this up)

	* wrap_std/h/strstream.h - added missing wrapper (Thanks to Laurent for the report)

	* stl_hpacc.h - fixed #endif bug, 
	  _limits.h/.c - fixed array initialization, 
	  _string_io.h, _locale.h - fixed circular dependancy,
	  _set.[hc], _hashtable.c, _set.h - added __REINTERPRET_CAST need by some compilers;
	  _i[o]stream.c, _rope.[hc] - lookup fixed for dependant symbols 
	  (thanks to Alain Miniussi for the reports)
	
After-release minor bugfixes for beta3:
	
	* stl/_list.c - fixed reverse() [ new SGI code, merged unported first ]
	  Thanks for everybody who reported it.
	
	* stl/_bvector.h : fixed ambiguity problem with relational iterators
	  for __STL_NO_BOOL case (thanks to Alex Vanic for the report).

	* stl/_alloc.c, stl/_threads.c - fixed static member definitions for compilers
	  that lack automatic static data members (gcc-2.7). Thanks to Huang-Ming Huang 
	  for the report. 

	* standard wide streams initialization bug on Win32 fixed (thanks to Harold Putman for the
	  report)
	
The following changes were made in 4.0 beta 3 since 4.0 beta 2:

	* Merged SGI changes from 02/18 snapshot.
	
        * Ming32W (gcc Win32 port using MS runtime lib) is now fully supported. 

	* .dll build schema improved, now builds with mingw32 and Borland C++
	  (Borland has some problem with numeric i/o)
	
	* VC++ version bugfixes in <xstring>/<xutility>/<xstring> 
	  (thanks to Todd Richmond for the report)

	* _bvector.h - relational operators defined only for "bit_vector", 
	   not for "vector" specializations (thanks to Edward Ball for the report)

	* src/locale_impl.h - fixed multiple defined symbol problem with gcc
	  (Thanks to Matti Rintala for the report)

	* config/stl_ibm.h - __STL_NO_TYPEINFO added (thanks for Tinny Ng).
	
	* <string> : _stl_string_io.h/c introduced to fight inter-dependencies

	* _bvector.h - added fix for -tempinc compilation on AIX (thanks to Alex Vanic for the patch)

	* fstream.cpp - _M_write bug for Win32 text mode fixed (thanks to Mike Pyle)

	* _string.h : debug version included prior to _string.c;

	* debug/_debug.h/.c, debug/_deque.h, debug/_string.h - fixed debug mode bugs;
	  Apple compilers config fixes / iostream wrapping fixes / EH test fixes,
	  (thanks to Tsutomu Youshida for the patch)

	* csetjmp/setjmp.h - guards added against VC++ #defines (thanks to Gavin Wood)

	* stl/_iosfwd.h : __STL_DEFAULT_CONSTRUCTED used instead of __STL_NULL_CHAR_INIT
	(thanks to Alex Vanic for the report)

	* __stl_get_c_string() - made extern non-template for SGI iostreams mode.

	* __cdecl calling convention fixes - now works for debug & non-debug code.

	* _limits.h/.c : static data moved from inline functions into a class.

	* stlport_msvc.rc resource file added for DLL's (thanks to Michael Entin)

	* stlport/config/stl_wince.h : added abort()/assert() definitions
	  (thanks to Gavin Wood for the report)

	* Initial iostreams port for xlC (thanks to Alexander Vanic for the patch).

	* config files - made safe for C compilers

	* src/c_locale_stub.c - made structure for full platform-dependent 
	  locales other than "C". Glibc implementation merged.
	
The following changes were made in 4.0 release candidate 2 since 4.0 release candidate 1:

	* Solid approach to __STL_DEFAULT_CONSTRUCTOR_BUG problem implemented,
	  rope.h typo fixed (thanks to Alex Vanic for the report) 

	* getline and stream operators moved from _istream.c to _string.c 
	  where they belong (thanks for Petr Ovchenkov)

	* <new> fixed to import nothrow and nothrow_t

	* Borland C++ 5.5 (free compiler) supported (iostreams won't compile yet).
	
	* SUN CC 6.0 EA - new features unabled (most announced features still don't work though)
	
	* HP ACC configuration updated, some fixes for new aCC beta(thanks to Alain Miniussi).

	* Windows CE compatibility fixed (thanks to Gavin Wood for the report)
	
	* <sstream> fixed for non-SGI case, ios.cpp bug in __STL_NO_EXCEPTIONS 
	  mode fixed, debug iterators fix (thanks to Todd Richmond).
	
	* VC++ 5.0 and 4.2 compatibility fixed (thanks to Ilya for the report)

	* __cdecl calling convention explicitly specified for VC++ & static/global functions.

	* vc_common.mk : debug type changed to CV (thanks to Mike Pyle for the solution)
	
	* fstream.cpp : Win32 text mode : bugs fixed, SGI code used.
	  fixed _M_open() creation flags for Win32 (thanks to Mike Pyle for the report)

        * "install" target added for VC++ to install .dll's into Win system directory.

	* __STL_USE_STATIC_LIB switch added to add flexibility to VC++ linking.
	
	* __stl_debug_message for WIN32/Unicode/MFC improved 
	  (thanks to Edward Ball, Chvetsov for the reports)

	* MVS fix for auto_ptr<> (thanks to Tinny Ng)

	* debug/_tree.h, debug/_vector.h "typename" fixes, thanks to Matti Rintala.

	* c_locale.h : fix for Solaris 2.5.x (thanks to B. K. Oxley)

	* _bvector.h : Watcom compatibility fixed (thanks to Ricardo E. Gayoso for the report)

	* __STL_DONT_REDEFINE_STD flag behaviour fixed
	
The following changes were made in 4.0 release candidate 1 since 3.2.2 Beta 4 :
	
	* Merged changes made to SGI standard library snapshot on 01/28.

	* Fixed bug with istream reading numbers in hex mode (thanks to Dave Abrahams
	  for the patch).

	* Debug mode redesigned (again) - no extra namespaces is being used
	  Finally, it works for MSVC and all other platforms.

	* __SGI_STL_OWN_IOSTREAMS made to be the default mode except few platforms
	  not provided with makefiles to build STLport yet.
	
	* Changed strategy on redefinig std:: namespace. 
	  prolog/epilog technology used to get clean namespace wrapping.
	  It also allows for managing stack of pragmas 
	  (see stlport/stl/config/_prolog.h,_epilog.h) to get rid of warnings.
	  Note : default namespace changed to _STL:: to satisfy implementation
	  constraints and to allow for more compact symbols. 
	  "stlport::" namespace is still defined for backwards compatibility.

	* iostreams library now compiles on HP with aCC (thanks to Steven Serocki for the patch).

	* Configuration for SUN Workshop 6.0 EA provided.
	
	* For VC++, corresponding [selected by /MT(d) or /MD(d) switch]
	  STLport iostreams library is being linked automatically - all you
	  need is to put library in lib search path or specify additional library path.

	* Ability to turn on all warnings in your own code if you're using 
	  a compiler with appropriate support (e.g. MSVC6).
	  
	* Small fixes posted to the forum integrated:
	
	 * config/stl_wince.h : added __STL_HAS_NO_NEW_C_HEADERS switch
	 * wrap_std/strsream  : fixed preprocessor bug, strstream.h included
	  when not using new-style headers
	 * other fixes
	
The following changes were made in 3.2.2 beta 4 since 3.2.2 Beta 3:

	* Merged changes made to SGI standard library snapshot on 01/10.

	* Major restructuring of header files - for maintainability and
	  8.3 filesystems benefit.

	* Major debug mode improvements - new debug mode now works with
	 VC++, gcc, intel, SUNpro, MetroWerks.

	* Regression test suite changed to new-style headers - thanks to
	  Dima Pasechnik for the initial port.
	
	* <rope> fixes for Watcom

	* many miscellanous fixes.
	
The following changes were made in 3.2.2 beta 3 since 3.2.2 Beta 2:

	* Merged changes made to SGI standard library snapshot in December.
	
	* std:: is not used for STLport namespace even with SGI iostreams,
	  to avoid possible clashes and facilitate 3rd-party library use.
          Same macro redefinition technique for stlport:: used to keep clients
	  code with literal std:: happy as in native iostreams mode.
	
	* C library headers wrapping changed to allow multiple inclusion tricks
	  (needed by gcc-2.95 mostly)
	
	* gcc-2.95 and CodeWarrior configurations updated.

	* HP aCC fixes applied.

	* Visual C++ - added static library targets, build refined.
	  Fixed memory-mapping bugs.
	
	* auto_ptr updated, now it passes polymorphic tests with VC++.

	* Many small bugfixes.
	
The following changes were made in 3.2.2 beta 2 since 3.2.2 Beta 1:

	* Fixed SUN CC deque<> problem with -g
	
	* Added configuration and makefiles for DEC VMS, Borland and Win32 gcc.

	* Merged changes made to November SGI standard library snapshot.

	* config changes - "configure" made obsolete and moved into "stlport/config/new_compiler".

	* __STL_TYPENAME_ON_RETURN_TYPE handling changed.
	
	* Miscellanous fixes.

The following changes were made in 3.2.2 Beta 1 since 3.2.1 release:

	* SGI iostreams adopted. To use SGI iostreams, user have to set
	  __SGI_STL_OWN_IOSTREAMS flag and to build the library in "src"
	  directory to link with. Please read INSTALL file for detailed
	  instructions.
	  Default setting is NOT to use SGI iostreams (wrappers used as before).

	* Debug mode completely redesigned - debug mode containers are 
	  implemented in terms of wrappers around non-debug ones.
	  That provides for more clean and efficient implementation and
	  binary compatibility between debug and non-debug versions.

	* Additional configurations added for platforms :
	     - gcc-2.95
	     - SUNpro CC 5.0 in "compatibility" mode
	  "configure" made obsolete.
	
	* Bugfixes reported by users since 3.2.1 release merged 

The following changes were made in 3.2.1 since 3.2 release:

	* Now, by default, STLPort renames std:: namespace for user
	  if __STL_USE_OWN_NAMESPACE is used. To make it possible, many new
	  wrapper headers introduced. Internally, STLport uses stlport:: namespace,
	  so no link- or run- time clashes are possible, and you don't have to rebuild
	  the runtime lib (which you don't want to).
	  This feature makes STLport usable out-of-the box, without any modifications
	  for client code, with any compiler.

	* Code bloat reduction : hashtable<T> uses vector<void*> internally.

	* Vector : efficiency/code bloat reduction fixes.

	* Visual C++ : DLL export is supported for allocators and strings. To use it, 
	  please define __STL_USE_DECLSPEC in all modules and __STL_DESIGNATED_DLL
	  for the DLL which is supposed to instantiate STLport exports (at least one
	  source of this DLL must include <string>.

        * Visual C++ : for MT synchronization, <windows.h> is not included anymore.
	
	* For Sunpro C++ 5.0 : all headers are linked into stlport/SC5, so only
	  one include path is needed. Note that SC5.0 has problems with relative 
	  search path. It is easy to work around : in your makefiles, instead of
	  "STL_INCL=../.." , write "STL_INCL=${PWD}/../..".

	* Configuration files provided for compilers : 
	   KAI C++
	   DEC C++ (6.x, 5.x)
	   Borland 5.02 is back on the road (finally !)
	  
	* Windows CE config provided for Visual C++.

	* __STL_NO_IOSTREAMS switch introduced for embedded platforms.
	
	* Lots of minor config fixes and improvements for various platforms.
