1 <section xmlns="http://docbook.org/ns/docbook" version="5.0"
2 xml:id="status.iso.2017" xreflabel="Status C++ 2017">
3 <?dbhtml filename="status_iso_cxx2017.html"?>
5 <info><title>C++ 2017</title>
7 <keyword>ISO C++</keyword>
8 <keyword>2017</keyword>
13 In this implementation the <literal>-std=gnu++17</literal> or
14 <literal>-std=c++17</literal> flag must be used to enable language
16 features. See <link linkend="manual.intro.using.flags">dialect</link>
17 options. The pre-defined symbol
18 <constant>__cplusplus</constant> is used to check for the
19 presence of the required flag.
23 This section describes the C++17 and library TS support in mainline GCC SVN,
24 not in any particular release.
28 The following table lists new library features that have been accepted into
29 the C++17 working draft. The "Proposal" column provides a link to the
30 ISO C++ committee proposal that describes the feature, while the "Status"
31 column indicates the first version of GCC that contains an implementation of
32 this feature (if it has been implemented).
33 The "SD-6 Feature Test" column shows the corresponding macro or header from
34 <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:
35 Feature-testing recommendations for C++</link>.
38 <table frame="all" xml:id="table.cxx17_status">
39 <title>C++ 2017 Implementation Status</title>
41 <tgroup cols="4" align="left" colsep="0" rowsep="1">
42 <colspec colname="c1"/>
43 <colspec colname="c2"/>
44 <colspec colname="c3"/>
45 <colspec colname="c4"/>
48 <entry>Library Feature</entry>
49 <entry>Proposal</entry>
51 <entry>SD-6 Feature Test</entry>
58 <?dbhtml bgcolor="#C8B0B0" ?>
60 <code>constexpr std::hardware_{constructive,destructive}_interference_size</code>
63 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html">
67 <entry align="center"> No </entry>
68 <entry> <code>__cpp_lib_hardware_interference_size >= 201603</code> </entry>
72 <entry> Core Issue 1776: Replacement of class objects containing reference members</entry>
74 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0137r1.html">
78 <entry align="center"> 7.1 </entry>
79 <entry> <code>__cpp_lib_launder >= 201606</code> </entry>
83 <entry>Wording for <code>std::uncaught_exceptions</code></entry>
85 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n4259.pdf">
89 <entry align="center">6.1</entry>
90 <entry><code>__cpp_lib_uncaught_exceptions >= 201411</code></entry>
94 <entry> Variant: a type-safe union for C++17 </entry>
96 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html">
100 <entry align="center"> 7.1 </entry>
101 <entry> <code>__has_include(<variant>)</code>,
102 <code>__cpp_lib_variant >= 201603</code>
103 (since 7.3, see Note 1)
108 <entry> Library Fundamentals V1 TS Components: <code>optional</code> </entry>
110 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
114 <entry align="center"> 7.1 </entry>
115 <entry> <code>__has_include(<optional>)</code>,
116 <code>__cpp_lib_optional >= 201603</code>
117 (since 7.3, see Note 1)
122 <entry> Library Fundamentals V1 TS Components: <code>any</code> </entry>
124 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
128 <entry align="center"> 7.1 </entry>
129 <entry> <code>__has_include(<any>)</code>,
130 <code>__cpp_lib_any >= 201603</code>
131 (since 7.3, see Note 1)
136 <entry> Library Fundamentals V1 TS Components: <code>string_view</code> </entry>
138 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
142 <entry align="center"> 7.1 </entry>
143 <entry> <code>__has_include(<string_view>)</code>,
144 <code>__cpp_lib_string_view >= 201603</code>
145 (since 7.3, see Note 1)
150 <entry> Library Fundamentals V1 TS Components: <code>memory_resource</code> </entry>
152 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
156 <entry align="center"> 9.1 </entry>
157 <entry> <code>__has_include(<memory_resource>)</code>,
158 <code>__cpp_lib_memory_resource >= 201603</code>
163 <entry> Library Fundamentals V1 TS Components: <code>apply</code> </entry>
165 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
169 <entry align="center"> 7.1 </entry>
170 <entry> <code>__cpp_lib_apply >= 201603</code> </entry>
174 <entry> Library Fundamentals V1 TS Components: <code>shared_ptr<T[]></code> </entry>
176 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
180 <entry align="center"> 7.1 </entry>
181 <entry> <code>__cpp_lib_shared_ptr_arrays >= 201603</code> </entry>
185 <entry> Library Fundamentals V1 TS Components: Searchers </entry>
187 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
191 <entry align="center"> 7.1 </entry>
192 <entry> <code>__cpp_lib_boyer_moore_searcher >= 201603</code> </entry>
196 <entry> Library Fundamentals V1 TS Components: Sampling </entry>
198 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
202 <entry align="center"> 7.1 </entry>
203 <entry> <code>__cpp_lib_sample >= 201603</code> </entry>
207 <entry> Constant View: A proposal for a <code>std::as_const</code> helper function template </entry>
209 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
213 <entry align="center"> 7.1 </entry>
214 <entry><code> __cpp_lib_as_const >= 201510 </code></entry>
218 <entry> Improving pair and tuple </entry>
220 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387">
224 <entry align="center"> 6.1 </entry>
229 <entry> <code>make_from_tuple</code>: apply for construction </entry>
231 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0209r2.pdf">
235 <entry align="center"> 7.1 </entry>
236 <entry><code> __cpp_lib_make_from_tuple >= 201606 </code></entry>
240 <?dbhtml bgcolor="#C8B0B0" ?>
242 Removing <code>auto_ptr</code>, <code>random_shuffle()</code>,
243 And Old <code><functional></code> Stuff
246 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm">
250 <entry align="center">No (kept for backwards compatibility)</entry>
255 <?dbhtml bgcolor="#C8B0B0" ?>
256 <entry> Deprecating Vestigial Library Parts in C++17 </entry>
258 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0174r2.html">
262 <entry align="center"> No (kept for backwards compatibility)</entry>
267 <entry> Making <code>std::owner_less</code> more flexible </entry>
269 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0074r0.html">
273 <entry align="center"> 7.1 </entry>
274 <entry><code> __cpp_lib_transparent_operators >= 201510 </code></entry>
278 <entry> <code>std::addressof</code> should be constexpr </entry>
280 <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">
284 <entry align="center"> 7.1 </entry>
285 <entry><code> __cpp_lib_addressof_constexpr >= 201603 </code></entry>
289 <entry> Safe conversions in <code>unique_ptr<T[]></code> </entry>
291 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4089.pdf">
295 <entry align="center"> 6 </entry>
300 <entry> LWG 2228: Missing SFINAE rule in unique_ptr templated assignment </entry>
302 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4366.html">
306 <entry align="center"> 6 </entry>
311 <entry> Re-enabling <code>shared_from_this</code></entry>
313 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0033r1.html">
317 <entry align="center"> 7.1 </entry>
318 <entry><code>__cpp_lib_enable_shared_from_this >= 201603</code></entry>
322 <entry> A proposal to add <code>invoke</code> function template </entry>
324 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4169.html">
328 <entry align="center"> 6.1 </entry>
329 <entry><code> __cpp_lib_invoke >= 201411 </code></entry>
333 <entry>TriviallyCopyable <code>reference_wrapper</code> </entry>
335 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4277.html">
339 <entry align="center"> 5.1 </entry>
344 <entry> Adopt <code>not_fn</code> from Library Fundamentals 2 for C++17 </entry>
346 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0005r4.html">
350 <entry align="center"> 7.1 </entry>
351 <entry><code>__cpp_lib_not_fn >= 201603</code></entry>
355 <entry> Fixes for <code>not_fn</code> </entry>
357 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html">
361 <entry align="center"> 7.1 </entry>
366 <entry> Fixing a design mistake in the searchers interface in Library Fundamentals </entry>
368 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0253r1.pdf">
372 <entry align="center"> 7.1 </entry>
377 <entry> Extending memory management tools </entry>
379 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0040r3.html">
383 <entry align="center"> 7.1 </entry>
384 <entry><code> </code></entry>
388 <entry> <code>shared_ptr::weak_type</code></entry>
390 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0163r0.html">
394 <entry align="center"> 7.1 </entry>
395 <entry><code> __cpp_lib_shared_ptr_weak_type >= 201606</code></entry>
399 <entry>Transformation Trait Alias <code>void_t</code></entry>
401 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n3911.pdf">
405 <entry align="center">6.1</entry>
406 <entry><code> __cpp_lib_void_t >= 201411</code></entry>
410 <entry> Wording for <code>bool_constant</code>, revision 1 </entry>
412 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html">
416 <entry align="center">6.1</entry>
417 <entry><code> __cpp_lib_bool_constant >= 201505</code></entry>
421 <entry> Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17</entry>
423 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0006r0.html">
427 <entry align="center"> 7.1 </entry>
428 <entry><code> __cpp_lib_type_trait_variable_templates >= 201510 </code></entry>
432 <entry> Logical Operator Type Traits</entry>
434 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0013r1.html">
438 <entry align="center"> 6.1 </entry>
439 <entry><code> __cpp_lib_logical_traits >= 201510 </code></entry>
443 <entry> Adding [nothrow-]swappable traits </entry>
445 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0185r1.html">
449 <entry align="center"> 7 (<code>__is_swappable</code> available since 6.1)</entry>
450 <entry><code> __cpp_lib_is_swappable >= 201603 </code></entry>
454 <entry> <code>is_callable</code>, the missing INVOKE related trait</entry>
456 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0077r2.html">
460 <entry align="center"> 7.1 </entry>
461 <entry><code> __cpp_lib_is_callable >= 201603 </code></entry>
465 <entry> has_unique_object_representations </entry>
467 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0258r2.html">
471 <entry align="center"> 7.1 </entry>
472 <entry><code> __cpp_lib_has_unique_object_representations >= 201606 </code></entry>
476 <entry> Polishing <code><chrono></code> </entry>
478 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0092r1.html">
482 <entry align="center"> 7.1 </entry>
483 <entry><code> __cpp_lib_chrono >= 201510 </code></entry>
487 <entry> Adding more constexpr to <code><chrono></code> </entry>
489 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0505r0.html">
493 <entry align="center"> 7.1 </entry>
494 <entry><code> __cpp_lib_chrono >= 201611 </code>
495 (since 7.3, see Note 2)
500 <entry> Constexpr for <code>std::char_traits</code> </entry>
502 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0426r1.html">
506 <entry align="center"> 8.1 </entry>
507 <entry><code> __cpp_lib_constexpr_char_traits >= 201611 </code></entry>
511 <entry> Integrating <code>std::string_view</code> and <code>std::string</code> </entry>
513 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0254r2.pdf">
517 <entry align="center"> 7.1 </entry>
518 <entry><code> </code></entry>
522 <entry> Give 'std::string' a non-const '.data()' member function </entry>
524 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html">
528 <entry align="center"> 7.1 </entry>
529 <entry><code> </code></entry>
533 <entry>Cleaning-up noexcept in the Library</entry>
535 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf">
539 <entry align="center">6.1</entry>
540 <entry><code> __cpp_lib_allocator_traits_is_always_equal >= 201411 </code></entry>
544 <entry>Contiguous Iterators </entry>
546 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4284.html">
550 <entry align="center">N/A</entry>
555 <entry> Minimal incomplete type support for standard containers </entry>
557 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4510.html">
561 <entry align="center"> 3.0 </entry>
562 <entry><code> __cpp_lib_incomplete_container_elements >= 201505 </code>
563 (since 6.2, see Note 2)
568 <entry> Emplace return type </entry>
570 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf">
574 <entry align="center"> 7.1 </entry>
579 <entry>Improved insertion interface for unique-key maps</entry>
581 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html">
585 <entry align="center"> 6.1 </entry>
586 <entry><code> __cpp_lib_map_try_emplace >= 201411</code>,
587 <code> __cpp_lib_unordered_map_try_emplace >= 201411</code>
592 <entry> Splicing Maps and Sets </entry>
594 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf">
598 <entry align="center"> 7.1 </entry>
599 <entry><code> __cpp_lib_node_extract >= 201606 </code></entry>
603 <entry>Non-member <code>size()</code> and more</entry>
605 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf">
609 <entry align="center"> 6.1 </entry>
610 <entry><code> __cpp_lib_nonmember_container_access >= 201411 </code></entry>
614 <entry> A Proposal to Add Constexpr Modifiers to <code>reverse_iterator</code>, <code>move_iterator</code>, <code>array</code> and Range Access </entry>
616 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html">
620 <entry align="center"> 7.1 </entry>
621 <entry><code> __cpp_lib_array_constexpr >= 201603 </code></entry>
625 <?dbhtml bgcolor="#C8B0B0" ?>
626 <entry> The Parallelism TS Should be Standardized </entry>
628 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r2.html">
632 <entry align="center"> No </entry>
633 <entry><code> __has_include(<execution>) </code>,
634 <code> __cpp_lib_execution >= 201603 </code>,
635 <code> __cpp_lib_parallel_algorithm >= 201603 </code>
640 <entry> An algorithm to "clamp" a value between a pair of boundary values </entry>
642 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0025r0.html">
646 <entry align="center"> 7.1 </entry>
647 <entry><code> __cpp_lib_clamp >= 201603 </code></entry>
651 <entry> Adopt Selected Library Fundamentals V2 Components for C++17 </entry>
653 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0295r0.pdf">
657 <entry align="center"> 7.1 </entry>
658 <entry><code> __cpp_lib_gcd_lcm >= 201606 </code></entry>
662 <entry> Proposal to Introduce a 3-Argument Overload to <code>std::hypot</code> </entry>
664 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0030r1.pdf">
668 <entry align="center"> 7.1 </entry>
669 <entry><code> __cpp_lib_hypot >= 201603 </code></entry>
673 <entry> Mathematical Special Functions for C++17 </entry>
675 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0226r1.pdf">
679 <entry align="center"> 7.1 </entry>
680 <entry><code> __cpp_lib_math_special_functions >= 201603 </code>
686 <entry>Adopt the File System TS for C++17 </entry>
688 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r1.html">
692 <entry align="center"> 8.1 </entry>
693 <entry><code> __has_include(<filesystem>) </code>,
694 <code> __cpp_lib_filesystem >= 201603 </code>
695 (GCC 8.x requires linking with <code>-lstdc++fs</code>)
700 <entry> Relative Paths for Filesystem</entry>
702 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0219r1.html">
706 <entry align="center"> 8.1 </entry>
707 <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
711 <entry> Adapting string_view by filesystem paths </entry>
713 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0392r0.pdf">
717 <entry align="center"> 8.1 </entry>
718 <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
722 <entry> Directory Entry Caching for Filesystem </entry>
724 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0317r1.html">
728 <entry align="center"> 8.1 </entry>
729 <entry><code> __cpp_lib_filesystem >= 201703 </code></entry>
733 <entry> constexpr <code>atomic<T>::is_always_lock_free</code> </entry>
735 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0152r1.html">
739 <entry align="center"> 7.1 </entry>
740 <entry><code> __cpp_lib_atomic_is_always_lock_free >= 201603 </code></entry>
744 <entry>A proposal to add <code>shared_mutex</code> (untimed) (Revision 4)</entry>
746 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4508.html">
750 <entry align="center"> 6.1 </entry>
751 <entry><code> __cpp_lib_shared_mutex >= 201505 </code></entry>
755 <entry> Variadic <code>lock_guard</code> (Rev. 5) </entry>
757 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0156r2.html">
761 <entry align="center"> 7.1 </entry>
762 <entry><code> __cpp_lib_scoped_lock >= 201703 </code></entry>
766 <entry> A byte type definition </entry>
768 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0298r3.pdf">
772 <entry align="center"> 7.1 </entry>
773 <entry><code> __cpp_lib_byte >= 201603 </code> (since 7.3, see Note 2)
778 <?dbhtml bgcolor="#B0B0B0" ?>
779 <entry> Elementary string conversions </entry>
781 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0067r5.html">
785 <entry align="center"> 8.1 (only integral types supported) </entry>
786 <entry><code> __has_include(<charconv>) </code>
787 <code> __cpp_lib_to_chars >= 201611 </code></entry>
791 <entry> Homogeneous interface for variant, any and optional </entry>
793 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0032r3.pdf">
797 <entry align="center"> 7.1 </entry>
799 <code> __cpp_lib_any >= 201606 </code>,
800 <code> __cpp_lib_optional >= 201606 </code>,
801 <code> __cpp_lib_variant >= 201606 </code>
806 <entry> Making Optional Greater Equal Again </entry>
808 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0307r2.pdf">
812 <entry align="center"> 7.1 </entry>
813 <entry> <code> __cpp_lib_optional >= 201606 </code> </entry>
821 Note 1: This feature is supported in GCC 7.1 and 7.2 but before GCC 7.3 the
822 <code>__cpp_lib</code> macro is not defined, and compilation will fail if the
823 header is included without using <option>-std</option> to enable C++17 support.
827 Note 2: This feature is supported in older releases but the
828 <code>__cpp_lib</code> macro is not defined to the right value
829 (or not defined at all) until the version shown in parentheses.
833 Note 3: The mathematical special functions are enabled in C++17 mode from
834 GCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define
835 <code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code> to a non-zero value
836 and test for <code>__STDCPP_MATH_SPEC_FUNCS__ >= 201003L</code>.
839 <table frame="all" xml:id="table.cxx17_ts_status">
840 <title>C++ Technical Specifications Implementation Status</title>
842 <tgroup cols="4" align="left" colsep="0" rowsep="1">
843 <colspec colname="c1"/>
844 <colspec colname="c2"/>
845 <colspec colname="c3"/>
846 <colspec colname="c4"/>
851 <entry>Status</entry>
852 <entry>Comments</entry>
860 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4076.html">
864 <entry>A generalized callable negator</entry>
866 <entry>Library Fundamentals 2 TS</entry>
871 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4273.htm">
875 <entry>Uniform Container Erasure</entry>
877 <entry>Library Fundamentals 2 TS</entry>
882 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4061.pdf">
886 <entry>Greatest Common Divisor and Least Common Multiple</entry>
888 <entry>Library Fundamentals 2 TS</entry>
893 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4066.htm">
897 <entry>Delimited iterators</entry>
899 <entry>Library Fundamentals 2 TS</entry>
904 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf">
908 <entry>The World's Dumbest Smart Pointer</entry>
910 <entry>Library Fundamentals 2 TS</entry>
916 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4388.html">
920 <entry>Const-Propagating Wrapper</entry>
922 <entry>Library Fundamentals 2 TS</entry>
927 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4391.html">
931 <entry> <code>make_array</code>, revision 4 </entry>
933 <entry>Library Fundamentals 2 TS</entry>
938 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4502.pdf">
942 <entry> Support for the C++ Detection Idiom, V2 </entry>
944 <entry>Library Fundamentals 2 TS</entry>
949 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4519.pdf">
953 <entry> Source-Code Information Capture </entry>
955 <entry>Library Fundamentals 2 TS</entry>
959 <?dbhtml bgcolor="#C8B0B0" ?>
961 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4521.html">
965 <entry> Merge Fundamentals V1 into V2 </entry>
967 N (components from V1 are still in namespace
968 <code>fundamentals_v1</code>)
970 <entry>Library Fundamentals 2 TS</entry>
975 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html">
979 <entry>Logical Operator Type Traits (revision 1)</entry>
981 <entry>Library Fundamentals 2 TS</entry>
986 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4531.html">
990 <entry>std::rand replacement, revision 3</entry>
992 <entry>Library Fundamentals 2 TS</entry>
999 <section xml:id="iso.2017.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
1001 <para>For behaviour which is also specified by previous standards,
1002 see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
1003 Specific Behavior</link> and <link linkend="iso.2011.specific">C++
1004 2011 Implementation Specific Behavior</link>. This section only
1005 documents behaviour which is new in the 2017 standard.
1009 <emphasis>20.5.1.2 [headers]</emphasis>
1010 Whether names from Annex K are declared by C++ headers depends on
1011 whether the underlying C library supports Annex K and declares the
1012 names. For the GNU C library, there is no Annex K support and so
1013 none of its names are declared by C++ headers.
1017 <emphasis>23.6.5 [optional.bad_optional_access]</emphasis>
1018 <code>what()</code> returns <literal>"bad optional access"</literal>.
1022 <emphasis>23.7.3 [variant.variant]</emphasis>
1023 <classname>variant</classname> supports over-aligned types.
1027 <emphasis>23.7.10 [variant.bad.access]</emphasis>
1028 <code>what()</code> returns <literal>"Unexpected index"</literal>.
1032 <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis>
1033 Let S equal <code>numeric_limits<size_t>::digits</code>.
1034 The limit for maximum number of blocks in a chunk is given by
1035 <inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>,
1036 where N is <inlineequation><mathphrase>min(19, 3 + S/2)</mathphrase></inlineequation>.
1037 The largest allocation size that will be allocated from a pool is
1038 <inlineequation><mathphrase>2<superscript>22</superscript></mathphrase></inlineequation>
1039 when <inlineequation><mathphrase>S > 20</mathphrase></inlineequation>,
1040 otherwise 3072 when <inlineequation><mathphrase>S > 16</mathphrase></inlineequation>,
1045 <emphasis>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</emphasis>
1046 The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>.
1047 The default growth factor is <code>1.5</code>.
1051 <emphasis>23.15.4.3 [meta.unary.prop]</emphasis>
1052 The predicate condition for
1053 <code>has_unique_object_representations</code> is true for all scalar
1054 types except floating point types.
1058 <emphasis>23.19.3 [execpol.type],
1059 28.4.3 [algorithms.parallel.exec]</emphasis>
1060 There are no implementation-defined execution policies.
1064 <emphasis>24.4.2 [string.view.template]</emphasis>
1065 <classname>basic_string_view<C, T>::iterator</classname> is
1067 <classname>basic_string_view<C, T>::const_iterator</classname> is
1068 <code>const C*</code>.
1073 <emphasis>28.4.3 [algorithms.parallel.exec]</emphasis>
1074 Threads of execution created by <classname>std::thread</classname>
1075 provide concurrent forward progress guarantees, so threads of execution
1076 implicitly created by the library will provide parallel forward
1077 progress guarantees.
1081 <emphasis>29.4.1 [cfenv.syn]</emphasis>
1082 The effects of the <filename><cfenv></filename> functions
1083 depends on whether the <code>FENV_ACCESS</code> pragma is supported,
1084 and on the C library that provides the header.
1088 <emphasis>29.6.9 [c.math.rand]</emphasis>
1089 Whether the <function>rand</function> function may introduce data
1090 races depends on the target C library that provides the function.
1094 <emphasis>29.9.5 [sf.cmath]</emphasis>
1095 The effect of calling the mathematical special functions with large
1096 inputs should be documented here.
1100 <emphasis>30.10.2.1 [fs.conform.9945]</emphasis>
1101 The behavior of the filesystem library implementation will depend on
1102 the target operating system. Some features will not be not supported
1107 <emphasis>30.10.5 [fs.filesystem.syn]</emphasis>
1108 The clock used for file times is an unspecified type
1109 with a signed 64-bit representation, capable of representing
1110 timestamps with nanosecond resolution. The clock's epoch is
1111 unspecified, but is not the same as the system clock's epoch.
1115 <emphasis>30.10.7.1 [fs.path.generic]</emphasis>
1116 dot-dot in the root-directory refers to the root-directory itself.
1117 On Windows, a drive specifier such as <code>"C:"</code> or
1118 <code>"z:"</code> is treated as a root-name. On Cygwin, a path
1119 that begins with two successive directory separators is a
1120 root-name. Otherwise (for POSIX-like systems other than Cygwin),
1121 the implementation-defined root-name is an unspecified string
1122 which does not appear in any pathnames.
1126 <emphasis>30.10.10.1 [fs.enum.path.format]</emphasis>
1127 The character sequence is always interpreted in the native pathname
1132 <emphasis>30.10.15.4 [fs.op.file_size]</emphasis>
1133 If <code>!is_regular_file(p)</code>, an error is reported.