2012-03-28 01:13:14 +02:00
<section xmlns= "http://docbook.org/ns/docbook" version= "5.0"
xml:id="appendix.porting.api" xreflabel="api">
<?dbhtml filename="api.html"?>
<info > <title > API Evolution and Deprecation History</title>
<keywordset >
<keyword > ISO C++</keyword>
<keyword > api</keyword>
<keyword > evolution</keyword>
<keyword > deprecation</keyword>
<keyword > history</keyword>
</keywordset>
</info>
<para >
A list of user-visible changes, in chronological order
</para>
<section xml:id= "api.rel_300" > <info > <title > <constant > 3.0</constant> </title> </info>
<para >
Extensions moved to <filename class= "directory" > include/ext</filename> .
</para>
<para >
Include files from the SGI/HP sources that pre-date the ISO standard
are added. These files are placed into
the <filename class= "directory" > include/backward</filename> directory and a deprecated warning
is added that notifies on inclusion (<literal > -Wno-deprecated</literal>
deactivates the warning.)
</para>
2019-06-02 17:48:37 +02:00
<para > Deprecated include <filename class= "headerfile" > < backward/strstream> </filename> added.</para>
2012-03-28 01:13:14 +02:00
2019-06-02 17:48:37 +02:00
<para > Removal of include <filename class= "headerfile" > < builtinbuf.h> </filename> , <filename class= "headerfile" > < indstream.h> </filename> , <filename class= "headerfile" > < parsestream.h> </filename> , <filename class= "headerfile" > < PlotFile.h> </filename> , <filename class= "headerfile" > < SFile.h> </filename> , <filename class= "headerfile" > < stdiostream.h> </filename> , and <filename class= "headerfile" > < stream.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_310" > <info > <title > <constant > 3.1</constant> </title> </info>
<para >
</para>
<para >
Extensions from SGI/HP moved from <code > namespace std</code>
to <code > namespace __gnu_cxx</code> . As part of this, the following
new includes are
2019-06-02 17:48:37 +02:00
added: <filename class= "headerfile" > < ext/algorithm> </filename> , <filename class= "headerfile" > < ext/functional> </filename> , <filename class= "headerfile" > < ext/iterator> </filename> , <filename class= "headerfile" > < ext/memory> </filename> , and <filename class= "headerfile" > < ext/numeric> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
Extensions to <code > basic_filebuf</code> introduced: <code > __gnu_cxx::enc_filebuf</code> , and <code > __gnu_cxx::stdio_filebuf</code> .
</para>
<para >
2019-06-02 17:48:37 +02:00
Extensions to tree data structures added in <filename class= "headerfile" > < ext/rb_tree> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
2019-06-02 17:48:37 +02:00
Removal of <filename class= "headerfile" > < ext/tree> </filename> , moved to <filename class= "headerfile" > < backward/tree.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_320" > <info > <title > <constant > 3.2</constant> </title> </info>
<para >
</para>
<para > Symbol versioning introduced for shared library.</para>
2019-06-02 17:48:37 +02:00
<para > Removal of include <filename class= "headerfile" > < backward/strstream.h> </filename> .</para>
2012-03-28 01:13:14 +02:00
<para > Allocator changes. Change <code > __malloc_alloc</code> to <code > malloc_allocator</code> and <code > __new_alloc</code> to <code > new_allocator</code> . </para>
<para > For GCC releases from 2.95 through the 3.1 series, defining
<literal > __USE_MALLOC</literal> on the gcc command line would change the
2019-06-02 17:48:37 +02:00
default allocation strategy to instead use <code > malloc</code> and
<code > free</code> . For the 3.2 and 3.3 release series the same
2014-09-21 19:33:12 +02:00
functionality was spelled <literal > _GLIBCXX_FORCE_NEW</literal> . From
2019-06-02 17:48:37 +02:00
GCC 3.4 onwards the default allocator uses <code > new</code> anyway,
but for the optional pooling allocators the functionality is enabled by
setting <literal > GLIBCXX_FORCE_NEW</literal> in the environment, see
2014-09-21 19:33:12 +02:00
<link linkend= "manual.ext.allocator.mt" > the mt allocator chapter</link>
2012-03-28 01:13:14 +02:00
for details.
</para>
<para > Error handling in iostreams cleaned up, made consistent. </para>
</section>
<section xml:id= "api.rel_330" > <info > <title > <constant > 3.3</constant> </title> </info>
<para >
</para>
</section>
<section xml:id= "api.rel_340" > <info > <title > <constant > 3.4</constant> </title> </info>
<para >
</para>
<para >
Large file support.
</para>
2019-06-02 17:48:37 +02:00
<para > Extensions for generic characters and <code > char_traits</code> added in <filename class= "headerfile" > < ext/pod_char_traits.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
Support for <code > wchar_t</code> specializations of <code > basic_filebuf</code> enhanced to support <code > UTF-8</code> and <code > Unicode</code> , depending on host. More hosts support basic <code > wchar_t</code> functionality.
</para>
<para >
Support for <code > char_traits</code> beyond builtin types.
</para>
<para >
Conformant <code > allocator</code> class and usage in containers. As
part of this, the following extensions are
2019-06-02 17:48:37 +02:00
added: <filename class= "headerfile" > < ext/bitmap_allocator.h> </filename> , <filename class= "headerfile" > < ext/debug_allocator.h> </filename> , <filename class= "headerfile" > < ext/mt_allocator.h> </filename> , <filename class= "headerfile" > < ext/malloc_allocator.h> </filename> ,<filename class= "headerfile" > < ext/new_allocator.h> </filename> , <filename class= "headerfile" > < ext/pool_allocator.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
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 > __simple_alloc, __allocator, __alloc, </code> and <code >
_Alloc_traits</code> have been removed.
</para>
<para > Default behavior of <code > std::allocator</code> has changed.</para>
<para >
Previous versions prior to 3.4 cache allocations in a memory
pool, instead of passing through to call the global allocation
operators (i.e., <classname > __gnu_cxx::pool_allocator</classname> ). More
recent versions default to the
simpler <classname > __gnu_cxx::new_allocator</classname> .
</para>
<para > Previously, all allocators were written to the SGI
style, and all STL containers expected this interface. This
interface had a traits class called <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 > __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 > __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 > __allocator< T, __alloc> </code> is thus the same as
<code > allocator< T> </code> .
</para>
<para > The class <classname > allocator</classname> used the typedef
<type > __alloc</type> to select an underlying allocator that
satisfied memory allocation requests. The selection of this
underlying allocator was not user-configurable.
</para>
2015-08-28 17:33:40 +02:00
<table frame= "all" xml:id= "table.extension_allocators" >
2012-03-28 01:13:14 +02:00
<title > Extension Allocators</title>
<tgroup cols= "4" align= "left" colsep= "1" rowsep= "1" >
<colspec colname= "c1" />
<colspec colname= "c2" />
<colspec colname= "c3" />
<colspec colname= "c4" />
<thead >
<row >
<entry > Allocator (3.4)</entry>
<entry > Header (3.4)</entry>
<entry > Allocator (3.[0-3])</entry>
<entry > Header (3.[0-3])</entry>
</row>
</thead>
<tbody >
<row >
<entry > <classname > __gnu_cxx::new_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/new_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > <classname > std::__new_alloc</classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < memory> </filename> </entry>
2012-03-28 01:13:14 +02:00
</row>
<row >
<entry > <classname > __gnu_cxx::malloc_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/malloc_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > <classname > std::__malloc_alloc_template< int> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < memory> </filename> </entry>
2012-03-28 01:13:14 +02:00
</row>
<row >
<entry > <classname > __gnu_cxx::debug_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/debug_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > <classname > std::debug_alloc< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < memory> </filename> </entry>
2012-03-28 01:13:14 +02:00
</row>
<row >
<entry > <classname > __gnu_cxx::__pool_alloc< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/pool_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > <classname > std::__default_alloc_template< bool,int> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < memory> </filename> </entry>
2012-03-28 01:13:14 +02:00
</row>
<row >
<entry > <classname > __gnu_cxx::__mt_alloc< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/mt_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > </entry>
<entry > </entry>
</row>
<row >
<entry > <classname > __gnu_cxx::bitmap_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/bitmap_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > </entry>
<entry > </entry>
</row>
</tbody>
</tgroup>
</table>
<para > 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.
</para>
2015-08-28 17:33:40 +02:00
<table frame= "all" xml:id= "table.extension_allocators2" >
2012-03-28 01:13:14 +02:00
<title > Extension Allocators Continued</title>
<tgroup cols= "3" align= "left" colsep= "1" rowsep= "1" >
<colspec colname= "c1" />
<colspec colname= "c2" />
<colspec colname= "c3" />
<thead >
<row >
<entry > Allocator</entry>
<entry > Include</entry>
<entry > Version</entry>
</row>
</thead>
<tbody >
<row >
<entry > <classname > __gnu_cxx::array_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/array_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > 4.0.0</entry>
</row>
<row >
<entry > <classname > __gnu_cxx::throw_allocator< T> </classname> </entry>
2019-06-02 17:48:37 +02:00
<entry > <filename class= "headerfile" > < ext/throw_allocator.h> </filename> </entry>
2012-03-28 01:13:14 +02:00
<entry > 4.2.0</entry>
</row>
</tbody>
</tgroup>
</table>
<para >
Debug mode first appears.
</para>
<para >
Precompiled header support <acronym > PCH</acronym> support.
</para>
<para >
Macro guard for changed, from <literal > _GLIBCPP_</literal> to <literal > _GLIBCXX_</literal> .
</para>
<para >
2019-06-02 17:48:37 +02:00
Extension <filename class= "headerfile" > < ext/stdio_sync_filebuf.h> </filename> added.
2012-03-28 01:13:14 +02:00
</para>
<para >
2019-06-02 17:48:37 +02:00
Extension <filename class= "headerfile" > < ext/demangle.h> </filename> added.
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_400" > <info > <title > <constant > 4.0</constant> </title> </info>
<para >
</para>
<para >
TR1 features first appear.
</para>
<para >
2019-06-02 17:48:37 +02:00
Extension allocator <filename class= "headerfile" > < ext/array_allocator.h> </filename> added.
2012-03-28 01:13:14 +02:00
</para>
<para >
2019-06-02 17:48:37 +02:00
Extension <code > codecvt</code> specializations moved to <filename class= "headerfile" > < ext/codecvt_specializations.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
2019-06-02 17:48:37 +02:00
Removal of <filename class= "headerfile" > < ext/demangle.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_410" > <info > <title > <constant > 4.1</constant> </title> </info>
<para >
</para>
<para >
2019-06-02 17:48:37 +02:00
Removal of <filename class= "headerfile" > < cassert> </filename> from all standard headers: now has to be explicitly included for <code > std::assert</code> calls.
2012-03-28 01:13:14 +02:00
</para>
<para > Extensions for policy-based data structures first added. New includes,
types, namespace <code > pb_assoc</code> .
</para>
2019-06-02 17:48:37 +02:00
<para > Extensions for typelists added in <filename class= "headerfile" > < ext/typelist.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
2019-06-02 17:48:37 +02:00
<para > Extension for policy-based <code > basic_string</code> first added: <code > __gnu_cxx::__versa_string</code> in <filename class= "headerfile" > < ext/vstring.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_420" > <info > <title > <constant > 4.2</constant> </title> </info>
<para >
</para>
<para > Default visibility attributes applied to <code > namespace std</code> . Support for <code > -fvisibility</code> .
</para>
2019-06-02 17:48:37 +02:00
<para > TR1 <filename class= "headerfile" > < random> </filename> , <filename class= "headerfile" > < complex> </filename> , and C compatibility headers added.</para>
2012-03-28 01:13:14 +02:00
<para > Extensions for concurrent programming consolidated
2019-06-02 17:48:37 +02:00
into <filename class= "headerfile" > < ext/concurrence.h> </filename> and <filename class= "headerfile" > < ext/atomicity.h> </filename> ,
2012-03-28 01:13:14 +02:00
including change of namespace to <code > __gnu_cxx</code> in some
cases. Added types
include <code > _Lock_policy</code> , <code > __concurrence_lock_error</code> , <code > __concurrence_unlock_error</code> , <code > __mutex</code> , <code > __scoped_lock</code> .</para>
<para > Extensions for type traits consolidated
2019-06-02 17:48:37 +02:00
into <filename class= "headerfile" > < ext/type_traits.h> </filename> . Additional traits are added
2012-03-28 01:13:14 +02:00
(<code > __conditional_type</code> , <code > __enable_if</code> , others.)
</para>
<para > Extensions for policy-based data structures revised. New includes,
types, namespace moved to <code > __pb_ds</code> .
</para>
<para > Extensions for debug mode modified: now nested in <code > namespace
std::__debug</code> and extensions in <code > namespace
__gnu_cxx::__debug</code> .</para>
2019-06-02 17:48:37 +02:00
<para > Extensions added: <filename class= "headerfile" > < ext/typelist.h> </filename>
and <filename class= "headerfile" > < ext/throw_allocator.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
<section xml:id= "api.rel_430" > <info > <title > <constant > 4.3</constant> </title> </info>
<para >
</para>
<para >
C++0X features first appear.
</para>
2019-06-02 17:48:37 +02:00
<para > TR1 <filename class= "headerfile" > < regex> </filename> and <filename class= "headerfile" > < cmath> </filename> 's mathematical special function added.
2012-03-28 01:13:14 +02:00
</para>
<para >
Backward include edit.
</para>
<itemizedlist >
<listitem >
<para > Removed</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < algobase.h> </filename> <filename class= "headerfile" > < algo.h> </filename> <filename class= "headerfile" > < alloc.h> </filename> <filename class= "headerfile" > < bvector.h> </filename> <filename class= "headerfile" > < complex.h> </filename>
<filename class= "headerfile" > < defalloc.h> </filename> <filename class= "headerfile" > < deque.h> </filename> <filename class= "headerfile" > < fstream.h> </filename> <filename class= "headerfile" > < function.h> </filename> <filename class= "headerfile" > < hash_map.h> </filename> <filename class= "headerfile" > < hash_set.h> </filename>
<filename class= "headerfile" > < hashtable.h> </filename> <filename class= "headerfile" > < heap.h> </filename> <filename class= "headerfile" > < iomanip.h> </filename> <filename class= "headerfile" > < iostream.h> </filename> <filename class= "headerfile" > < istream.h> </filename> <filename class= "headerfile" > < iterator.h> </filename>
<filename class= "headerfile" > < list.h> </filename> <filename class= "headerfile" > < map.h> </filename> <filename class= "headerfile" > < multimap.h> </filename> <filename class= "headerfile" > < multiset.h> </filename> <filename class= "headerfile" > < new.h> </filename> <filename class= "headerfile" > < ostream.h> </filename> <filename class= "headerfile" > < pair.h> </filename> <filename class= "headerfile" > < queue.h> </filename> <filename class= "headerfile" > < rope.h> </filename> <filename class= "headerfile" > < set.h> </filename> <filename class= "headerfile" > < slist.h> </filename> <filename class= "headerfile" > < stack.h> </filename> <filename class= "headerfile" > < streambuf.h> </filename> <filename class= "headerfile" > < stream.h> </filename> <filename class= "headerfile" > < tempbuf.h> </filename>
<filename class= "headerfile" > < tree.h> </filename> <filename class= "headerfile" > < vector.h> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para > Added</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < hash_map> </filename> and <filename class= "headerfile" > < hash_set> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para > Added in C++11</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < auto_ptr.h> </filename> and <filename class= "headerfile" > < binders.h> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
</itemizedlist>
<para >
Header dependency streamlining.
</para>
<itemizedlist >
2019-06-02 17:48:37 +02:00
<listitem > <para > <filename class= "headerfile" > < algorithm> </filename> no longer includes <filename class= "headerfile" > < climits> </filename> , <filename class= "headerfile" > < cstring> </filename> , or <filename class= "headerfile" > < iosfwd> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < bitset> </filename> no longer includes <filename class= "headerfile" > < istream> </filename> or <filename class= "headerfile" > < ostream> </filename> , adds <filename class= "headerfile" > < iosfwd> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < functional> </filename> no longer includes <filename class= "headerfile" > < cstddef> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < iomanip> </filename> no longer includes <filename class= "headerfile" > < istream> </filename> , <filename class= "headerfile" > < istream> </filename> , or <filename class= "headerfile" > < functional> </filename> , adds <filename class= "headerfile" > < ioswd> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < numeric> </filename> no longer includes <filename class= "headerfile" > < iterator> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < string> </filename> no longer includes <filename class= "headerfile" > < algorithm> </filename> or <filename class= "headerfile" > < memory> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < valarray> </filename> no longer includes <filename class= "headerfile" > < numeric> </filename> or <filename class= "headerfile" > < cstdlib> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < tr1/hashtable> </filename> no longer includes <filename class= "headerfile" > < memory> </filename> or <filename class= "headerfile" > < functional> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < tr1/memory> </filename> no longer includes <filename class= "headerfile" > < algorithm> </filename> </para> </listitem>
<listitem > <para > <filename class= "headerfile" > < tr1/random> </filename> no longer includes <filename class= "headerfile" > < algorithm> </filename> or <filename class= "headerfile" > < fstream> </filename> </para> </listitem>
2012-03-28 01:13:14 +02:00
</itemizedlist>
<para >
2019-06-02 17:48:37 +02:00
Debug mode for <filename class= "headerfile" > < unordered_map> </filename> and <filename class= "headerfile" > < unordered_set> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para >
Parallel mode first appears.
</para>
2019-06-02 17:48:37 +02:00
<para > Variadic template implementations of items in <filename class= "headerfile" > < tuple> </filename> and
<filename class= "headerfile" > < functional> </filename> .
2012-03-28 01:13:14 +02:00
</para>
<para > Default <code > what</code> implementations give more elaborate
exception strings for <code > bad_cast</code> ,
<code > bad_typeid</code> , <code > bad_exception</code> , and
<code > bad_alloc</code> .
</para>
<para >
PCH binary files no longer installed. Instead, the source files are installed.
</para>
<para >
Namespace pb_ds moved to __gnu_pb_ds.
</para>
</section>
<section xml:id= "api.rel_440" > <info > <title > <constant > 4.4</constant> </title> </info>
<para >
</para>
<para >
C++0X features.
</para>
<itemizedlist >
<listitem >
<para >
Added.
</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < atomic> </filename> ,
<filename class= "headerfile" > < chrono> </filename> ,
<filename class= "headerfile" > < condition_variable> </filename> ,
<filename class= "headerfile" > < forward_list> </filename> ,
<filename class= "headerfile" > < initializer_list> </filename> ,
<filename class= "headerfile" > < mutex> </filename> ,
<filename class= "headerfile" > < ratio> </filename> ,
<filename class= "headerfile" > < thread> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para >
Updated and improved.
</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < algorithm> </filename> ,
<filename class= "headerfile" > < system_error> </filename> ,
<filename class= "headerfile" > < type_traits> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para >
Use of the GNU extension namespace association converted to inline namespaces.
</para>
</listitem>
<listitem >
<para >
Preliminary support for <classname > initializer_list</classname>
and defaulted and deleted constructors in container classes.
</para>
</listitem>
<listitem >
<para >
<classname > unique_ptr</classname> .
</para>
</listitem>
<listitem >
<para >
Support for new character types <type > char16_t</type>
and <type > char32_t</type> added
to <classname > char_traits</classname> , <classname > basic_string</classname> , <classname > numeric_limits</classname> ,
and assorted compile-time type traits.
</para>
</listitem>
<listitem >
<para >
Support for string conversions <function > to_string</function>
and <function > to_wstring</function> .
</para>
</listitem>
<listitem >
<para >
Member functions taking string arguments were added to iostreams
including <classname > basic_filebuf</classname> , <classname > basic_ofstream</classname> ,
and <classname > basic_ifstream</classname> .
</para>
</listitem>
<listitem >
<para >
Exception propagation support,
including <classname > exception_ptr</classname> , <function > current_exception</function> , <function > copy_exception</function> ,
and <function > rethrow_exception</function> .
</para>
</listitem>
</itemizedlist>
<para >
Uglification of <literal > try</literal> to <literal > __try</literal>
and <literal > catch</literal> to <literal > __catch</literal> .
</para>
<para >
Audit of internal mutex usage, conversion to functions returning static
local mutex.
</para>
<para > Extensions
2019-06-02 17:48:37 +02:00
added: <filename class= "headerfile" > < ext/pointer.h> </filename>
and <filename class= "headerfile" > < ext/extptr_allocator.h> </filename> . Support
2012-03-28 01:13:14 +02:00
for non-standard pointer types has been added
to <classname > vector</classname>
and <classname > forward_list</classname> .
</para>
</section>
<section xml:id= "api.rel_450" > <info > <title > <constant > 4.5</constant> </title> </info>
<para >
</para>
<para >
C++0X features.
</para>
<itemizedlist >
<listitem >
<para >
Added.
</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < functional> </filename> ,
<filename class= "headerfile" > < future> </filename> ,
<filename class= "headerfile" > < random> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para >
Updated and improved.
</para>
<para >
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < atomic> </filename> ,
<filename class= "headerfile" > < system_error> </filename> ,
<filename class= "headerfile" > < type_traits> </filename>
2012-03-28 01:13:14 +02:00
</para>
</listitem>
<listitem >
<para >
Add support for explicit operators and standard layout types.
</para>
</listitem>
</itemizedlist>
<para >
Profile mode first appears.
</para>
<para >
Support for decimal floating-point arithmetic, including <classname > decimal32</classname> , <classname > decimal64</classname> , and <classname > decimal128</classname> .
</para>
<para >
Python pretty-printers are added for use with appropriately-advanced versions of <command > gdb</command> .
</para>
<para >
2015-08-28 17:33:40 +02:00
Audit for application of function attributes nothrow, const, pure, and noreturn.
2012-03-28 01:13:14 +02:00
</para>
<para >
The default behavior for comparing typeinfo names changed, so
2019-06-02 17:48:37 +02:00
in <filename class= "headerfile" > < typeinfo> </filename> , <literal > __GXX_MERGED_TYPEINFO_NAMES</literal>
2012-03-28 01:13:14 +02:00
now defaults to zero.
</para>
2019-06-02 17:48:37 +02:00
<para > Extensions modified: <filename class= "headerfile" > < ext/throw_allocator.h> </filename> .
2012-03-28 01:13:14 +02:00
</para>
</section>
2015-08-28 17:33:40 +02:00
<section xml:id= "api.rel_460" > <info > <title > <constant > 4.6</constant> </title> </info>
<para >
Use constexpr and nullptr where appropriate throughout the library.
</para>
<para >
The library was updated to avoid including
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < stddef.h> </filename> in order
2015-08-28 17:33:40 +02:00
to reduce namespace pollution.
</para>
<para > Reference-count annotations to assist data race detectors.
</para>
<para >
Added <function > make_exception_ptr</function> as an alias of
<function > copy_exception</function> .
</para>
</section>
<section xml:id= "api.rel_470" > <info > <title > <constant > 4.7</constant> </title> </info>
<para > Use of noexcept throughout library.</para>
<para > Partial support for C++11 allocators first appears.</para>
<para >
<classname > monotonic_clock</classname> renamed to
<classname > steady_clock</classname> as required by the final C++11
standard.
</para>
<para > A new clocale model for newlib is available.</para>
<para >
The library was updated to avoid including
2019-06-02 17:48:37 +02:00
<filename class= "headerfile" > < unistd.h> </filename> in order
2015-08-28 17:33:40 +02:00
to reduce namespace pollution.
</para>
<para > Debug Mode was improved for unordered containers. </para>
</section>
<section xml:id= "api.rel_480" > <info > <title > <constant > 4.8</constant> </title> </info>
<para >
New random number engines and distributions.
Optimisations for random.
</para>
<para > New --enable-libstdcxx-verbose configure option</para>
<para >
The --enable-libstdcxx-time configure option becomes unnecessary given a
sufficiently recent glibc.
</para>
</section>
<section xml:id= "api.rel_490" > <info > <title > <constant > 4.9</constant> </title> </info>
<para > Implementation of <classname > regex</classname> completed. </para>
<para > C++14 library and TS implementations are added. </para>
<para > <function > copy_exception</function> deprecated. </para>
<para > <classname > __gnu_cxx::array_allocator</classname> deprecated. </para>
</section>
2018-12-28 16:30:48 +01:00
<section xml:id= "api.rel_51" > <info > <title > <constant > 5</constant> </title> </info>
2015-08-28 17:33:40 +02:00
<para >
ABI transition adds new implementations of several components, using the
<code > abi_tag</code> attribute and the <code > __cxx11</code> inline
namespace to distinguish the new entities from the old ones.
</para>
<itemizedlist >
<listitem >
<para >
Use of the new or old ABI can be selected per-translation unit with the
2018-12-28 16:30:48 +01:00
<xref linkend= "manual.intro.using.macros" > <symbol > _GLIBCXX_USE_CXX11_ABI</symbol>
macro</xref> .
2015-08-28 17:33:40 +02:00
</para>
</listitem>
<listitem >
<para >
New non-reference-counted <classname > string</classname> implementation.
</para>
</listitem>
<listitem >
<para >
New <classname > list</classname> implementation containing a new
data member in order to provide O(1) <function > size()</function> .
</para>
</listitem>
2018-12-28 16:30:48 +01:00
<listitem >
<para >
New <classname > ios_base::failure</classname> implementation inheriting
from <classname > system_error</classname> .
</para>
</listitem>
2015-08-28 17:33:40 +02:00
</itemizedlist>
<para >
C++11 support completed (movable iostreams, new I/O manipulators,
Unicode conversion utilities, atomic operations for
<classname > shared_ptr</classname> , functions for notifying condition
variables and making futures ready at thread exit).
</para>
<para >
Changed formatting of floating point types when
<code > ios_base::fixed|ios_base::scientific</code> is set in a stream's
format flags.
</para>
<para > Improved C++14 support and TS implementations. </para>
<para > New random number engines and distributions. </para>
<para >
GDB Xmethods for containers and <classname > unique_ptr</classname> added.
</para>
<para >
<classname > has_trivial_default_constructor</classname> ,
<classname > has_trivial_copy_constructor</classname> and
<classname > has_trivial_copy_assign</classname> deprecated.
</para>
2018-12-28 16:30:48 +01:00
<section xml:id= "api.rel_53" > <info > <title > <constant > 5.3</constant> </title> </info>
<para > Experimental implementation of the C++ Filesystem TS added. </para>
</section>
</section>
<section xml:id= "api.rel_61" > <info > <title > <constant > 6</constant> </title> </info>
<para > C++14 support completed. </para>
<para >
Support for mathematical special functions (ISO/IEC 29124:2010) added.
</para>
<para >
Assertions to check function preconditions can be enabled by defining the
<xref linkend= "manual.intro.using.macros" > <symbol > _GLIBCXX_ASSERTIONS</symbol>
macro</xref> .
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.
</para>
</section>
<section xml:id= "api.rel_71" > <info > <title > <constant > 7</constant> </title> </info>
<para >
The type of exception thrown by iostreams changed to the <code > cxx11</code>
ABI version of <classname > std::ios_base::failure</classname> .
</para>
<para >
Experimental C++17 support added, including most new library features.
The meaning of <classname > shared_ptr< T[]> </classname> changed to
match the C++17 semantics.
</para>
<para >
<xref linkend= "manual.intro.using.macros" > <symbol > _GLIBCXX_RELEASE</symbol>
macro</xref> added.
</para>
<para >
<classname > has_trivial_default_constructor</classname> ,
<classname > has_trivial_copy_constructor</classname> and
<classname > has_trivial_copy_assign</classname> removed.
</para>
<para > Profile Mode was deprecated. </para>
2019-06-02 17:48:37 +02:00
<section xml:id= "api.rel_72" > <info > <title > <constant > 7.2</constant> </title> </info>
<para >
Library Fundamentals TS header
<filename class= "headerfile" > < experimental/source_location> </filename>
added.
</para>
</section>
2018-12-28 16:30:48 +01:00
<section xml:id= "api.rel_73" > <info > <title > <constant > 7.3</constant> </title> </info>
<para >
Including new C++14 or C++17 headers without a suitable <option > -std</option>
no longer causes compilation to fail via <literal > #error</literal> .
Instead the header is simply empty and doesn't define anything.
</para>
2015-08-28 17:33:40 +02:00
</section>
2018-12-28 16:30:48 +01:00
</section>
<section xml:id= "api.rel_81" > <info > <title > <constant > 8</constant> </title> </info>
<para >
The exceptions thrown by iostreams can now be caught by handlers for either
version of <classname > std::ios_base::failure</classname> .
</para>
<para >
2019-06-02 17:48:37 +02:00
Improved experimental C++17 support. Headers
<filename class= "headerfile" > < charconv> </filename> and
<filename class= "headerfile" > < filesystem> </filename> .
2018-12-28 16:30:48 +01:00
Experimental implementation of the C++17 Filesystem library added.
</para>
2019-06-02 17:48:37 +02:00
<para >
Experimental C++2a support
(<function > to_address</function> and <classname > endian</classname> ).
</para>
2018-12-28 16:30:48 +01:00
<para >
AddressSanitizer annotations added to <classname > std::vector</classname>
to detect out-of-range accesses to the unused capacity of a vector.
</para>
<para >
<function > std::char_traits< char16_t> ::to_int_type(u'\uFFFF')</function>
now returns <literal > 0xFFFD</literal> , as <literal > 0xFFFF</literal> is
used for <function > std::char_traits< char16_t> ::eof()</function> .
</para>
<para >
The extension allowing arithmetic on
<classname > std::atomic< void*> </classname> and types like
<classname > std::atomic< R(*)()> </classname> was deprecated.
</para>
<para >
The <function > std::uncaught_exception</function> function was deprecated
for C++17 mode.
</para>
<para >
The nested typedefs <type > std::hash::result_type</type> and
<type > std::hash::argument_type</type> were deprecated for C++17 mode.
</para>
<para >
The deprecated iostream members <type > ios_base::io_state</type> ,
<type > ios_base::open_mode</type> , <type > ios_base::seek_dir</type> , and
<function > basic_streambuf::stossc</function> were removed for C++17 mode.
</para>
<para >
The non-standard C++0x <function > std::copy_exception</function> function
was removed.
</para>
<para >
For <option > -std=c++11</option> , <option > -std=c++14</option> , and
<option > -std=c++17</option> modes the <filename > < complex.h> </filename>
header no longer includes the C99 <filename > < complex.h> </filename>
header.
</para>
<para >
For the non-default <option > --enable-symvers=gnu-versioned-namespace</option>
configuration, the shared library SONAME has been changed to
<filename > libstdc++.so.8</filename> .
</para>
</section>
2019-06-02 17:48:37 +02:00
<section xml:id= "api.rel_91" > <info > <title > <constant > 9</constant> </title> </info>
<para >
C++17 header
<filename class= "headerfile" > < memory_resource> </filename>
added.
</para>
<para >
Experimental C++2a support improved, with new headers
<filename class= "headerfile" > < bit> </filename> and
<filename class= "headerfile" > < version> </filename> added.
Support for new character type <type > char8_t</type> added
to <classname > char_traits</classname> , <classname > basic_string</classname> ,
<classname > numeric_limits</classname> ,
and relevant locale facets and type traits.
</para>
<para >
Experimental implementation of the Networking TS library added,
with new headers
<filename class= "headerfile" > < experimental/buffer> </filename> ,
<filename class= "headerfile" > < experimental/executor> </filename> ,
<filename class= "headerfile" > < experimental/internet> </filename> ,
<filename class= "headerfile" > < experimental/io_context> </filename> ,
<filename class= "headerfile" > < experimental/net> </filename> ,
<filename class= "headerfile" > < experimental/netfwd> </filename> ,
<filename class= "headerfile" > < experimental/socket> </filename> ,
and
<filename class= "headerfile" > < experimental/timer> </filename> .
</para>
</section>
2012-03-28 01:13:14 +02:00
</section>