2012-08-29 06:44:10 +02:00
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2017-10-25 16:06:12 +02:00
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> < html xmlns = "http://www.w3.org/1999/xhtml" > < head > < meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" / > < title > API Evolution and Deprecation History< / title > < meta name = "generator" content = "DocBook XSL Stylesheets Vsnapshot" / > < meta name = "keywords" content = "ISO C++, api, evolution, deprecation, history" / > < meta name = "keywords" content = "ISO C++, library" / > < meta name = "keywords" content = "ISO C++, runtime, library" / > < link rel = "home" href = "../index.html" title = "The GNU C++ Library" / > < link rel = "up" href = "appendix_porting.html" title = "Appendix B. Porting and Maintenance" / > < link rel = "prev" href = "abi.html" title = "ABI Policy and Guidelines" / > < link rel = "next" href = "backwards.html" title = "Backwards Compatibility" / > < / head > < body > < div class = "navheader" > < table width = "100%" summary = "Navigation header" > < tr > < th colspan = "3" align = "center" > API Evolution and Deprecation History< / th > < / tr > < tr > < td width = "20%" align = "left" > < a accesskey = "p" href = "abi.html" > Prev< / a > < / td > < th width = "60%" align = "center" > Appendix B.
2009-04-16 01:31:04 +02:00
Porting and Maintenance
2013-02-12 00:24:26 +01:00
< / th > < td width = "20%" align = "right" > < a accesskey = "n" href = "backwards.html" > Next< / a > < / td > < / tr > < / table > < hr / > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h2 class = "title" style = "clear: both" > < a id = "appendix.porting.api" > < / a > API Evolution and Deprecation History< / h2 > < / div > < / div > < / div > < p >
2008-04-11 00:14:17 +02:00
A list of user-visible changes, in chronological order
2013-02-12 00:24:26 +01:00
< / p > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_300" > < / a > < code class = "constant" > 3.0< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
Extensions moved to < code class = "filename" > include/ext< / code > .
< / p > < p >
Include files from the SGI/HP sources that pre-date the ISO standard
are added. These files are placed into
the < code class = "filename" > include/backward< / code > directory and a deprecated warning
is added that notifies on inclusion (< code class = "literal" > -Wno-deprecated< / code >
deactivates the warning.)
2019-03-19 10:38:41 +01:00
< / p > < p > Deprecated include < code class = "filename" > < backward/strstream> < / code > added.< / p > < p > Removal of include < code class = "filename" > < builtinbuf.h> < / code > , < code class = "filename" > < indstream.h> < / code > , < code class = "filename" > < parsestream.h> < / code > , < code class = "filename" > < PlotFile.h> < / code > , < code class = "filename" > < SFile.h> < / code > , < code class = "filename" > < stdiostream.h> < / code > , and < code class = "filename" > < stream.h> < / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_310" > < / a > < code class = "constant" > 3.1< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p >
Extensions from SGI/HP moved from < code class = "code" > namespace std< / code >
to < code class = "code" > namespace __gnu_cxx< / code > . As part of this, the following
new includes are
2019-03-19 10:38:41 +01:00
added: < code class = "filename" > < ext/algorithm> < / code > , < code class = "filename" > < ext/functional> < / code > , < code class = "filename" > < ext/iterator> < / code > , < code class = "filename" > < ext/memory> < / code > , and < code class = "filename" > < ext/numeric> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
Extensions to < code class = "code" > basic_filebuf< / code > introduced: < code class = "code" > __gnu_cxx::enc_filebuf< / code > , and < code class = "code" > __gnu_cxx::stdio_filebuf< / code > .
< / p > < p >
2019-03-19 10:38:41 +01:00
Extensions to tree data structures added in < code class = "filename" > < ext/rb_tree> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
2019-03-19 10:38:41 +01:00
Removal of < code class = "filename" > < ext/tree> < / code > , moved to < code class = "filename" > < backward/tree.h> < / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_320" > < / a > < code class = "constant" > 3.2< / code > < / h3 > < / div > < / div > < / div > < p >
2019-03-19 10:38:41 +01:00
< / p > < p > Symbol versioning introduced for shared library.< / p > < p > Removal of include < code class = "filename" > < backward/strstream.h> < / code > .< / p > < p > Allocator changes. Change < code class = "code" > __malloc_alloc< / code > to < code class = "code" > malloc_allocator< / code > and < code class = "code" > __new_alloc< / code > to < code class = "code" > new_allocator< / code > . < / p > < p > For GCC releases from 2.95 through the 3.1 series, defining
2008-02-12 03:39:33 +01:00
< code class = "literal" > __USE_MALLOC< / code > on the gcc command line would change the
2019-04-25 00:16:45 +02:00
default allocation strategy to instead use < code class = "code" > malloc< / code > and
< code class = "code" > free< / code > . For the 3.2 and 3.3 release series the same
2012-08-23 10:37:19 +02:00
functionality was spelled < code class = "literal" > _GLIBCXX_FORCE_NEW< / code > . From
2019-04-25 00:16:45 +02:00
GCC 3.4 onwards the default allocator uses < code class = "code" > new< / code > anyway,
but for the optional pooling allocators the functionality is enabled by
setting < code class = "literal" > GLIBCXX_FORCE_NEW< / code > in the environment, see
2019-05-13 12:50:21 +02:00
< a class = "link" href = "mt_allocator.html" title = "Chapter 19. The mt_allocator" > the mt allocator chapter< / a >
2009-07-21 06:28:41 +02:00
for details.
2013-02-12 00:24:26 +01:00
< / p > < p > Error handling in iostreams cleaned up, made consistent. < / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_330" > < / a > < code class = "constant" > 3.3< / code > < / h3 > < / div > < / div > < / div > < p >
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_340" > < / a > < code class = "constant" > 3.4< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p >
Large file support.
2019-03-19 10:38:41 +01:00
< / p > < p > Extensions for generic characters and < code class = "code" > char_traits< / code > added in < code class = "filename" > < ext/pod_char_traits.h> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
Support for < code class = "code" > wchar_t< / code > specializations of < code class = "code" > basic_filebuf< / code > enhanced to support < code class = "code" > UTF-8< / code > and < code class = "code" > Unicode< / code > , depending on host. More hosts support basic < code class = "code" > wchar_t< / code > functionality.
< / p > < p >
Support for < code class = "code" > char_traits< / code > beyond builtin types.
< / p > < p >
Conformant < code class = "code" > allocator< / code > class and usage in containers. As
part of this, the following extensions are
2019-03-19 10:38:41 +01:00
added: < code class = "filename" > < ext/bitmap_allocator.h> < / code > , < code class = "filename" > < ext/debug_allocator.h> < / code > , < code class = "filename" > < ext/mt_allocator.h> < / code > , < code class = "filename" > < ext/malloc_allocator.h> < / code > ,< code class = "filename" > < ext/new_allocator.h> < / code > , < code class = "filename" > < ext/pool_allocator.h> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
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 < code class = "code" > __simple_alloc, __allocator, __alloc, < / code > and < code class = "code" >
_Alloc_traits< / code > have been removed.
< / p > < p > Default behavior of < code class = "code" > std::allocator< / code > has changed.< / p > < p >
Previous versions prior to 3.4 cache allocations in a memory
pool, instead of passing through to call the global allocation
2008-04-11 00:14:17 +02:00
operators (i.e., < code class = "classname" > __gnu_cxx::pool_allocator< / code > ). More
2008-02-12 03:39:33 +01:00
recent versions default to the
simpler < code class = "classname" > __gnu_cxx::new_allocator< / code > .
< / p > < p > Previously, all allocators were written to the SGI
style, and all STL containers expected this interface. This
interface had a traits class called < code class = "code" > _Alloc_traits< / code > that
attempted to provide more information for compile-time allocation
selection and optimization. This traits class had another allocator
wrapper, < code class = "code" > __simple_alloc< T,A> < / code > , which was a
wrapper around another allocator, A, which itself is an allocator
for instances of T. But wait, there's more:
< code class = "code" > __allocator< T,A> < / code > is another adapter. Many of
the provided allocator classes were SGI style: such classes can be
changed to a conforming interface with this wrapper:
< code class = "code" > __allocator< T, __alloc> < / code > is thus the same as
< code class = "code" > allocator< T> < / code > .
< / p > < p > The class < code class = "classname" > allocator< / code > used the typedef
< span class = "type" > __alloc< / span > to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
2019-03-19 10:38:41 +01:00
< / p > < div class = "table" > < a id = "table.extension_allocators" > < / a > < p class = "title" > < strong > Table B.6. Extension Allocators< / strong > < / p > < div class = "table-contents" > < table class = "table" summary = "Extension Allocators" border = "1" > < colgroup > < col align = "left" class = "c1" / > < col align = "left" class = "c2" / > < col align = "left" class = "c3" / > < col align = "left" class = "c4" / > < / colgroup > < thead > < tr > < th align = "left" > Allocator (3.4)< / th > < th align = "left" > Header (3.4)< / th > < th align = "left" > Allocator (3.[0-3])< / th > < th align = "left" > Header (3.[0-3])< / th > < / tr > < / thead > < tbody > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::new_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/new_allocator.h> < / code > < / td > < td align = "left" > < code class = "classname" > std::__new_alloc< / code > < / td > < td align = "left" > < code class = "filename" > < memory> < / code > < / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::malloc_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/malloc_allocator.h> < / code > < / td > < td align = "left" > < code class = "classname" > std::__malloc_alloc_template< int> < / code > < / td > < td align = "left" > < code class = "filename" > < memory> < / code > < / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::debug_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/debug_allocator.h> < / code > < / td > < td align = "left" > < code class = "classname" > std::debug_alloc< T> < / code > < / td > < td align = "left" > < code class = "filename" > < memory> < / code > < / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::__pool_alloc< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/pool_allocator.h> < / code > < / td > < td align = "left" > < code class = "classname" > std::__default_alloc_template< bool,int> < / code > < / td > < td align = "left" > < code class = "filename" > < memory> < / code > < / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::__mt_alloc< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/mt_allocator.h> < / code > < / td > < td align = "left" > < / td > < td align = "left" > < / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::bitmap_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/bitmap_allocator.h> < / code > < / td > < td align = "left" > < / td > < td align = "left" > < / td > < / tr > < / tbody > < / table > < / div > < / div > < br class = "table-break" / > < p > Releases after gcc-3.4 have continued to add to the collection
2008-02-12 03:39:33 +01:00
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.
2019-03-19 10:38:41 +01:00
< / p > < div class = "table" > < a id = "table.extension_allocators2" > < / a > < p class = "title" > < strong > Table B.7. Extension Allocators Continued< / strong > < / p > < div class = "table-contents" > < table class = "table" summary = "Extension Allocators Continued" border = "1" > < colgroup > < col align = "left" class = "c1" / > < col align = "left" class = "c2" / > < col align = "left" class = "c3" / > < / colgroup > < thead > < tr > < th align = "left" > Allocator< / th > < th align = "left" > Include< / th > < th align = "left" > Version< / th > < / tr > < / thead > < tbody > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::array_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/array_allocator.h> < / code > < / td > < td align = "left" > 4.0.0< / td > < / tr > < tr > < td align = "left" > < code class = "classname" > __gnu_cxx::throw_allocator< T> < / code > < / td > < td align = "left" > < code class = "filename" > < ext/throw_allocator.h> < / code > < / td > < td align = "left" > 4.2.0< / td > < / tr > < / tbody > < / table > < / div > < / div > < br class = "table-break" / > < p >
2008-02-12 03:39:33 +01:00
Debug mode first appears.
< / p > < p >
Precompiled header support < acronym class = "acronym" > PCH< / acronym > support.
< / p > < p >
Macro guard for changed, from < code class = "literal" > _GLIBCPP_< / code > to < code class = "literal" > _GLIBCXX_< / code > .
< / p > < p >
2019-03-19 10:38:41 +01:00
Extension < code class = "filename" > < ext/stdio_sync_filebuf.h> < / code > added.
2008-02-12 03:39:33 +01:00
< / p > < p >
2019-03-19 10:38:41 +01:00
Extension < code class = "filename" > < ext/demangle.h> < / code > added.
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_400" > < / a > < code class = "constant" > 4.0< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p >
TR1 features first appear.
< / p > < p >
2019-03-19 10:38:41 +01:00
Extension allocator < code class = "filename" > < ext/array_allocator.h> < / code > added.
2008-02-12 03:39:33 +01:00
< / p > < p >
2019-03-19 10:38:41 +01:00
Extension < code class = "code" > codecvt< / code > specializations moved to < code class = "filename" > < ext/codecvt_specializations.h> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
2019-03-19 10:38:41 +01:00
Removal of < code class = "filename" > < ext/demangle.h> < / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_410" > < / a > < code class = "constant" > 4.1< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p >
2019-03-19 10:38:41 +01:00
Removal of < code class = "filename" > < cassert> < / code > from all standard headers: now has to be explicitly included for < code class = "code" > std::assert< / code > calls.
2008-02-12 03:39:33 +01:00
< / p > < p > Extensions for policy-based data structures first added. New includes,
types, namespace < code class = "code" > pb_assoc< / code > .
2019-03-19 10:38:41 +01:00
< / p > < p > Extensions for typelists added in < code class = "filename" > < ext/typelist.h> < / code > .
< / p > < p > Extension for policy-based < code class = "code" > basic_string< / code > first added: < code class = "code" > __gnu_cxx::__versa_string< / code > in < code class = "filename" > < ext/vstring.h> < / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_420" > < / a > < code class = "constant" > 4.2< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p > Default visibility attributes applied to < code class = "code" > namespace std< / code > . Support for < code class = "code" > -fvisibility< / code > .
2019-03-19 10:38:41 +01:00
< / p > < p > TR1 < code class = "filename" > < random> < / code > , < code class = "filename" > < complex> < / code > , and C compatibility headers added.< / p > < p > Extensions for concurrent programming consolidated
into < code class = "filename" > < ext/concurrence.h> < / code > and < code class = "filename" > < ext/atomicity.h> < / code > ,
2008-02-12 03:39:33 +01:00
including change of namespace to < code class = "code" > __gnu_cxx< / code > in some
cases. Added types
include < code class = "code" > _Lock_policy< / code > , < code class = "code" > __concurrence_lock_error< / code > , < code class = "code" > __concurrence_unlock_error< / code > , < code class = "code" > __mutex< / code > , < code class = "code" > __scoped_lock< / code > .< / p > < p > Extensions for type traits consolidated
2019-03-19 10:38:41 +01:00
into < code class = "filename" > < ext/type_traits.h> < / code > . Additional traits are added
2008-02-12 03:39:33 +01:00
(< code class = "code" > __conditional_type< / code > , < code class = "code" > __enable_if< / code > , others.)
< / p > < p > Extensions for policy-based data structures revised. New includes,
types, namespace moved to < code class = "code" > __pb_ds< / code > .
< / p > < p > Extensions for debug mode modified: now nested in < code class = "code" > namespace
std::__debug< / code > and extensions in < code class = "code" > namespace
2019-03-19 10:38:41 +01:00
__gnu_cxx::__debug< / code > .< / p > < p > Extensions added: < code class = "filename" > < ext/typelist.h> < / code >
and < code class = "filename" > < ext/throw_allocator.h> < / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_430" > < / a > < code class = "constant" > 4.3< / code > < / h3 > < / div > < / div > < / div > < p >
2008-02-12 03:39:33 +01:00
< / p > < p >
C++0X features first appear.
2019-03-19 10:38:41 +01:00
< / p > < p > TR1 < code class = "filename" > < regex> < / code > and < code class = "filename" > < cmath> < / code > 's mathematical special function added.
2010-01-05 21:51:05 +01:00
< / p > < p >
2008-02-12 03:39:33 +01:00
Backward include edit.
2013-02-12 00:24:26 +01:00
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > < p > Removed< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < algobase.h> < / code > < code class = "filename" > < algo.h> < / code > < code class = "filename" > < alloc.h> < / code > < code class = "filename" > < bvector.h> < / code > < code class = "filename" > < complex.h> < / code >
< code class = "filename" > < defalloc.h> < / code > < code class = "filename" > < deque.h> < / code > < code class = "filename" > < fstream.h> < / code > < code class = "filename" > < function.h> < / code > < code class = "filename" > < hash_map.h> < / code > < code class = "filename" > < hash_set.h> < / code >
< code class = "filename" > < hashtable.h> < / code > < code class = "filename" > < heap.h> < / code > < code class = "filename" > < iomanip.h> < / code > < code class = "filename" > < iostream.h> < / code > < code class = "filename" > < istream.h> < / code > < code class = "filename" > < iterator.h> < / code >
< code class = "filename" > < list.h> < / code > < code class = "filename" > < map.h> < / code > < code class = "filename" > < multimap.h> < / code > < code class = "filename" > < multiset.h> < / code > < code class = "filename" > < new.h> < / code > < code class = "filename" > < ostream.h> < / code > < code class = "filename" > < pair.h> < / code > < code class = "filename" > < queue.h> < / code > < code class = "filename" > < rope.h> < / code > < code class = "filename" > < set.h> < / code > < code class = "filename" > < slist.h> < / code > < code class = "filename" > < stack.h> < / code > < code class = "filename" > < streambuf.h> < / code > < code class = "filename" > < stream.h> < / code > < code class = "filename" > < tempbuf.h> < / code >
< code class = "filename" > < tree.h> < / code > < code class = "filename" > < vector.h> < / code >
2010-01-05 21:51:05 +01:00
< / p > < / li > < li class = "listitem" > < p > Added< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < hash_map> < / code > and < code class = "filename" > < hash_set> < / code >
2011-11-06 21:15:53 +01:00
< / p > < / li > < li class = "listitem" > < p > Added in C++11< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < auto_ptr.h> < / code > and < code class = "filename" > < binders.h> < / code >
2008-02-12 03:39:33 +01:00
< / p > < / li > < / ul > < / div > < p >
Header dependency streamlining.
2019-03-19 10:38:41 +01:00
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > < p > < code class = "filename" > < algorithm> < / code > no longer includes < code class = "filename" > < climits> < / code > , < code class = "filename" > < cstring> < / code > , or < code class = "filename" > < iosfwd> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < bitset> < / code > no longer includes < code class = "filename" > < istream> < / code > or < code class = "filename" > < ostream> < / code > , adds < code class = "filename" > < iosfwd> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < functional> < / code > no longer includes < code class = "filename" > < cstddef> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < iomanip> < / code > no longer includes < code class = "filename" > < istream> < / code > , < code class = "filename" > < istream> < / code > , or < code class = "filename" > < functional> < / code > , adds < code class = "filename" > < ioswd> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < numeric> < / code > no longer includes < code class = "filename" > < iterator> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < string> < / code > no longer includes < code class = "filename" > < algorithm> < / code > or < code class = "filename" > < memory> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < valarray> < / code > no longer includes < code class = "filename" > < numeric> < / code > or < code class = "filename" > < cstdlib> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < tr1/hashtable> < / code > no longer includes < code class = "filename" > < memory> < / code > or < code class = "filename" > < functional> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < tr1/memory> < / code > no longer includes < code class = "filename" > < algorithm> < / code > < / p > < / li > < li class = "listitem" > < p > < code class = "filename" > < tr1/random> < / code > no longer includes < code class = "filename" > < algorithm> < / code > or < code class = "filename" > < fstream> < / code > < / p > < / li > < / ul > < / div > < p >
Debug mode for < code class = "filename" > < unordered_map> < / code > and < code class = "filename" > < unordered_set> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p >
Parallel mode first appears.
2019-03-19 10:38:41 +01:00
< / p > < p > Variadic template implementations of items in < code class = "filename" > < tuple> < / code > and
< code class = "filename" > < functional> < / code > .
2008-02-12 03:39:33 +01:00
< / p > < p > Default < code class = "code" > what< / code > implementations give more elaborate
exception strings for < code class = "code" > bad_cast< / code > ,
< code class = "code" > bad_typeid< / code > , < code class = "code" > bad_exception< / code > , and
< code class = "code" > bad_alloc< / code > .
< / p > < p >
2010-04-22 01:33:44 +02:00
PCH binary files no longer installed. Instead, the source files are installed.
2008-02-12 03:39:33 +01:00
< / p > < p >
Namespace pb_ds moved to __gnu_pb_ds.
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_440" > < / a > < code class = "constant" > 4.4< / code > < / h3 > < / div > < / div > < / div > < p >
2010-01-05 21:51:05 +01:00
< / p > < p >
C++0X features.
2013-02-12 00:24:26 +01:00
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > < p >
2010-01-05 21:51:05 +01:00
Added.
< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < atomic> < / code > ,
< code class = "filename" > < chrono> < / code > ,
< code class = "filename" > < condition_variable> < / code > ,
< code class = "filename" > < forward_list> < / code > ,
< code class = "filename" > < initializer_list> < / code > ,
< code class = "filename" > < mutex> < / code > ,
< code class = "filename" > < ratio> < / code > ,
< code class = "filename" > < thread> < / code >
2010-01-05 21:51:05 +01:00
< / p > < / li > < li class = "listitem" > < p >
Updated and improved.
< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < algorithm> < / code > ,
< code class = "filename" > < system_error> < / code > ,
< code class = "filename" > < type_traits> < / code >
2010-01-05 21:51:05 +01:00
< / p > < / li > < li class = "listitem" > < p >
Use of the GNU extension namespace association converted to inline namespaces.
< / p > < / li > < li class = "listitem" > < p >
Preliminary support for < code class = "classname" > initializer_list< / code >
and defaulted and deleted constructors in container classes.
< / p > < / li > < li class = "listitem" > < p >
< code class = "classname" > unique_ptr< / code > .
< / p > < / li > < li class = "listitem" > < p >
Support for new character types < span class = "type" > char16_t< / span >
and < span class = "type" > char32_t< / span > added
to < code class = "classname" > char_traits< / code > , < code class = "classname" > basic_string< / code > , < code class = "classname" > numeric_limits< / code > ,
and assorted compile-time type traits.
< / p > < / li > < li class = "listitem" > < p >
Support for string conversions < code class = "function" > to_string< / code >
and < code class = "function" > to_wstring< / code > .
< / p > < / li > < li class = "listitem" > < p >
Member functions taking string arguments were added to iostreams
including < code class = "classname" > basic_filebuf< / code > , < code class = "classname" > basic_ofstream< / code > ,
and < code class = "classname" > basic_ifstream< / code > .
< / p > < / li > < li class = "listitem" > < p >
Exception propagation support,
including < code class = "classname" > exception_ptr< / code > , < code class = "function" > current_exception< / code > , < code class = "function" > copy_exception< / code > ,
and < code class = "function" > rethrow_exception< / code > .
< / p > < / li > < / ul > < / div > < p >
Uglification of < code class = "literal" > try< / code > to < code class = "literal" > __try< / code >
and < code class = "literal" > catch< / code > to < code class = "literal" > __catch< / code > .
< / p > < p >
2010-01-12 02:37:06 +01:00
Audit of internal mutex usage, conversion to functions returning static
2010-01-05 21:51:05 +01:00
local mutex.
< / p > < p > Extensions
2019-03-19 10:38:41 +01:00
added: < code class = "filename" > < ext/pointer.h> < / code >
and < code class = "filename" > < ext/extptr_allocator.h> < / code > . Support
2010-01-05 21:51:05 +01:00
for non-standard pointer types has been added
to < code class = "classname" > vector< / code >
and < code class = "classname" > forward_list< / code > .
2013-02-12 00:24:26 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_450" > < / a > < code class = "constant" > 4.5< / code > < / h3 > < / div > < / div > < / div > < p >
2010-01-05 21:51:05 +01:00
< / p > < p >
C++0X features.
2013-02-12 00:24:26 +01:00
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > < p >
2010-01-05 21:51:05 +01:00
Added.
< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < functional> < / code > ,
< code class = "filename" > < future> < / code > ,
< code class = "filename" > < random> < / code >
2010-01-05 21:51:05 +01:00
< / p > < / li > < li class = "listitem" > < p >
Updated and improved.
< / p > < p >
2019-03-19 10:38:41 +01:00
< code class = "filename" > < atomic> < / code > ,
< code class = "filename" > < system_error> < / code > ,
< code class = "filename" > < type_traits> < / code >
2010-01-05 21:51:05 +01:00
< / p > < / li > < li class = "listitem" > < p >
Add support for explicit operators and standard layout types.
< / p > < / li > < / ul > < / div > < p >
Profile mode first appears.
< / p > < p >
2010-04-22 01:33:44 +02:00
Support for decimal floating-point arithmetic, including < code class = "classname" > decimal32< / code > , < code class = "classname" > decimal64< / code > , and < code class = "classname" > decimal128< / code > .
2010-01-05 21:51:05 +01:00
< / p > < p >
Python pretty-printers are added for use with appropriately-advanced versions of < span class = "command" > < strong > gdb< / strong > < / span > .
< / p > < p >
2015-04-13 18:21:33 +02:00
Audit for application of function attributes nothrow, const, pure, and noreturn.
2010-01-12 02:37:06 +01:00
< / p > < p >
The default behavior for comparing typeinfo names changed, so
2019-03-19 10:38:41 +01:00
in < code class = "filename" > < typeinfo> < / code > , < code class = "literal" > __GXX_MERGED_TYPEINFO_NAMES< / code >
2010-01-12 02:37:06 +01:00
now defaults to zero.
2019-03-19 10:38:41 +01:00
< / p > < p > Extensions modified: < code class = "filename" > < ext/throw_allocator.h> < / code > .
2015-04-13 18:21:33 +02:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_460" > < / a > < code class = "constant" > 4.6< / code > < / h3 > < / div > < / div > < / div > < p >
Use constexpr and nullptr where appropriate throughout the library.
< / p > < p >
2015-04-14 12:08:58 +02:00
The library was updated to avoid including
2019-03-19 10:38:41 +01:00
< code class = "filename" > < stddef.h> < / code > in order
2015-04-13 18:21:33 +02:00
to reduce namespace pollution.
< / p > < p > Reference-count annotations to assist data race detectors.
< / p > < p >
Added < code class = "function" > make_exception_ptr< / code > as an alias of
< code class = "function" > copy_exception< / code > .
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_470" > < / a > < code class = "constant" > 4.7< / code > < / h3 > < / div > < / div > < / div > < p > Use of noexcept throughout library.< / p > < p > Partial support for C++11 allocators first appears.< / p > < p >
< code class = "classname" > monotonic_clock< / code > renamed to
< code class = "classname" > steady_clock< / code > as required by the final C++11
standard.
< / p > < p > A new clocale model for newlib is available.< / p > < p >
2015-04-14 12:08:58 +02:00
The library was updated to avoid including
2019-03-19 10:38:41 +01:00
< code class = "filename" > < unistd.h> < / code > in order
2015-04-13 18:21:33 +02:00
to reduce namespace pollution.
< / p > < p > Debug Mode was improved for unordered containers. < / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_480" > < / a > < code class = "constant" > 4.8< / code > < / h3 > < / div > < / div > < / div > < p >
New random number engines and distributions.
Optimisations for random.
< / p > < p > New --enable-libstdcxx-verbose configure option< / p > < p >
The --enable-libstdcxx-time configure option becomes unnecessary given a
sufficiently recent glibc.
2018-04-11 02:21:35 +02:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_490" > < / a > < code class = "constant" > 4.9< / code > < / h3 > < / div > < / div > < / div > < p > Implementation of < code class = "classname" > regex< / code > completed. < / p > < p > C++14 library and TS implementations are added. < / p > < p > < code class = "function" > copy_exception< / code > deprecated. < / p > < p > < code class = "classname" > __gnu_cxx::array_allocator< / code > deprecated. < / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_51" > < / a > < code class = "constant" > 5< / code > < / h3 > < / div > < / div > < / div > < p >
2015-04-13 18:21:33 +02:00
ABI transition adds new implementations of several components, using the
< code class = "code" > abi_tag< / code > attribute and the < code class = "code" > __cxx11< / code > inline
namespace to distinguish the new entities from the old ones.
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > < p >
Use of the new or old ABI can be selected per-translation unit with the
2018-04-11 02:21:35 +02:00
< a class = "xref" href = "using_macros.html" title = "Macros" > Macros< / a > .
2015-04-13 18:21:33 +02:00
< / p > < / li > < li class = "listitem" > < p >
New non-reference-counted < code class = "classname" > string< / code > implementation.
< / p > < / li > < li class = "listitem" > < p >
New < code class = "classname" > list< / code > implementation containing a new
data member in order to provide O(1) < code class = "function" > size()< / code > .
2018-04-11 02:21:35 +02:00
< / p > < / li > < li class = "listitem" > < p >
New < code class = "classname" > ios_base::failure< / code > implementation inheriting
from < code class = "classname" > system_error< / code > .
2015-04-13 18:21:33 +02:00
< / p > < / li > < / ul > < / div > < p >
C++11 support completed (movable iostreams, new I/O manipulators,
Unicode conversion utilities, atomic operations for
< code class = "classname" > shared_ptr< / code > , functions for notifying condition
variables and making futures ready at thread exit).
< / p > < p >
Changed formatting of floating point types when
< code class = "code" > ios_base::fixed|ios_base::scientific< / code > is set in a stream's
format flags.
< / p > < p > Improved C++14 support and TS implementations. < / p > < p > New random number engines and distributions. < / p > < p >
GDB Xmethods for containers and < code class = "classname" > unique_ptr< / code > added.
< / p > < p >
< code class = "classname" > has_trivial_default_constructor< / code > ,
< code class = "classname" > has_trivial_copy_constructor< / code > and
< code class = "classname" > has_trivial_copy_assign< / code > deprecated.
2018-04-11 02:21:35 +02:00
< / p > < div class = "section" > < div class = "titlepage" > < div > < div > < h4 class = "title" > < a id = "api.rel_53" > < / a > < code class = "constant" > 5.3< / code > < / h4 > < / div > < / div > < / div > < p > Experimental implementation of the C++ Filesystem TS added. < / p > < / div > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_61" > < / a > < code class = "constant" > 6< / code > < / h3 > < / div > < / div > < / div > < p > C++14 support completed. < / p > < p >
Support for mathematical special functions (ISO/IEC 29124:2010) added.
< / p > < p >
Assertions to check function preconditions can be enabled by defining the
2020-06-01 17:40:13 +02:00
< a class = "link" href = "using_macros.html" title = "Macros" > < span class = "symbol" > _GLIBCXX_ASSERTIONS< / span >
macro< / a > .
2018-04-11 02:21:35 +02:00
The initial set of assertions are a subset of the checks enabled by
the Debug Mode, but without the ABI changes and changes to algorithmic
complexity that are caused by enabling the full Debug Mode.
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_71" > < / a > < code class = "constant" > 7< / code > < / h3 > < / div > < / div > < / div > < p >
The type of exception thrown by iostreams changed to the < code class = "code" > cxx11< / code >
ABI version of < code class = "classname" > std::ios_base::failure< / code > .
< / p > < p >
Experimental C++17 support added, including most new library features.
The meaning of < code class = "classname" > shared_ptr< T[]> < / code > changed to
match the C++17 semantics.
< / p > < p >
< a class = "xref" href = "using_macros.html" title = "Macros" > Macros< / a > added.
< / p > < p >
< code class = "classname" > has_trivial_default_constructor< / code > ,
< code class = "classname" > has_trivial_copy_constructor< / code > and
< code class = "classname" > has_trivial_copy_assign< / code > removed.
2019-03-19 10:38:41 +01:00
< / p > < p > Profile Mode was deprecated. < / p > < div class = "section" > < div class = "titlepage" > < div > < div > < h4 class = "title" > < a id = "api.rel_72" > < / a > < code class = "constant" > 7.2< / code > < / h4 > < / div > < / div > < / div > < p >
Library Fundamentals TS header
< code class = "filename" > < experimental/source_location> < / code >
added.
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h4 class = "title" > < a id = "api.rel_73" > < / a > < code class = "constant" > 7.3< / code > < / h4 > < / div > < / div > < / div > < p >
2018-04-11 02:21:35 +02:00
Including new C++14 or C++17 headers without a suitable < code class = "option" > -std< / code >
no longer causes compilation to fail via < code class = "literal" > #error< / code > .
Instead the header is simply empty and doesn't define anything.
< / p > < / div > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_81" > < / a > < code class = "constant" > 8< / code > < / h3 > < / div > < / div > < / div > < p >
The exceptions thrown by iostreams can now be caught by handlers for either
version of < code class = "classname" > std::ios_base::failure< / code > .
< / p > < p >
2019-03-19 10:38:41 +01:00
Improved experimental C++17 support. Headers
< code class = "filename" > < charconv> < / code > and
< code class = "filename" > < filesystem> < / code > .
2018-04-11 02:21:35 +02:00
Experimental implementation of the C++17 Filesystem library added.
2019-03-19 10:38:41 +01:00
< / p > < p >
Experimental C++2a support
(< code class = "function" > to_address< / code > and < code class = "classname" > endian< / code > ).
2018-04-11 02:21:35 +02:00
< / p > < p >
AddressSanitizer annotations added to < code class = "classname" > std::vector< / code >
to detect out-of-range accesses to the unused capacity of a vector.
< / p > < p >
< code class = "function" > std::char_traits< char16_t> ::to_int_type(u'\uFFFF')< / code >
now returns < code class = "literal" > 0xFFFD< / code > , as < code class = "literal" > 0xFFFF< / code > is
used for < code class = "function" > std::char_traits< char16_t> ::eof()< / code > .
< / p > < p >
The extension allowing arithmetic on
< code class = "classname" > std::atomic< void*> < / code > and types like
< code class = "classname" > std::atomic< R(*)()> < / code > was deprecated.
< / p > < p >
The < code class = "function" > std::uncaught_exception< / code > function was deprecated
for C++17 mode.
< / p > < p >
The nested typedefs < span class = "type" > std::hash::result_type< / span > and
< span class = "type" > std::hash::argument_type< / span > were deprecated for C++17 mode.
< / p > < p >
The deprecated iostream members < span class = "type" > ios_base::io_state< / span > ,
< span class = "type" > ios_base::open_mode< / span > , < span class = "type" > ios_base::seek_dir< / span > , and
< code class = "function" > basic_streambuf::stossc< / code > were removed for C++17 mode.
< / p > < p >
The non-standard C++0x < code class = "function" > std::copy_exception< / code > function
was removed.
< / p > < p >
For < code class = "option" > -std=c++11< / code > , < code class = "option" > -std=c++14< / code > , and
< code class = "option" > -std=c++17< / code > modes the < code class = "filename" > < complex.h> < / code >
header no longer includes the C99 < code class = "filename" > < complex.h> < / code >
header.
< / p > < p >
For the non-default < code class = "option" > --enable-symvers=gnu-versioned-namespace< / code >
configuration, the shared library SONAME has been changed to
< code class = "filename" > libstdc++.so.8< / code > .
2019-03-19 10:38:41 +01:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_91" > < / a > < code class = "constant" > 9< / code > < / h3 > < / div > < / div > < / div > < p >
C++17 header
< code class = "filename" > < memory_resource> < / code >
added.
< / p > < p >
Experimental C++2a support improved, with new headers
< code class = "filename" > < bit> < / code > and
< code class = "filename" > < version> < / code > added.
Support for new character type < span class = "type" > char8_t< / span > added
to < code class = "classname" > char_traits< / code > , < code class = "classname" > basic_string< / code > ,
< code class = "classname" > numeric_limits< / code > ,
and relevant locale facets and type traits.
< / p > < p >
Experimental implementation of the Networking TS library added,
with new headers
< code class = "filename" > < experimental/buffer> < / code > ,
< code class = "filename" > < experimental/executor> < / code > ,
< code class = "filename" > < experimental/internet> < / code > ,
< code class = "filename" > < experimental/io_context> < / code > ,
< code class = "filename" > < experimental/net> < / code > ,
< code class = "filename" > < experimental/netfwd> < / code > ,
< code class = "filename" > < experimental/socket> < / code > ,
and
< code class = "filename" > < experimental/timer> < / code > .
2019-05-13 12:50:21 +02:00
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_101" > < / a > < code class = "constant" > 10< / code > < / h3 > < / div > < / div > < / div > < p > Deprecated features removed:
< / p > < div class = "itemizedlist" > < ul class = "itemizedlist" style = "list-style-type: disc; " > < li class = "listitem" > Profile Mode < / li > < li class = "listitem" > < code class = "classname" > __gnu_cxx::array_allocator< / code > < / li > < / ul > < / div > < p >
2020-06-01 17:43:01 +02:00
< / p > < p >
The non-standard < code class = "function" > std::__is_nullptr_t< / code > type trait
was deprecated.
2019-05-23 23:41:02 +02:00
< / p > < p >
The < code class = "classname" > std::packaged_task< / code > constructors taking
an allocator argument are only defined for C++11 and C++14.
2020-06-01 17:43:01 +02:00
< / p > < p >
Several members of < code class = "classname" > std::allocator< / code > were removed
for C++20 mode. The removed functionality has been provided by
< code class = "classname" > std::allocator_traits< / code > since C++11 and that should
be used instead.
2020-11-04 13:45:32 +01:00
< / p > < p >
The type of the < code class = "classname" > std::iterator< / code > base class of
< code class = "classname" > std::istreambuf_iterator< / code > was changed to be
consistent for all < code class = "option" > -std< / code > modes.
Before GCC 10.1 the base class had one type in C++98 mode and a
different type in C++11 and later modes. The type in C++98 mode
was changed to be the same as for C++11 and later.
2020-10-13 18:40:43 +02:00
< / p > < p >
Experimental C++2a support improved, with new headers
< code class = "filename" > < concepts> < / code > ,
< code class = "filename" > < ranges> < / code > ,
< code class = "filename" > < compare> < / code > ,
< code class = "filename" > < coroutine> < / code > ,
< code class = "filename" > < numbers> < / code > ,
< code class = "filename" > < span> < / code > ,
and
< code class = "filename" > < stop_token> < / code >
added.
< / p > < / div > < div class = "section" > < div class = "titlepage" > < div > < div > < h3 class = "title" > < a id = "api.rel_111" > < / a > < code class = "constant" > 11< / code > < / h3 > < / div > < / div > < / div > < p >
The < code class = "option" > --enable-cheaders=c_std< / code > configuration
was deprecated.
< / p > < p >
When compiling as C++20, the < code class = "function" > operator> > < / code > overloads
for extracting strings into character buffers only work with arrays,
not raw pointers.
< / p > < p >
< code class = "code" > std::string::reserve(n)< / code > will no longer reduce
the string's capacity.
Calling < code class = "function" > reserve()< / code > with no arguments is equivalent
to < code class = "function" > shrink_to_fit()< / code > , but is deprecated.
< code class = "function" > shrink_to_fit()< / code > should be used instead.
2013-02-12 00:24:26 +01:00
< / p > < / div > < / div > < div class = "navfooter" > < hr / > < table width = "100%" summary = "Navigation footer" > < tr > < td width = "40%" align = "left" > < a accesskey = "p" href = "abi.html" > Prev< / a > < / td > < td width = "20%" align = "center" > < a accesskey = "u" href = "appendix_porting.html" > Up< / a > < / td > < td width = "40%" align = "right" > < a accesskey = "n" href = "backwards.html" > Next< / a > < / td > < / tr > < tr > < td width = "40%" align = "left" valign = "top" > ABI Policy and Guidelines < / td > < td width = "20%" align = "center" > < a accesskey = "h" href = "../index.html" > Home< / a > < / td > < td width = "40%" align = "right" valign = "top" > Backwards Compatibility< / td > < / tr > < / table > < / div > < / body > < / html >