API Evolution and Deprecation History

A list of user-visible changes, in chronological order

3.0

Extensions moved to include/ext.

Include files from the SGI/HP sources that pre-date the ISO standard are added. These files are placed into the include/backward directory and a deprecated warning is added that notifies on inclusion (-Wno-deprecated deactivates the warning.)

Deprecated include backward/strstream added.

Removal of include builtinbuf.h, indstream.h, parsestream.h, PlotFile.h, SFile.h, stdiostream.h, and stream.h.

3.1

Extensions from SGI/HP moved from namespace std to namespace __gnu_cxx. As part of this, the following new includes are added: ext/algorithm, ext/functional, ext/iterator, ext/memory, and ext/numeric.

Extensions to basic_filebuf introduced: __gnu_cxx::enc_filebuf, and __gnu_cxx::stdio_filebuf.

Extensions to tree data structures added in ext/rb_tree.

Removal of ext/tree, moved to backward/tree.h.

3.2

Symbol versioning introduced for shared library.

Removal of include backward/strstream.h.

Allocator changes. Change __malloc_alloc to malloc_allocator and __new_alloc to new_allocator.

For GCC releases from 2.95 through the 3.1 series, defining __USE_MALLOC on the gcc command line would change the default allocation strategy to instead use malloc and free. (This same functionality is now spelled _GLIBCXX_FORCE_NEW, see this page for details.

Error handling in iostreams cleaned up, made consistent.

3.3

3.4

Large file support.

Extensions for generic characters and char_traits added in ext/pod_char_traits.h.

Support for wchar_t specializations of basic_filebuf enhanced to support UTF-8 and Unicode, depending on host. More hosts support basic wchar_t functionality.

Support for char_traits beyond builtin types.

Conformant allocator class and usage in containers. As part of this, the following extensions are added: ext/bitmap_allocator.h, ext/debug_allocator.h, ext/mt_allocator.h, ext/malloc_allocator.h,ext/new_allocator.h, ext/pool_allocator.h.

This is a change from all previous versions, and may require source-level changes due to allocator-related changes to structures names and template parameters, filenames, and file locations. Some, like __simple_alloc, __allocator, __alloc, and _Alloc_traits have been removed.

Default behavior of std::allocator has changed.

Previous versions prior to 3.4 cache allocations in a memory pool, instead of passing through to call the global allocation operators (i.e., __gnu_cxx::pool_allocator). More recent versions default to the simpler __gnu_cxx::new_allocator.

Previously, all allocators were written to the SGI style, and all STL containers expected this interface. This interface had a traits class called _Alloc_traits that attempted to provide more information for compile-time allocation selection and optimization. This traits class had another allocator wrapper, __simple_alloc<T,A>, which was a wrapper around another allocator, A, which itself is an allocator for instances of T. But wait, there's more: __allocator<T,A> is another adapter. Many of the provided allocator classes were SGI style: such classes can be changed to a conforming interface with this wrapper: __allocator<T, __alloc> is thus the same as allocator<T>.

The class allocator used the typedef __alloc to select an underlying allocator that satisfied memory allocation requests. The selection of this underlying allocator was not user-configurable.

Table B.1. Extension Allocators

Allocator (3.4)Header (3.4)Allocator (3.[0-3])Header (3.[0-3])
__gnu_cxx::new_allocator<T>ext/new_allocator.hstd::__new_allocmemory
__gnu_cxx::malloc_allocator<T>ext/malloc_allocator.hstd::__malloc_alloc_template<int>memory
__gnu_cxx::debug_allocator<T>ext/debug_allocator.hstd::debug_alloc<T>memory
__gnu_cxx::__pool_alloc<T>ext/pool_allocator.hstd::__default_alloc_template<bool,int>memory
__gnu_cxx::__mt_alloc<T>ext/mt_allocator.h
__gnu_cxx::bitmap_allocator<T>ext/bitmap_allocator.h

Releases after gcc-3.4 have continued to add to the collection of available allocators. All of these new allocators are standard-style. The following table includes details, along with the first released version of GCC that included the extension allocator.

Table B.2. Extension Allocators Continued

AllocatorIncludeVersion
__gnu_cxx::array_allocator<T>ext/array_allocator.h4.0.0
__gnu_cxx::throw_allocator<T>ext/throw_allocator.h4.2.0

Debug mode first appears.

Precompiled header support PCH support.

Macro guard for changed, from _GLIBCPP_ to _GLIBCXX_.

Extension ext/stdio_sync_filebuf.h added.

Extension ext/demangle.h added.

4.0

TR1 features first appear.

Extension allocator ext/array_allocator.h added.

Extension codecvt specializations moved to ext/codecvt_specializations.h.

Removal of ext/demangle.h.

4.1

Removal of cassert from all standard headers: now has to be explicitly included for std::assert calls.

Extensions for policy-based data structures first added. New includes, types, namespace pb_assoc.

Extensions for typelists added in ext/typelist.h.

Extension for policy-based basic_string first added: __gnu_cxx::__versa_string in ext/vstring.h.

4.2

Default visibility attributes applied to namespace std. Support for -fvisibility.

TR1 random, complex, and C compatibility headers added.

Extensions for concurrent programming consolidated into ext/concurrence.h and ext/atomicity.h, including change of namespace to __gnu_cxx in some cases. Added types include _Lock_policy, __concurrence_lock_error, __concurrence_unlock_error, __mutex, __scoped_lock.

Extensions for type traits consolidated into ext/type_traits.h. Additional traits are added (__conditional_type, __enable_if, others.)

Extensions for policy-based data structures revised. New includes, types, namespace moved to __pb_ds.

Extensions for debug mode modified: now nested in namespace std::__debug and extensions in namespace __gnu_cxx::__debug.

Extensions added: ext/typelist.h and ext/throw_allocator.h.

4.3

C++0X features first appear.

TR1 regex and cmath's mathematical special function added.

Backward include edit.

  • Removed

    algobase.h algo.h alloc.h bvector.h complex.h defalloc.h deque.h fstream.h function.h hash_map.h hash_set.h hashtable.h heap.h iomanip.h iostream.h istream.h iterator.h list.h map.h multimap.h multiset.h new.h ostream.h pair.h queue.h rope.h set.h slist.h stack.h streambuf.h stream.h tempbuf.h tree.h vector.h

  • Added

    hash_map and hash_set

  • Added in C++0x

    auto_ptr.h and binders.h

Header dependency streamlining.

  • algorithm no longer includes climits, cstring, or iosfwd

  • bitset no longer includes istream or ostream, adds iosfwd

  • functional no longer includes cstddef

  • iomanip no longer includes istream, istream, or functional, adds ioswd

  • numeric no longer includes iterator

  • string no longer includes algorithm or memory

  • valarray no longer includes numeric or cstdlib

  • tr1/hashtable no longer includes memory or functional

  • tr1/memory no longer includes algorithm

  • tr1/random no longer includes algorithm or fstream

Debug mode for unordered_map and unordered_set.

Parallel mode first appears.

Variadic template implementations of items in tuple and functional.

Default what implementations give more elaborate exception strings for bad_cast, bad_typeid, bad_exception, and bad_alloc.

PCH binary files no longer installed. Instead, the source files are installed.

Namespace pb_ds moved to __gnu_pb_ds.