blob: 11372bb28b33b8230323fdd54e4c07951e5c2fed [file] [log] [blame]
<section xmlns="http://docbook.org/ns/docbook" version="5.0"
xml:id="status.iso.2017" xreflabel="Status C++ 2017">
<?dbhtml filename="status_iso_cxx2017.html"?>
<info><title>C++ 2017</title>
<keywordset>
<keyword>ISO C++</keyword>
<keyword>2017</keyword>
</keywordset>
</info>
<para>
In this implementation the <literal>-std=gnu++17</literal> or
<literal>-std=c++17</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 9.1 was the first release with non-experimental C++17 support,
so the API and ABI of features added in C++17 is only stable
since that release.
</para>
<para>
This section describes the C++17 and library TS support in mainline GCC,
not in any particular release.
</para>
<para>
The following table lists new library features that are included in
the C++17 standard. The "Proposal" column provides a link to the
ISO C++ committee proposal that describes the feature, while the "Status"
column indicates the first version of GCC that contains an implementation of
this feature (if it has been implemented).
The "SD-6 Feature Test" column shows the corresponding macro or header from
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations">SD-6:
Feature-testing recommendations for C++</link>.
</para>
<table frame="all" xml:id="table.cxx17_features">
<title>C++ 2017 Library Features</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>Library Feature</entry>
<entry>Proposal</entry>
<entry>Status</entry>
<entry>SD-6 Feature Test</entry>
</row>
</thead>
<tbody>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>
<code>constexpr std::hardware_{constructive,destructive}_interference_size</code>
</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html">
P0154R1
</link>
</entry>
<entry align="center"> No </entry>
<entry> <code>__cpp_lib_hardware_interference_size >= 201603</code> </entry>
</row>
<row>
<entry> Core Issue 1776: Replacement of class objects containing reference members</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0137r1.html">
P0137R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__cpp_lib_launder >= 201606</code> </entry>
</row>
<row>
<entry>Wording for <code>std::uncaught_exceptions</code></entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n4259.pdf">
N4259
</link>
</entry>
<entry align="center">6.1</entry>
<entry><code>__cpp_lib_uncaught_exceptions >= 201411</code></entry>
</row>
<row>
<entry> C++17 should refer to C11 instead of C99 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html">
P0063R3
</link>
</entry>
<entry align="center"> 9.1 </entry>
<entry/>
</row>
<row>
<entry> Variant: a type-safe union for C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html">
P0088R3
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__has_include(&lt;variant&gt;)</code>,
<code>__cpp_lib_variant >= 201603</code>
(since 7.3, see Note 1)
</entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>optional</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__has_include(&lt;optional&gt;)</code>,
<code>__cpp_lib_optional >= 201603</code>
(since 7.3, see Note 1)
</entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>any</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__has_include(&lt;any&gt;)</code>,
<code>__cpp_lib_any >= 201603</code>
(since 7.3, see Note 1)
</entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>string_view</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__has_include(&lt;string_view&gt;)</code>,
<code>__cpp_lib_string_view >= 201603</code>
(since 7.3, see Note 1)
</entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>memory_resource</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 9.1 </entry>
<entry> <code>__has_include(&lt;memory_resource&gt;)</code>,
<code>__cpp_lib_memory_resource >= 201603</code>
</entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>apply</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__cpp_lib_apply >= 201603</code> </entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: <code>shared_ptr&lt;T[]&gt;</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__cpp_lib_shared_ptr_arrays >= 201603</code> </entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: Searchers </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__cpp_lib_boyer_moore_searcher >= 201603</code> </entry>
</row>
<row>
<entry> Library Fundamentals V1 TS Components: Sampling </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
P0220R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code>__cpp_lib_sample >= 201603</code> </entry>
</row>
<row>
<entry> Constant View: A proposal for a <code>std::as_const</code> helper function template </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
P0007R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_as_const >= 201510 </code></entry>
</row>
<row>
<entry> Improving pair and tuple </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387">
N4387
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry> N/A </entry>
</row>
<row>
<entry> <code>make_from_tuple</code>: apply for construction </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0209r2.pdf">
P0209R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_make_from_tuple >= 201606 </code></entry>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>
Removing <code>auto_ptr</code>, <code>random_shuffle()</code>,
And Old <code>&lt;functional&gt;</code> Stuff
</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm">
N4190
</link>
</entry>
<entry align="center">No (kept for backwards compatibility)</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry> Deprecating Vestigial Library Parts in C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0174r2.html">
P0174R2
</link>
</entry>
<entry align="center"> No (kept for backwards compatibility)</entry>
<entry/>
</row>
<row>
<entry> Making <code>std::owner_less</code> more flexible </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0074r0.html">
P0074R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_transparent_operators >= 201510 </code></entry>
</row>
<row>
<entry> <code>std::addressof</code> should be constexpr </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0304r0.html#2296">
LWG2296
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_addressof_constexpr >= 201603 </code></entry>
</row>
<row>
<entry> Safe conversions in <code>unique_ptr&lt;T[]&gt;</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4089.pdf">
N4089
</link>
</entry>
<entry align="center"> 6 </entry>
<entry/>
</row>
<row>
<entry> LWG 2228: Missing SFINAE rule in unique_ptr templated assignment </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4366.html">
N4366
</link>
</entry>
<entry align="center"> 6 </entry>
<entry/>
</row>
<row>
<entry> Re-enabling <code>shared_from_this</code></entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0033r1.html">
P0033R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code>__cpp_lib_enable_shared_from_this >= 201603</code></entry>
</row>
<row>
<entry> A proposal to add <code>invoke</code> function template </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4169.html">
N4169
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry><code> __cpp_lib_invoke >= 201411 </code></entry>
</row>
<row>
<entry>TriviallyCopyable <code>reference_wrapper</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4277.html">
N4277
</link>
</entry>
<entry align="center"> 5.1 </entry>
<entry/>
</row>
<row>
<entry> Adopt <code>not_fn</code> from Library Fundamentals 2 for C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0005r4.html">
P0005R4
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code>__cpp_lib_not_fn >= 201603</code></entry>
</row>
<row>
<entry> Fixes for <code>not_fn</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html">
P0358R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry/>
</row>
<row>
<entry> Fixing a design mistake in the searchers interface in Library Fundamentals </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0253r1.pdf">
P0253R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry/>
</row>
<row>
<entry> Extending memory management tools </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0040r3.html">
P0040R3
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code>__cpp_lib_raw_memory_algorithms &gt;= 201606L</code></entry>
</row>
<row>
<entry> <code>shared_ptr::weak_type</code></entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0163r0.html">
P0163R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_shared_ptr_weak_type >= 201606</code></entry>
</row>
<row>
<entry>Transformation Trait Alias <code>void_t</code></entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n3911.pdf">
N3911
</link>
</entry>
<entry align="center">6.1</entry>
<entry><code> __cpp_lib_void_t >= 201411</code></entry>
</row>
<row>
<entry> Wording for <code>bool_constant</code>, revision 1 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html">
N4389
</link>
</entry>
<entry align="center">6.1</entry>
<entry><code> __cpp_lib_bool_constant >= 201505</code></entry>
</row>
<row>
<entry> Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0006r0.html">
P0006R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_type_trait_variable_templates >= 201510 </code></entry>
</row>
<row>
<entry> Logical Operator Type Traits</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0013r1.html">
P0013R1
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry><code> __cpp_lib_logical_traits >= 201510 </code></entry>
</row>
<row>
<entry> Adding [nothrow-]swappable traits </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0185r1.html">
P0185R1
</link>
</entry>
<entry align="center"> 7.1 (<code>__is_swappable</code> available since 6.1)</entry>
<entry><code> __cpp_lib_is_swappable >= 201603 </code></entry>
</row>
<row>
<entry> <code>is_callable</code>, the missing INVOKE related trait</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0077r2.html">
P0077R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_is_invocable >= 201703 </code></entry>
</row>
<row>
<entry> has_unique_object_representations </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0258r2.html">
P0258R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_has_unique_object_representations >= 201606 </code></entry>
</row>
<row>
<entry> Polishing <code>&lt;chrono&gt;</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0092r1.html">
P0092R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_chrono >= 201510 </code></entry>
</row>
<row>
<entry> Adding more constexpr to <code>&lt;chrono&gt;</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0505r0.html">
P0505R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_chrono >= 201611 </code>
(since 7.3, see Note 2)
</entry>
</row>
<row>
<entry> Constexpr for <code>std::char_traits</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0426r1.html">
P0426R1
</link>
</entry>
<entry align="center"> 8.1 </entry>
<entry><code> __cpp_lib_constexpr_char_traits >= 201611 </code></entry>
</row>
<row>
<entry> Integrating <code>std::string_view</code> and <code>std::string</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0254r2.pdf">
P0254R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> </code></entry>
</row>
<row>
<entry> Give 'std::string' a non-const '.data()' member function </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html">
P0272R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> </code></entry>
</row>
<row>
<entry>Cleaning-up noexcept in the Library</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf">
N4258
</link>
</entry>
<entry align="center">6.1</entry>
<entry><code> __cpp_lib_allocator_traits_is_always_equal >= 201411 </code></entry>
</row>
<row>
<entry>Contiguous Iterators </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4284.html">
N4284
</link>
</entry>
<entry align="center">N/A</entry>
<entry/>
</row>
<row>
<entry> Minimal incomplete type support for standard containers </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4510.html">
N4510
</link>
</entry>
<entry align="center"> 3.0 </entry>
<entry><code> __cpp_lib_incomplete_container_elements >= 201505 </code>
(since 6.2, see Note 2)
</entry>
</row>
<row>
<entry> Emplace return type </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf">
P0084R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry/>
</row>
<row>
<entry>Improved insertion interface for unique-key maps</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html">
N4279
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry><code> __cpp_lib_map_try_emplace >= 201411</code>,
<code> __cpp_lib_unordered_map_try_emplace >= 201411</code>
</entry>
</row>
<row>
<entry> Splicing Maps and Sets </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf">
P0083R3
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_node_extract >= 201606 </code></entry>
</row>
<row>
<entry>Non-member <code>size()</code> and more</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf">
N4280
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry><code> __cpp_lib_nonmember_container_access >= 201411 </code></entry>
</row>
<row>
<entry> A Proposal to Add Constexpr Modifiers to <code>reverse_iterator</code>, <code>move_iterator</code>, <code>array</code> and Range Access </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html">
P0031R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_array_constexpr >= 201603 </code></entry>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry> The Parallelism TS Should be Standardized </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r2.html">
P0024R2
</link>
</entry>
<entry align="center"> 9.1 </entry>
<entry><code> __has_include(&lt;execution&gt;)</code>,
<code> __cpp_lib_execution >= 201603 </code>,
<code> __cpp_lib_parallel_algorithm >= 201603 </code>
(requires linking with <code>-ltbb</code>, see Note 3)
</entry>
</row>
<row>
<entry> An algorithm to "clamp" a value between a pair of boundary values </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0025r0.html">
P0025R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_clamp >= 201603 </code></entry>
</row>
<row>
<entry> Adopt Selected Library Fundamentals V2 Components for C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0295r0.pdf">
P0295R0
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_gcd_lcm >= 201606 </code></entry>
</row>
<row>
<entry> Proposal to Introduce a 3-Argument Overload to <code>std::hypot</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0030r1.pdf">
P0030R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_hypot >= 201603 </code></entry>
</row>
<row>
<entry> Mathematical Special Functions for C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0226r1.pdf">
P0226R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_math_special_functions >= 201603 </code>
(see Note 4)
</entry>
</row>
<row>
<entry>Adopt the File System TS for C++17 </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r1.html">
P0218R1
</link>
</entry>
<entry align="center"> 8.1 </entry>
<entry><code> __has_include(&lt;filesystem&gt;)</code>,
<code> __cpp_lib_filesystem >= 201603 </code>
(GCC 8.x requires linking with <code>-lstdc++fs</code>)
</entry>
</row>
<row>
<entry> Relative Paths for Filesystem</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0219r1.html">
P0219R1
</link>
</entry>
<entry align="center"> 8.1 </entry>
<entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
</row>
<row>
<entry> Adapting string_view by filesystem paths </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0392r0.pdf">
P0392R0
</link>
</entry>
<entry align="center"> 8.1 </entry>
<entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
</row>
<row>
<entry> Directory Entry Caching for Filesystem </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0317r1.html">
P0317R1
</link>
</entry>
<entry align="center"> 8.1 </entry>
<entry><code> __cpp_lib_filesystem >= 201703 </code></entry>
</row>
<row>
<entry> constexpr <code>atomic&lt;T&gt;::is_always_lock_free</code> </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0152r1.html">
P0152R1
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_atomic_is_always_lock_free >= 201603 </code></entry>
</row>
<row>
<entry>A proposal to add <code>shared_mutex</code> (untimed) (Revision 4)</entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4508.html">
N4508
</link>
</entry>
<entry align="center"> 6.1 </entry>
<entry><code> __cpp_lib_shared_mutex >= 201505 </code></entry>
</row>
<row>
<entry> Variadic <code>lock_guard</code> (Rev. 5) </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0156r2.html">
P0156R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_scoped_lock >= 201703 </code></entry>
</row>
<row>
<entry> A byte type definition </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0298r3.pdf">
P0298R3
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry><code> __cpp_lib_byte >= 201603 </code> (since 7.3, see Note 2)
</entry>
</row>
<row>
<entry> Elementary string conversions </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0067r5.html">
P0067R5
</link>
</entry>
<entry align="center"> 11.1 (integral types supported since 8.1) </entry>
<entry><code> __has_include(&lt;charconv&gt;)</code>,
<code> __cpp_lib_to_chars >= 201611 </code></entry>
</row>
<row>
<entry> Homogeneous interface for variant, any and optional </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0032r3.pdf">
P0032R3
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry>
<code> __cpp_lib_any >= 201606 </code>,
<code> __cpp_lib_optional >= 201606 </code>,
<code> __cpp_lib_variant >= 201606 </code>
</entry>
</row>
<row>
<entry> Making Optional Greater Equal Again </entry>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0307r2.pdf">
P0307R2
</link>
</entry>
<entry align="center"> 7.1 </entry>
<entry> <code> __cpp_lib_optional >= 201606 </code> </entry>
</row>
</tbody>
</tgroup>
</table>
<para>
Note 1: This feature is supported in GCC 7.1 and 7.2 but before GCC 7.3 the
<code>__cpp_lib</code> macro is not defined, and compilation will fail if the
header is included without using <option>-std</option> to enable C++17 support.
</para>
<para>
Note 2: This feature is supported in older releases but the
<code>__cpp_lib</code> macro is not defined to the right value
(or not defined at all) until the version shown in parentheses.
</para>
<para>
Note 3: The Parallel Algorithms have an external dependency on Intel TBB 2018
or later. If the <filename class="headerfile">&lt;execution&gt;</filename>
header is included then <code>-ltbb</code> must be used to link to TBB.
</para>
<para>
Note 4: The mathematical special functions are enabled in C++17 mode from
GCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define
<code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code> to a non-zero value
and test for <code>__STDCPP_MATH_SPEC_FUNCS__ >= 201003L</code>.
</para>
<para>
The following status table is based on the table of contents of
ISO/IEC 14882:2017.
Some subclauses are not shown in the table where the content is unchanged
since C++14 and the implementation is complete.
</para>
<table frame="all" xml:id="table.cxx17_status">
<title>C++ 2017 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>21</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Language support</emphasis>
</entry>
</row>
<row>
<entry>21.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.2</entry>
<entry>Common definitions</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.3</entry>
<entry>Implementation properties</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.3.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.3.2</entry>
<entry>Header <code>&lt;limits&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.3.3</entry>
<entry>Floating-point type properties</entry>
<entry/>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>21.3.3.1</entry>
<entry><code>float_round_style</code></entry>
<entry>N</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>21.3.3.2</entry>
<entry><code>float_denorm_style</code></entry>
<entry>N</entry>
<entry/>
</row>
<row>
<entry>21.3.4</entry>
<entry>Class template <code>numeric_limits</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.3.5</entry>
<entry>Header <code>&lt;climits&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.3.6</entry>
<entry>Header <code>&lt;cfloat&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.4</entry>
<entry>Integer types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.4.1</entry>
<entry>Header <code>&lt;cstdint&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>21.5</entry>
<entry>Start and termination</entry>
<entry>Partial</entry>
<entry>C library dependency for quick_exit, at_quick_exit</entry>
</row>
<row>
<entry>21.6</entry>
<entry>Dynamic memory management</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.6.1</entry>
<entry>Header <code>&lt;new&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.6.2</entry>
<entry>Storage allocation and deallocation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.6.3</entry>
<entry>Storage allocation errors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.6.4</entry>
<entry>Pointer optimization barrier</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#C8B0B0" ?>
<entry>21.6.5</entry>
<entry>Hardware interference size</entry>
<entry>N</entry>
<entry/>
</row>
<row>
<entry>21.7</entry>
<entry>Type identification</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8</entry>
<entry>Exception handling</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.8.1</entry>
<entry>Header <code>&lt;exception&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>21.8.2</entry>
<entry>Class exception</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8.3</entry>
<entry>Class bad_exception</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8.4</entry>
<entry>Abnormal termination</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8.5</entry>
<entry><code>uncaught_exceptions</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8.6</entry>
<entry>Exception Propagation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.8.7</entry>
<entry><code>nested_exception</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.9</entry>
<entry>Initializer lists</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>21.10</entry>
<entry>Other runtime support</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>22</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Diagnostics</emphasis>
</entry>
</row>
<row>
<entry>22.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>22.2</entry>
<entry>Exception classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.3</entry>
<entry>Assertions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.4</entry>
<entry>Error numbers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>22.5</entry>
<entry>System error support</entry>
<entry/>
<entry/>
</row>
<row>
<entry>
<emphasis>23</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>General utilities</emphasis>
</entry>
</row>
<row>
<entry>23.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.2</entry>
<entry>Utility components</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.2.1</entry>
<entry>Header <code>&lt;utility&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.2.2</entry>
<entry>Operators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.3</entry>
<entry><code>swap</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.4</entry>
<entry><code>exchange</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.5</entry>
<entry>Forward/move helpers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.6</entry>
<entry>Function template <code>as_const</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.7</entry>
<entry>Function template <code>declval</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.2.8</entry>
<entry>Primitive numeric output conversion</entry>
<entry>Partial</entry>
<entry/>
</row>
<row>
<entry>23.2.9</entry>
<entry>Primitive numeric input conversion</entry>
<entry>Partial</entry>
<entry/>
</row>
<row>
<entry>23.3</entry>
<entry>Compile-time integer sequences</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.4</entry>
<entry>Pairs</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.5</entry>
<entry>Tuples</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.6</entry>
<entry>Optional objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.7</entry>
<entry>Variants</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.8</entry>
<entry>Storage for any type</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.9</entry>
<entry>Bitsets</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10</entry>
<entry>Memory</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.1</entry>
<entry>In general</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.10.2</entry>
<entry>Header <code>&lt;memory&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.3</entry>
<entry>Pointer traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.4</entry>
<entry>Pointer safety</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.5</entry>
<entry>Align</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.6</entry>
<entry>Allocator argument tag</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.7</entry>
<entry><code>uses_allocator</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.8</entry>
<entry>Allocator traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.9</entry>
<entry>The default allocator</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.10</entry>
<entry>Specialized algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.10.11</entry>
<entry>C library memory allocation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.11</entry>
<entry>Smart pointers</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.11.1</entry>
<entry>Class template <code>unique_ptr</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.11.2</entry>
<entry>Shared-ownership pointers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12</entry>
<entry>Memory resources</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.12.1</entry>
<entry>Header <code>&lt;memory_resource&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12.2</entry>
<entry>Class <code>memory_resource</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12.3</entry>
<entry>Class template <code>polymorphic_allocator</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12.4</entry>
<entry>Access to program-wide <code>memory_resource</code> objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12.5</entry>
<entry>Pool resource classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.12.6</entry>
<entry>Class <code>monotonic_buffer_resource</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.13</entry>
<entry>Class template <code>scoped_allocator_adaptor</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14</entry>
<entry>Function objects</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.14.1</entry>
<entry>Header <code>&lt;functional&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.14.2</entry>
<entry>Definitions</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.14.3</entry>
<entry>Requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.14.4</entry>
<entry>Function template <code>invoke</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.5</entry>
<entry>Class template <code>reference_wrapper</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.6</entry>
<entry>Arithmetic operation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.7</entry>
<entry>Comparisons</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.8</entry>
<entry>Logical operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.9</entry>
<entry>Bitwise operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.10</entry>
<entry>Function template <code>not_fn</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.11</entry>
<entry>Function object binders</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.12</entry>
<entry>Function template <code>mem_fn</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.13</entry>
<entry>Polymorphic function wrappers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.14</entry>
<entry>Searchers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.14.15</entry>
<entry>Class template <code>hash</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15</entry>
<entry>Metaprogramming and type traits</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.15.1</entry>
<entry>Requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.15.2</entry>
<entry>Header <code>&lt;type_traits&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.3</entry>
<entry>Helper classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.4</entry>
<entry>Unary Type Traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.5</entry>
<entry>Type property queries</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.6</entry>
<entry>Relationships between types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.7</entry>
<entry>Transformations between types</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.15.8</entry>
<entry>Logical operator traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.16</entry>
<entry>Compile-time rational arithmetic</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.1</entry>
<entry>In general</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.17.2</entry>
<entry>Header <code>&lt;chrono&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.17</entry>
<entry>Time utilities</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.17.3</entry>
<entry>Clock requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.4</entry>
<entry>Time-related traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.5</entry>
<entry>Class template <code>duration</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.6</entry>
<entry>Class template <code>time_point</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.7</entry>
<entry>Clocks</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.17.8</entry>
<entry>Header <code>&lt;ctime&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.18</entry>
<entry>Class <code>type_index</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.19</entry>
<entry>Execution policies</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.19.1</entry>
<entry>In general</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.19.2</entry>
<entry>Header <code>&lt;execution&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>23.19.3</entry>
<entry>Execution policy type trait</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.19.4</entry>
<entry>Sequenced execution policy</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.19.5</entry>
<entry>Parallel execution policy</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.19.6</entry>
<entry>Parallel and unsequenced execution policy</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>23.19.7</entry>
<entry>Execution policy objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>24</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Strings</emphasis>
</entry>
</row>
<row>
<entry>24.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>24.2</entry>
<entry>Character traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.3</entry>
<entry>String classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4</entry>
<entry>String view classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.1</entry>
<entry>Header <code>&lt;string_view&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.2</entry>
<entry>Class template <code>basic_string_view</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.3</entry>
<entry>Non-member comparison functions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.4</entry>
<entry>Inserters and extractors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.5</entry>
<entry>Hash support</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>24.4.6</entry>
<entry>Suffix for <code>basic_string_view</code> literals</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>24.5</entry>
<entry>Null-terminated sequence utilities</entry>
<entry>Partial</entry>
<entry>C library dependency. </entry>
</row>
<row>
<entry>
<emphasis>25</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Localization</emphasis>
</entry>
</row>
<row>
<entry>25.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.2</entry>
<entry>Header <code>&lt;locale&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.3</entry>
<entry>Locales</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.4</entry>
<entry>Standard <code>locale</code> categories</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>25.5</entry>
<entry>C Library Locales</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>26</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Containers</emphasis>
</entry>
</row>
<row>
<entry>26.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>26.2</entry>
<entry>Container requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.3</entry>
<entry>Sequence containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.4</entry>
<entry>Associative containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.5</entry>
<entry>Unordered associative containers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>26.6</entry>
<entry>Container adaptors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>27</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Iterators</emphasis>
</entry>
</row>
<row>
<entry>27.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.2</entry>
<entry>Iterator requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.3</entry>
<entry>Header <code>&lt;iterator&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.4</entry>
<entry>Iterator primitives</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.5</entry>
<entry>Iterator adaptors</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.6</entry>
<entry>Stream iterators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.7</entry>
<entry>Range access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>27.8</entry>
<entry>Container access</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>28</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Algorithms</emphasis>
</entry>
</row>
<row>
<entry>28.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>28.2</entry>
<entry>Header <code>&lt;algorithm&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>28.3</entry>
<entry>Algorithms requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>28.4</entry>
<entry>Parallel algorithms</entry>
<entry/>
<entry>Using <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/llvm/llvm-project/tree/main/pstl">PSTL</link></entry>
</row>
<row>
<entry>28.5</entry>
<entry>Non-modifying sequence operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.6</entry>
<entry>Mutating sequence operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.7</entry>
<entry>Sorting and related operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>28.8</entry>
<entry>C library algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>29</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Numerics</emphasis>
</entry>
</row>
<row>
<entry>29.1</entry>
<entry>General</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.2</entry>
<entry>Definitions</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.3</entry>
<entry>Numeric type requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.4</entry>
<entry>The floating-point environment</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.5</entry>
<entry>Complex numbers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.6</entry>
<entry>Random number generation</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.7</entry>
<entry>Numeric arrays</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8</entry>
<entry>Generalized numeric operations</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.8.1</entry>
<entry>Header <code>&lt;numeric&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.8.2</entry>
<entry>Accumulate</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.3</entry>
<entry>Reduce</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.4</entry>
<entry>Inner product</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.5</entry>
<entry>Transform reduce</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.6</entry>
<entry>Partial sum</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.7</entry>
<entry>Exclusive scan</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.8</entry>
<entry>Inclusive scan</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.9</entry>
<entry>Transform exclusive scan</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.10</entry>
<entry>Transform inclusive scan</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.11</entry>
<entry>Adjacent difference</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.12</entry>
<entry>Iota</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.13</entry>
<entry>Greatest common divisor</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.8.14</entry>
<entry>Least common multiple</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.9</entry>
<entry>Mathematical functions for floating-point types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.9.1</entry>
<entry>Header <code>&lt;cmath&gt;</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>29.9.2</entry>
<entry>Absolute values</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.9.3</entry>
<entry>Three-dimensional hypotenuse</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.9.4</entry>
<entry>Classification / comparison functions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>29.9.5</entry>
<entry>Mathematical special functions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>30</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Input/output library</emphasis>
</entry>
</row>
<row>
<entry>30.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.2</entry>
<entry>Iostreams requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.2.1</entry>
<entry>Imbue Limitations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.2.2</entry>
<entry>Positioning Type Limitations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>30.2.3</entry>
<entry>Thread safety</entry>
<entry>Partial</entry>
<entry/>
</row>
<row>
<entry>30.3</entry>
<entry>Forward declarations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.4</entry>
<entry>Standard iostream objects</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.5</entry>
<entry>Iostreams base classes</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.6</entry>
<entry>Stream buffers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.7</entry>
<entry>Formatting and manipulators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.8</entry>
<entry>String-based streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.9</entry>
<entry>File-based streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.10</entry>
<entry>File systemss</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>30.11</entry>
<entry>C library files</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>31</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Regular expressions</emphasis>
</entry>
</row>
<row>
<entry>31.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.2</entry>
<entry>Definitions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.3</entry>
<entry>Requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.4</entry>
<entry>Header <code>&lt;regex&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.5</entry>
<entry>Namespace <code>std::regex_constants</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.6</entry>
<entry>Class <code>regex_error</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>31.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>31.8</entry>
<entry>Class template <code>basic_regex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.9</entry>
<entry>Class template <code>sub_match</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.10</entry>
<entry>Class template <code>match_results</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.11</entry>
<entry>Regular expression algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.12</entry>
<entry>Regular expression Iterators</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>31.13</entry>
<entry>Modified ECMAScript regular expression grammar</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>32</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Atomic operations</emphasis>
</entry>
</row>
<row>
<entry>32.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.2</entry>
<entry>Header <code>&lt;atomic&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.3</entry>
<entry>Type aliases</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.4</entry>
<entry>Order and consistency</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.5</entry>
<entry>Lock-free property</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.6</entry>
<entry>Class template <code>&lt;atomic&gt;</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.7</entry>
<entry>Non-member functions</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.8</entry>
<entry>Flag Type and operations</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>32.9</entry>
<entry>Fences</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>
<emphasis>33</emphasis>
</entry>
<entry namest="c2" nameend="c4" align="left">
<emphasis>Thread support</emphasis>
</entry>
</row>
<row>
<entry>33.1</entry>
<entry>General</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.2</entry>
<entry>Requirements</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.3</entry>
<entry>Threads</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.3.1</entry>
<entry>Header <code>thread</code> synopsis</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.3.2</entry>
<entry>Class <code>thread</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>33.3.2.1</entry>
<entry>Class <code>thread</code></entry>
<entry>Partial</entry>
<entry><code>thread::id</code> comparisons not well-defined</entry>
</row>
<row>
<entry>33.3.3</entry>
<entry>Namespace <code>this_thread</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4</entry>
<entry>Mutual exclusion</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3</entry>
<entry>Mutex requirements</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.1</entry>
<entry>In general</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.2</entry>
<entry>Mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.2.1</entry>
<entry>Class <code>mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.3.2.2</entry>
<entry>Class <code>recursive_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.3.3</entry>
<entry>Timed mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.3.1</entry>
<entry>Class <code>timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.3.3.2</entry>
<entry>Class <code>recursive_timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.3.4</entry>
<entry>Shared mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.4.1</entry>
<entry>Class <code>shared_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.3.5</entry>
<entry>Shared timed mutex types</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.3.5.1</entry>
<entry>Class <code>shared_timed_mutex</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.4</entry>
<entry>Locks</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.4.1</entry>
<entry>Class template <code>lock_guard</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.4.2</entry>
<entry>Class template <code>scoped_guard</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.4.3</entry>
<entry>Class template <code>unique_lock</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.4.4</entry>
<entry>Class template <code>shared_lock</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.5</entry>
<entry>Generic locking algorithms</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.4.6</entry>
<entry>Call once</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.4.6.1</entry>
<entry>Struct <code>once_flag</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<?dbhtml bgcolor="#B0B0B0" ?>
<entry>33.4.6.2</entry>
<entry>Function <code>call_once</code></entry>
<entry>Y</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>33.5</entry>
<entry>Condition variables</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.5.1</entry>
<entry>Class <code>condition_variable</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.5.2</entry>
<entry>Class <code>condition_variable_any</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6</entry>
<entry>Futures</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.6.1</entry>
<entry>Overview</entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.6.2</entry>
<entry>Header <code>&lt;future&gt;</code></entry>
<entry/>
<entry/>
</row>
<row>
<entry>33.6.3</entry>
<entry>Error handling</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.4</entry>
<entry>Class <code>future_error</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.5</entry>
<entry>Shared state</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.6</entry>
<entry>Class template <code>promise</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.7</entry>
<entry>Class template <code>future</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.8</entry>
<entry>Class template <code>shared_future</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.9</entry>
<entry>Function template <code>async</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>33.6.10</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.4</entry>
<entry>C++ standard library headers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.4.1</entry>
<entry>Header <code>&lt;ccomplex&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.4.1</entry>
<entry>Header <code>&lt;cstdalign&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.4.1</entry>
<entry>Header <code>&lt;cstdbool&gt;</code> synopsis</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.4.1</entry>
<entry>Header <code>&lt;ctgmath&gt;</code> synopsis</entry>
<entry>Y</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><code>char*</code> streams</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.7</entry>
<entry><code>uncaught_exception</code></entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.8</entry>
<entry>Old adaptable function bindings</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.9</entry>
<entry>The default allocator</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.10</entry>
<entry>Raw storage iterator</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.11</entry>
<entry>Temporary buffers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.12</entry>
<entry>Deprecated type traits</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.13</entry>
<entry>Deprecated iterator primitives</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.14</entry>
<entry>Deprecated <code>shared_ptr</code> observers</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.15</entry>
<entry>Deprecated standard code conversion facets</entry>
<entry>Y</entry>
<entry/>
</row>
<row>
<entry>D.16</entry>
<entry>Deprecated convenience conversion interfaces</entry>
<entry>Y</entry>
<entry/>
</row>
</tbody>
</tgroup>
</table>
<table frame="all" xml:id="table.cxx17_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>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4076.html">
N4076
</link>
</entry>
<entry>A generalized callable negator</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/n4273.htm">
N4273
</link>
</entry>
<entry>Uniform Container Erasure</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/n4061.pdf">
N4061
</link>
</entry>
<entry>Greatest Common Divisor and Least Common Multiple</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/n4066.htm">
N4066
</link>
</entry>
<entry>Delimited iterators</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/n4282.pdf">
N4282
</link>
</entry>
<entry>The World's Dumbest Smart Pointer</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4388.html">
N4388
</link>
</entry>
<entry>Const-Propagating Wrapper</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4391.html">
N4391
</link>
</entry>
<entry> <code>make_array</code>, revision 4 </entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4502.pdf">
N4502
</link>
</entry>
<entry> Support for the C++ Detection Idiom, V2 </entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4519.pdf">
N4519
</link>
</entry>
<entry> Source-Code Information Capture </entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4521.html">
N4521
</link>
</entry>
<entry> Merge Fundamentals V1 into V2 </entry>
<entry>
N (components from V1 are still in namespace
<code>fundamentals_v1</code>)
</entry>
<entry>Library Fundamentals 2 TS</entry>
</row>
<row>
<entry>
<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html">
P0013R1
</link>
</entry>
<entry>Logical Operator Type Traits (revision 1)</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2015/n4531.html">
N4531
</link>
</entry>
<entry>std::rand replacement, revision 3</entry>
<entry>Y</entry>
<entry>Library Fundamentals 2 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/2018/p0214r9.pdf">
P0214R9
</link>
</entry>
<entry>Data-Parallel Types</entry>
<entry>Y</entry>
<entry>Parallelism 2 TS</entry>
</row>
</tbody>
</tgroup>
</table>
<section xml:id="iso.2017.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
<para>For behaviour which is also specified by previous standards,
see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
Specific Behavior</link> and <link linkend="iso.2011.specific">C++
2011 Implementation Specific Behavior</link>. This section only
documents behaviour which is new in the 2017 standard.
</para>
<para>
<emphasis>20.5.1.2 [headers]</emphasis>
Whether names from Annex K are declared by C++ headers depends on
whether the underlying C library supports Annex K and declares the
names. For the GNU C library, there is no Annex K support and so
none of its names are declared by C++ headers.
</para>
<para>
<emphasis>23.6.5 [optional.bad_optional_access]</emphasis>
<code>what()</code> returns <literal>"bad optional access"</literal>.
</para>
<para>
<emphasis>23.7.3 [variant.variant]</emphasis>
<classname>variant</classname> supports over-aligned types.
</para>
<para>
<emphasis>23.7.10 [variant.bad.access]</emphasis>
<code>what()</code> returns one of the strings
<literal>"std::get: variant is valueless"</literal>,
<literal>"std::get: wrong index for variant"</literal>,
<literal>"std::visit: variant is valueless"</literal>,
or <literal>"std::visit&lt;R&gt;: variant is valueless"</literal>.
</para>
<para>
<emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis>
Let S equal <code>numeric_limits&lt;size_t&gt;::digits</code>.
The limit for maximum number of blocks in a chunk is given by
<inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>,
where N is <inlineequation><mathphrase>min(19, 3 + S/2)</mathphrase></inlineequation>.
The largest allocation size that will be allocated from a pool is
<inlineequation><mathphrase>2<superscript>22</superscript></mathphrase></inlineequation>
when <inlineequation><mathphrase>S > 20</mathphrase></inlineequation>,
otherwise 3072 when <inlineequation><mathphrase>S > 16</mathphrase></inlineequation>,
otherwise 768.
</para>
<para>
<emphasis>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</emphasis>
The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>.
The default growth factor is <code>1.5</code>.
</para>
<para>
<emphasis>23.15.4.3 [meta.unary.prop]</emphasis>
The predicate condition for
<code>has_unique_object_representations</code> is true for all scalar
types except floating point types.
</para>
<para>
<emphasis>23.19.3 [execpol.type],
28.4.3 [algorithms.parallel.exec]</emphasis>
There are no implementation-defined execution policies.
</para>
<para>
<emphasis>24.4.2 [string.view.template]</emphasis>
<classname>basic_string_view&lt;C, T&gt;::iterator</classname> is
<code>C*</code> and
<classname>basic_string_view&lt;C, T&gt;::const_iterator</classname> is
<code>const C*</code>.
</para>
<para>
<emphasis>28.4.3 [algorithms.parallel.exec]</emphasis>
Threads of execution created by <classname>std::thread</classname>
provide concurrent forward progress guarantees, so threads of execution
implicitly created by the library will provide parallel forward
progress guarantees.
</para>
<para>
<emphasis>29.4.1 [cfenv.syn]</emphasis>
The effects of the <filename>&lt;cfenv&gt;</filename> functions
depends on whether the <code>FENV_ACCESS</code> pragma is supported,
and on the C library that provides the header.
</para>
<para>
<emphasis>29.6.9 [c.math.rand]</emphasis>
Whether the <function>rand</function> function may introduce data
races depends on the target C library that provides the function.
</para>
<para>
<emphasis>29.9.5 [sf.cmath]</emphasis>
The effect of calling the mathematical special functions with large
inputs should be documented here.
</para>
<para>
<emphasis>30.10.2.1 [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>30.10.5 [fs.filesystem.syn]</emphasis>
The clock used for file times is an unspecified type
with a signed 64-bit representation, capable of representing
timestamps with nanosecond resolution. The clock's epoch is
unspecified, but is not the same as the system clock's epoch.
</para>
<para>
<emphasis>30.10.7.1 [fs.path.generic]</emphasis>
dot-dot in the root-directory refers to the root-directory itself.
On Windows, a drive specifier such as <code>"C:"</code> or
<code>"z:"</code> is treated as a root-name. On Cygwin, a path
that begins with two successive directory separators is a
root-name. Otherwise (for POSIX-like systems other than Cygwin),
the implementation-defined root-name is an unspecified string
which does not appear in any pathnames.
</para>
<para>
<emphasis>30.10.10.1 [fs.enum.path.format]</emphasis>
The character sequence is always interpreted in the native pathname
format.
</para>
<para>
<emphasis>30.10.15.4 [fs.op.file_size]</emphasis>
If <code>!is_regular_file(p)</code>, an error is reported.
</para>
<para>
<emphasis>30.10.15.32 [fs.op.rename]</emphasis>
On Windows, <code>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 not possible to rename a directory to replace another
directory (POSIX requires that to work if the directory being
replaced is empty).
</para>
<section xml:id="iso.2017.par2ts" xreflabel="Implementation Specific Behavior of the Parallelism 2 TS"><info><title>Parallelism 2 TS</title></info>
<para>
<emphasis>9.3 [parallel.simd.abi]</emphasis>
<code>max_fixed_size&lt;T&gt;</code> is 32, except when targetting
AVX512BW and <code>sizeof(T)</code> is 1.
</para>
<para>
When targeting 32-bit x86,
<classname>simd_abi::compatible&lt;T&gt;</classname> is an alias for
<classname>simd_abi::scalar</classname>.
When targeting 64-bit x86 (including x32) or Aarch64,
<classname>simd_abi::compatible&lt;T&gt;</classname> is an alias for
<classname>simd_abi::_VecBuiltin&lt;16&gt;</classname>,
unless <code>T</code> is <code>long double</code>, in which case it is
an alias for <classname>simd_abi::scalar</classname>.
When targeting ARM (but not Aarch64) with NEON support,
<classname>simd_abi::compatible&lt;T&gt;</classname> is an alias for
<classname>simd_abi::_VecBuiltin&lt;16&gt;</classname>,
unless <code>sizeof(T) &gt; 4</code>, in which case it is
an alias for <classname>simd_abi::scalar</classname>. Additionally,
<classname>simd_abi::compatible&lt;float&gt;</classname> is an alias for
<classname>simd_abi::scalar</classname> unless compiling with
-ffast-math.
</para>
<para>
When targeting x86 (both 32-bit and 64-bit),
<classname>simd_abi::native&lt;T&gt;</classname> is an alias for one of
<classname>simd_abi::scalar</classname>,
<classname>simd_abi::_VecBuiltin&lt;16&gt;</classname>,
<classname>simd_abi::_VecBuiltin&lt;32&gt;</classname>, or
<classname>simd_abi::_VecBltnBtmsk&lt;64&gt;</classname>, depending on
<code>T</code> and the machine options the compiler was invoked with.
</para>
<para>
When targeting ARM/Aarch64 or POWER,
<classname>simd_abi::native&lt;T&gt;</classname> is an alias for
<classname>simd_abi::scalar</classname> or
<classname>simd_abi::_VecBuiltin&lt;16&gt;</classname>, depending on
<code>T</code> and the machine options the compiler was invoked with.
</para>
<para>
For any other targeted machine
<classname>simd_abi::compatible&lt;T&gt;</classname> and
<classname>simd_abi::native&lt;T&gt;</classname> are aliases for
<classname>simd_abi::scalar</classname>. (subject to change)
</para>
<para>
The extended ABI tag types defined in the
<code>std::experimental::parallelism_v2::simd_abi</code> namespace are:
<classname>simd_abi::_VecBuiltin&lt;Bytes&gt;</classname>, and
<classname>simd_abi::_VecBltnBtmsk&lt;Bytes&gt;</classname>.
</para>
<para>
<classname>simd_abi::deduce&lt;T, N, Abis...&gt;::type</classname>,
with <code>N &gt; 1</code> is an alias for an extended ABI tag, if a
supported extended ABI tag exists. Otherwise it is an alias for
<classname>simd_abi::fixed_size&lt;N&gt;</classname>. The <classname>
simd_abi::_VecBltnBtmsk</classname> ABI tag is preferred over
<classname>simd_abi::_VecBuiltin</classname>.
</para>
<para>
<emphasis>9.4 [parallel.simd.traits]</emphasis>
<classname>memory_alignment&lt;T, U&gt;::value</classname> is
<code>sizeof(U) * T::size()</code> rounded up to the next power-of-two
value.
</para>
<para>
<emphasis>9.6.1 [parallel.simd.overview]</emphasis>
On ARM, <classname>simd&lt;T, _VecBuiltin&lt;Bytes&gt;&gt;</classname>
is supported if <code>__ARM_NEON</code> is defined and
<code>sizeof(T) &lt;= 4</code>. Additionally,
<code>sizeof(T) == 8</code> with integral <code>T</code> is supported if
<code>__ARM_ARCH &gt;= 8</code>, and <code>double</code> is supported if
<code>__aarch64__</code> is defined.
On POWER, <classname>simd&lt;T, _VecBuiltin&lt;Bytes&gt;&gt;</classname>
is supported if <code>__ALTIVEC__</code> is defined and <code>sizeof(T)
&lt; 8</code>. Additionally, <code>double</code> is supported if
<code>__VSX__</code> is defined, and any <code>T</code> with <code>
sizeof(T) &lt;= 8</code> is supported if <code>__POWER8_VECTOR__</code>
is defined.
On x86, given an extended ABI tag <code>Abi</code>,
<classname>simd&lt;T, Abi&gt;</classname> is supported according to the
following table:
<table frame="all" xml:id="table.par2ts_simd_support">
<title>Support for Extended ABI Tags</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>ABI tag <code>Abi</code></entry>
<entry>value type <code>T</code></entry>
<entry>values for <code>Bytes</code></entry>
<entry>required machine option</entry>
</row>
</thead>
<tbody>
<row>
<entry morerows="5">
<classname>_VecBuiltin&lt;Bytes&gt;</classname>
</entry>
<entry morerows="1"><code>float</code></entry>
<entry>8, 12, 16</entry>
<entry>"-msse"</entry>
</row>
<row>
<entry>20, 24, 28, 32</entry>
<entry>"-mavx"</entry>
</row>
<row>
<entry morerows="1"><code>double</code></entry>
<entry>16</entry>
<entry>"-msse2"</entry>
</row>
<row>
<entry>24, 32</entry>
<entry>"-mavx"</entry>
</row>
<row>
<entry morerows="1">
integral types other than <code>bool</code>
</entry>
<entry>
<code>Bytes</code> ≤ 16 and <code>Bytes</code> divisible by
<code>sizeof(T)</code>
</entry>
<entry>"-msse2"</entry>
</row>
<row>
<entry>
16 &lt; <code>Bytes</code> ≤ 32 and <code>Bytes</code>
divisible by <code>sizeof(T)</code>
</entry>
<entry>"-mavx2"</entry>
</row>
<row>
<entry morerows="1">
<classname>_VecBuiltin&lt;Bytes&gt;</classname> and
<classname>_VecBltnBtmsk&lt;Bytes&gt;</classname>
</entry>
<entry>
vectorizable types with <code>sizeof(T)</code> ≥ 4
</entry>
<entry morerows="1">
32 &lt; <code>Bytes</code> ≤ 64 and <code>Bytes</code>
divisible by <code>sizeof(T)</code>
</entry>
<entry>"-mavx512f"</entry>
</row>
<row>
<entry>
vectorizable types with <code>sizeof(T)</code> &lt; 4
</entry>
<entry>"-mavx512bw"</entry>
</row>
<row>
<entry morerows="1">
<classname>_VecBltnBtmsk&lt;Bytes&gt;</classname>
</entry>
<entry>
vectorizable types with <code>sizeof(T)</code> ≥ 4
</entry>
<entry morerows="1">
<code>Bytes</code> ≤ 32 and <code>Bytes</code> divisible by
<code>sizeof(T)</code>
</entry>
<entry>"-mavx512vl"</entry>
</row>
<row>
<entry>
vectorizable types with <code>sizeof(T)</code> &lt; 4
</entry>
<entry>"-mavx512bw" and "-mavx512vl"</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</section>
</section>
</section>