| <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(<variant>)</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(<optional>)</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(<any>)</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(<string_view>)</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(<memory_resource>)</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<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/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><functional></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<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/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 >= 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><chrono></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><chrono></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(<execution>)</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(<filesystem>)</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<T>::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(<charconv>)</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"><execution></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><limits></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><climits></code> synopsis</entry> |
| <entry>Y</entry> |
| <entry/> |
| </row> |
| <row> |
| <entry>21.3.6</entry> |
| <entry>Header <code><cfloat></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><cstdint></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><new></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><exception></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><utility></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><memory></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><memory_resource></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><functional></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><type_traits></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><chrono></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><ctime></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><execution></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><string_view></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><locale></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><iterator></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><algorithm></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><numeric></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><cmath></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><regex></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><atomic></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><atomic></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><future></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><ccomplex></code> synopsis</entry> |
| <entry>Y</entry> |
| <entry/> |
| </row> |
| <row> |
| <entry>D.4.1</entry> |
| <entry>Header <code><cstdalign></code> synopsis</entry> |
| <entry>Y</entry> |
| <entry/> |
| </row> |
| <row> |
| <entry>D.4.1</entry> |
| <entry>Header <code><cstdbool></code> synopsis</entry> |
| <entry>Y</entry> |
| <entry/> |
| </row> |
| <row> |
| <entry>D.4.1</entry> |
| <entry>Header <code><ctgmath></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<R>: variant is valueless"</literal>. |
| </para> |
| |
| <para> |
| <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis> |
| Let S equal <code>numeric_limits<size_t>::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<C, T>::iterator</classname> is |
| <code>C*</code> and |
| <classname>basic_string_view<C, T>::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><cfenv></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<T></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<T></classname> is an alias for |
| <classname>simd_abi::scalar</classname>. |
| When targeting 64-bit x86 (including x32) or Aarch64, |
| <classname>simd_abi::compatible<T></classname> is an alias for |
| <classname>simd_abi::_VecBuiltin<16></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<T></classname> is an alias for |
| <classname>simd_abi::_VecBuiltin<16></classname>, |
| unless <code>sizeof(T) > 4</code>, in which case it is |
| an alias for <classname>simd_abi::scalar</classname>. Additionally, |
| <classname>simd_abi::compatible<float></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<T></classname> is an alias for one of |
| <classname>simd_abi::scalar</classname>, |
| <classname>simd_abi::_VecBuiltin<16></classname>, |
| <classname>simd_abi::_VecBuiltin<32></classname>, or |
| <classname>simd_abi::_VecBltnBtmsk<64></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<T></classname> is an alias for |
| <classname>simd_abi::scalar</classname> or |
| <classname>simd_abi::_VecBuiltin<16></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<T></classname> and |
| <classname>simd_abi::native<T></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<Bytes></classname>, and |
| <classname>simd_abi::_VecBltnBtmsk<Bytes></classname>. |
| </para> |
| |
| <para> |
| <classname>simd_abi::deduce<T, N, Abis...>::type</classname>, |
| with <code>N > 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<N></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<T, U>::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<T, _VecBuiltin<Bytes>></classname> |
| is supported if <code>__ARM_NEON</code> is defined and |
| <code>sizeof(T) <= 4</code>. Additionally, |
| <code>sizeof(T) == 8</code> with integral <code>T</code> is supported if |
| <code>__ARM_ARCH >= 8</code>, and <code>double</code> is supported if |
| <code>__aarch64__</code> is defined. |
| |
| On POWER, <classname>simd<T, _VecBuiltin<Bytes>></classname> |
| is supported if <code>__ALTIVEC__</code> is defined and <code>sizeof(T) |
| < 8</code>. Additionally, <code>double</code> is supported if |
| <code>__VSX__</code> is defined, and any <code>T</code> with <code> |
| sizeof(T) <= 8</code> is supported if <code>__POWER8_VECTOR__</code> |
| is defined. |
| |
| On x86, given an extended ABI tag <code>Abi</code>, |
| <classname>simd<T, Abi></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<Bytes></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 < <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<Bytes></classname> and |
| <classname>_VecBltnBtmsk<Bytes></classname> |
| </entry> |
| <entry> |
| vectorizable types with <code>sizeof(T)</code> ≥ 4 |
| </entry> |
| <entry morerows="1"> |
| 32 < <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> < 4 |
| </entry> |
| <entry>"-mavx512bw"</entry> |
| </row> |
| |
| <row> |
| <entry morerows="1"> |
| <classname>_VecBltnBtmsk<Bytes></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> < 4 |
| </entry> |
| <entry>"-mavx512bw" and "-mavx512vl"</entry> |
| </row> |
| |
| </tbody> |
| </tgroup> |
| </table> |
| </para> |
| |
| </section> |
| |
| </section> |
| |
| </section> |