blob: 5dc287707d84693df26895df613041b2536c4c11 [file] [log] [blame]
<section xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="status.iso.2014" xreflabel="Status C++ 2014">
<?dbhtml filename="status_iso_cxx2014.html"?>
<info><title>C++ 2014</title>
<keywordset>
<keyword>ISO C++</keyword>
<keyword>2014</keyword>
</keywordset>
</info>
<para>
In this implementation the <literal>-std=gnu++14</literal> or
<literal>-std=c++14</literal> flag must be used to enable language
and library
features. See <link linkend="manual.intro.using.flags">dialect</link>
options. The pre-defined symbol
<constant>__cplusplus</constant> is used to check for the
presence of the required flag.
GCC 6.1 was the first release with non-experimental C++14 support,
so the API and ABI of features added in C++14 is only stable
since that release.
</para>
<para>
This status table is based on the table of contents of ISO/IEC 14882:2014.
Some subclauses are not shown in the table where the content is unchanged
since C++11 and the implementation is complete.
</para>
<para>
This section describes the C++14 and library TS support in mainline GCC,
not in any particular release.
</para>
<!-- Status is Yes or No, Broken/Partial-->
<!--
Yes
No
<?dbhtml bgcolor="#C8B0B0" ?>
Broken/Partial
<?dbhtml bgcolor="#B0B0B0" ?>
-->
<table frame="all" xml:id="table.cxx14_status">
<title>C++ 2014 Implementation Status</title>
<tgroup cols="4" align="left" colsep="0" rowsep="1">
<colspec colname="c1"/>
<colspec colname="c2"/>
<colspec colname="c3"/>
<colspec colname="c4"/>
<thead>
<row>
<entry>Section</entry>
<entry>Description</entry>
<entry>Status</entry>
<entry>Comments</entry>
</row>
</thead>
<tbody>
<row>
<entry>
<emphasis>18</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Language support</emphasis>
</entry>
</row>
<row>
<entry>18.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.2</entry>
<entry>Types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.3</entry>
<entry>Implementation properties</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.3.2</entry>
<entry>Numeric Limits</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.3.2.3</entry>
<entry>Class template <code>numeric_limits</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.3.2.4</entry>
<entry><code>numeric_limits</code> members</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>18.3.2.5</entry>
<entry><code>float_round_style</code></entry>
<entry>N</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>18.3.2.6</entry>
<entry><code>float_denorm_style</code></entry>
<entry>N</entry>
<entry/>
</row>
<row>
<entry>18.3.2.7</entry>
<entry><code>numeric_limits</code> specializations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.3.3</entry>
<entry>C Library</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.4</entry>
<entry>Integer types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.4.1</entry>
<entry>Header <code>&lt;cstdint&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>18.5</entry>
<entry>Start and termination</entry>
<entry>Partial</entry>
<entry>C library dependency for quick_exit, at_quick_exit</entry>
</row>
<row>
<entry>18.6</entry>
<entry>Dynamic memory management</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.7</entry>
<entry>Type identification</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.7.1</entry>
<entry>Class type_info</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.7.2</entry>
<entry>Class bad_cast</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.7.3</entry>
<entry>Class bad_typeid</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8</entry>
<entry>Exception handling</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.8.1</entry>
<entry>Class exception</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8.2</entry>
<entry>Class bad_exception</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8.3</entry>
<entry>Abnormal termination</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8.4</entry>
<entry><code>uncaught_exception</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8.5</entry>
<entry>Exception Propagation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.8.6</entry>
<entry><code>nested_exception</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.9</entry>
<entry>Initializer lists</entry>
<entry/>
<entry/>
</row>
<row>
<entry>18.9.1</entry>
<entry>Initializer list constructors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.9.2</entry>
<entry>Initializer list access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.9.3</entry>
<entry>Initializer list range access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>18.10</entry>
<entry>Other runtime support</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>19</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Diagnostics</emphasis>
</entry>
</row>
<row>
<entry>19.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>19.2</entry>
<entry>Exception classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.3</entry>
<entry>Assertions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.4</entry>
<entry>Error numbers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.5</entry>
<entry>System error support</entry>
<entry/>
<entry/>
</row>
<row>
<entry>19.5.1</entry>
<entry>Class <code>error_category</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.5.2</entry>
<entry>Class <code>error_code</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.5.3</entry>
<entry>Class <code>error_condition</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.5.4</entry>
<entry>Comparison operators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>19.5.5</entry>
<entry>Class <code>system_error</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>20</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>General utilities</emphasis>
</entry>
</row>
<row>
<entry>20.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.2</entry>
<entry>Utility components</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.2.1</entry>
<entry>Operators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.2.2</entry>
<entry>swap</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.2.3</entry>
<entry>exchange</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.2.4</entry>
<entry>forward/move helpers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.2.5</entry>
<entry>Function template <code>declval</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.3</entry>
<entry>Pairs</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.4</entry>
<entry>Tuples</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.5</entry>
<entry>Compile-time integer sequences</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.5.2</entry>
<entry>Class template <code>integer_sequence</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.5.3</entry>
<entry>Alias template <code>make_integer_sequence</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.6</entry>
<entry>Class template <code>bitset</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.7</entry>
<entry>Memory</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8</entry>
<entry>Smart pointers</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.8.1</entry>
<entry>Class template <code>unique_ptr</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.1.1</entry>
<entry>Default deleters</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.1.2</entry>
<entry><code>unique_ptr</code> for single objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.1.3</entry>
<entry><code>unique_ptr</code> for array objects with a runtime length</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.1.4</entry>
<entry><code>unique_ptr</code> creation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.1.5</entry>
<entry><code>unique_ptr</code> specialized algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2</entry>
<entry>Shared-ownership pointers</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.8.2.1</entry>
<entry>Class <code>bad_weak_ptr</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2.2</entry>
<entry>Class template <code>shared_ptr</code></entry>
<entry>Y</entry>
<entry>
Uses code from
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.boost.org/libs/smart_ptr/shared_ptr.htm">boost::shared_ptr</link>.
</entry>
</row>
<row>
<entry>20.8.2.3</entry>
<entry>Class template <code>weak_ptr</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2.4</entry>
<entry>Class template <code>owner_less</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2.5</entry>
<entry>Class template <code>enable_shared_from_this</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2.6</entry>
<entry><code>shared_ptr</code> atomic access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.2.7</entry>
<entry>Smart pointer hash support</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9</entry>
<entry>Function objects</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.9.1</entry>
<entry>Definitions</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.9.2</entry>
<entry>Requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.9.3</entry>
<entry>Class template <code>reference_wrapper</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.4</entry>
<entry>Arithmetic operation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.5</entry>
<entry>Comparisons</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.8.6</entry>
<entry>Logical operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.7</entry>
<entry>Bitwise operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.8</entry>
<entry>Negators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.9</entry>
<entry>Function object binders</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.10</entry>
<entry>Function template <code>mem_fn</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.9.11</entry>
<entry>Polymorphic function wrappers</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.9.11.1</entry>
<entry>Class <code>bad_function_call</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>20.9.11.2</entry>
<entry>Class template <code>function</code></entry>
<entry>Partial</entry>
<entry>Missing allocator support</entry>
</row>
<row>
<entry>20.9.12</entry>
<entry>Class template <code>hash</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10</entry>
<entry>Metaprogramming and type traits</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.10.1</entry>
<entry>Requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10.2</entry>
<entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.10.3</entry>
<entry>Helper classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10.4</entry>
<entry>Unary Type Traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10.5</entry>
<entry>Type property queries</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10.6</entry>
<entry>Relationships between types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.10.7</entry>
<entry>Transformations between types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.11</entry>
<entry>Compile-time rational arithmetic</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12</entry>
<entry>Time utilities</entry>
<entry/>
<entry/>
</row>
<row>
<entry>20.12.3</entry>
<entry>Clock requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.4</entry>
<entry>Time-related traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.5</entry>
<entry>Class template <code>duration</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.5.8</entry>
<entry>Suffixes for duration literals</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.6</entry>
<entry>Class template <code>time_point</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.7</entry>
<entry>Clocks</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.12.8</entry>
<entry>Date and time functions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.13</entry>
<entry>Scoped allocator adaptor</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>20.14</entry>
<entry>Class <code>type_index</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>21</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Strings</emphasis>
</entry>
</row>
<row>
<entry>21.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.2</entry>
<entry>Character traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.3</entry>
<entry>String classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.4</entry>
<entry>Class template <code>basic_string</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.5</entry>
<entry>Numeric Conversions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.6</entry>
<entry>Hash support</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.7</entry>
<entry>Suffixes for <code>basic_string</code> literals</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>21.7</entry>
<entry>Null-terminated sequence utilities</entry>
<entry>Partial</entry>
<entry>C library dependency. </entry>
</row>
<row>
<entry>
<emphasis>22</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Localization</emphasis>
</entry>
</row>
<row>
<entry>22.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.2</entry>
<entry>Header <code>&lt;locale&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.3</entry>
<entry>Locales</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.4</entry>
<entry>Standard <code>locale</code> categories</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.5</entry>
<entry>Standard code conversion facets</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.6</entry>
<entry>C Library Locales</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>23</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Containers</emphasis>
</entry>
</row>
<row>
<entry>23.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.2</entry>
<entry>Container requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.3</entry>
<entry>Sequence containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.4</entry>
<entry>Associative containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.5</entry>
<entry>Unordered associative containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.6</entry>
<entry>Container adaptors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>24</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Iterators</emphasis>
</entry>
</row>
<row>
<entry>24.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.2</entry>
<entry>Iterator requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.3</entry>
<entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4</entry>
<entry>Iterator primitives</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.5</entry>
<entry>Iterator adaptors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.6</entry>
<entry>Stream iterators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.7</entry>
<entry>range access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>25</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Algorithms</emphasis>
</entry>
</row>
<row>
<entry>25.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>25.2</entry>
<entry>Non-modifying sequence operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.3</entry>
<entry>Mutating sequence operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.4</entry>
<entry>Sorting and related operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.5</entry>
<entry>C library algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>26</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Numerics</emphasis>
</entry>
</row>
<row>
<entry>26.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>26.2</entry>
<entry>Numeric type requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.3</entry>
<entry>The floating-point environment</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.4</entry>
<entry>Complex numbers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.4.10</entry>
<entry>Suffixes for complex number literals</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.5</entry>
<entry>Random number generation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.6</entry>
<entry>Numeric arrays</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.7</entry>
<entry>Generalized numeric operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.8</entry>
<entry>C Library</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>27</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Input/output library</emphasis>
</entry>
</row>
<row>
<entry>27.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.2</entry>
<entry>Iostreams requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.2.1</entry>
<entry>Imbue Limitations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.2.2</entry>
<entry>Positioning Type Limitations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>27.2.3</entry>
<entry>Thread safety</entry>
<entry>Partial</entry>
<entry/>
</row>
<row>
<entry>27.3</entry>
<entry>Forward declarations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.4</entry>
<entry>Standard iostream objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.5</entry>
<entry>Iostreams base classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.6</entry>
<entry>Stream buffers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.7</entry>
<entry>Formatting and manipulators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.7.6</entry>
<entry>Quoted manipulators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.8</entry>
<entry>String-based streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.9</entry>
<entry>File-based streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>28</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Regular expressions</emphasis>
</entry>
</row>
<row>
<entry>28.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.3</entry>
<entry>Requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.4</entry>
<entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.5</entry>
<entry>Namespace <code>std::regex_constants</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.6</entry>
<entry>Class <code>regex_error</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>28.7</entry>
<entry>Class template <code>regex_traits</code></entry>
<entry>Partial</entry>
<entry><code>transform_primary</code> is not correctly implemented</entry>
</row>
<row>
<entry>28.8</entry>
<entry>Class template <code>basic_regex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.9</entry>
<entry>Class template <code>sub_match</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.10</entry>
<entry>Class template <code>match_results</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.11</entry>
<entry>Regular expression algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.12</entry>
<entry>Regular expression Iterators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.13</entry>
<entry>Modified ECMAScript regular expression grammar</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>29</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Atomic operations</emphasis>
</entry>
</row>
<row>
<entry>29.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.2</entry>
<entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.3</entry>
<entry>Order and consistency</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.4</entry>
<entry>Lock-free property</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.5</entry>
<entry>Atomic types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.6</entry>
<entry>Operations on atomic types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.7</entry>
<entry>Flag Type and operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8</entry>
<entry>Fences</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>30</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Thread support</emphasis>
</entry>
</row>
<row>
<entry>30.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.2</entry>
<entry>Requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.3</entry>
<entry>Threads</entry>
<entry/>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.3.1</entry>
<entry>Class <code>thread</code></entry>
<entry>Partial</entry>
<entry><code>thread::id</code> comparisons not well-defined</entry>
</row>
<row>
<entry>30.3.2</entry>
<entry>Namespace <code>this_thread</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4</entry>
<entry>Mutual exclusion</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1</entry>
<entry>Mutex requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1.1</entry>
<entry>In general</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1.2</entry>
<entry>Mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1.2.1</entry>
<entry>Class <code>mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.1.2.2</entry>
<entry>Class <code>recursive_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.1.3</entry>
<entry>Timed mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1.3.1</entry>
<entry>Class <code>timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.1.3.2</entry>
<entry>Class <code>recursive_timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.1.4</entry>
<entry>Shared timed mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.1.4.1</entry>
<entry>Class <code>shared_timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.2</entry>
<entry>Locks</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.2.1</entry>
<entry>Class template <code>lock_guard</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.2.2</entry>
<entry>Class template <code>unique_lock</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.2.3</entry>
<entry>Class template <code>shared_lock</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.3</entry>
<entry>Generic locking algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4.4</entry>
<entry>Call once</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.4.4.1</entry>
<entry>Struct <code>once_flag</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.4.4.2</entry>
<entry>Function <code>call_once</code></entry>
<entry>Broken</entry>
<entry>Exception support is broken on non-Linux targets.
See <link xmlns:xlink="http://www.w3.org/1999/xlink"
xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146">PR
66146</link>.
</entry>
</row>
<row>
<entry>30.5</entry>
<entry>Condition variables</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.5.1</entry>
<entry>Class <code>condition_variable</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.5.2</entry>
<entry>Class <code>condition_variable_any</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6</entry>
<entry>Futures</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.6.1</entry>
<entry>Overview</entry>
<entry/>
<entry/>
</row>
<row>
<entry>30.6.2</entry>
<entry>Error handling</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.3</entry>
<entry>Class <code>future_error</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.4</entry>
<entry>Shared state</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.5</entry>
<entry>Class template <code>promise</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.6</entry>
<entry>Class template <code>future</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.7</entry>
<entry>Class template <code>shared_future</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.8</entry>
<entry>Function template <code>async</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6.9</entry>
<entry>Class template <code>packaged_task</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>Appendix D</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Compatibility features</emphasis>
</entry>
</row>
<row>
<entry>D.1</entry>
<entry>Increment operator with <code>bool</code> operand</entry>
<entry/>
<entry/>
</row>
<row>
<entry>D.2</entry>
<entry><code>register</code> keyword</entry>
<entry/>
<entry/>
</row>
<row>
<entry>D.3</entry>
<entry>Implicit declaration of copy functions</entry>
<entry/>
<entry/>
</row>
<row>
<entry>D.4</entry>
<entry>Dynamic exception specifications</entry>
<entry/>
<entry/>
</row>
<row>
<entry>D.5</entry>
<entry>C standard library headers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.6</entry>
<entry>Old iostreams members</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.7</entry>
<entry><code>char*</code> streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.8</entry>
<entry>Function objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.9</entry>
<entry>Binders</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.10</entry>
<entry><code>auto_ptr</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.11</entry>
<entry>Violating exception-specifications</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.12</entry>
<entry>Random shuffle</entry>
<entry>Y</entry>
<entry/>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" xml:id="table.ts_status">
<title>C++ Technical Specifications Implementation Status</title>
<tgroup cols="4" align="left" colsep="0" rowsep="1">
<colspec colname="c1"/>
<colspec colname="c2"/>
<colspec colname="c3"/>
<colspec colname="c4"/>
<thead>
<row>
<entry>Paper</entry>
<entry>Title</entry>
<entry>Status</entry>
<entry>Comments</entry>
</row>
</thead>
<tbody>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2013/n3662.html">
N3662
</link>
</entry>
<entry>C++ Dynamic Arrays</entry>
<entry>N</entry>
<entry>Array Extensions TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3793.html">
N3793
</link>
</entry>
<entry>A proposal to add a utility class to represent optional objects</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2013/n3804.html">
N3804
</link>
</entry>
<entry>Any library proposal</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3866.html">
N3866
</link>
</entry>
<entry>Invocation type traits, but dropping function_call_operator.</entry>
<entry>N</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
N3905
</link>
</entry>
<entry>Faster string searching (Boyer-Moore et al.)</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3915.pdf">
N3915
</link>
</entry>
<entry>apply() call a function with arguments from a tuple</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3916.pdf">
N3916
</link>
</entry>
<entry>Polymorphic memory resources</entry>
<entry>Partial (missing pool resource and buffer resource classes)</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3920.html">
N3920
</link>
</entry>
<entry>Extending shared_ptr to support arrays</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3921.html">
N3921
</link>
</entry>
<entry><code>string_view</code>: a non-owning reference to a string</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3925.pdf">
N3925
</link>
</entry>
<entry>A sample proposal</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3932.htm">
N3932
</link>
</entry>
<entry>Variable Templates For Type Traits</entry>
<entry>Y</entry>
<entry>Library Fundamentals TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4100.pdf">
N4100
</link>
</entry>
<entry>File System</entry>
<entry>Y</entry>
<entry>
Link with
<link linkend="manual.intro.using.linkage.experimental">
<option>-lstdc++fs</option></link>
</entry>
</row>
</tbody>
</tgroup>
</table>
<section xml:id="iso.2014.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
<section xml:id="iso.2014.filesystemts" xreflabel="Implementation Specific Behavior of the Filesystem TS"><info><title>Filesystem TS</title></info>
<para>
<emphasis>2.1 POSIX conformance [fs.conform.9945]</emphasis>
The behavior of the filesystem library implementation will depend on
the target operating system. Some features will not be supported
on some targets. Symbolic links and file permissions
are not supported on Windows.
</para>
<para>
<emphasis>15.30 Rename [fs.op.rename]</emphasis>
On Windows, <code>experimental::filesystem::rename</code>
is implemented by calling <code>MoveFileExW</code> and so
does not meet the requirements of POSIX <code>rename</code>
when one or both of the paths resolves to an existing directory.
Specifically, it is possible to rename a directory so it replaces
a non-directory (POSIX requires an error in that case),
and it is not possible to rename a directory to replace another
directory (POSIX requires that to work if the directory being
replaced is empty).
</para>
</section>
</section>
</section>