A list of user-visible changes, in chronological order
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
.
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
.
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.
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.h | std::__new_alloc | memory |
__gnu_cxx::malloc_allocator<T> | ext/malloc_allocator.h | std::__malloc_alloc_template<int> | memory |
__gnu_cxx::debug_allocator<T> | ext/debug_allocator.h | std::debug_alloc<T> | memory |
__gnu_cxx::__pool_alloc<T> | ext/pool_allocator.h | std::__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
Allocator | Include | Version |
---|---|---|
__gnu_cxx::array_allocator<T> | ext/array_allocator.h | 4.0.0 |
__gnu_cxx::throw_allocator<T> | ext/throw_allocator.h | 4.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.
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
.
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
.
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
.
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.