Fix missing or incorrect feature test macros
[official-gcc.git] / libstdc++-v3 / doc / xml / manual / status_cxx2017.xml
blobc9913a9e3a72a399b1f92b5c5afb025d14a43edb
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>
6   <keywordset>
7     <keyword>ISO C++</keyword>
8     <keyword>2017</keyword>
9   </keywordset>
10 </info>
12 <para>
13 In this implementation the <literal>-std=gnu++17</literal> or
14 <literal>-std=c++17</literal> flag must be used to enable language
15 and library
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.
20 </para>
22 <para>
23 This section describes the C++17 and library TS support in mainline GCC SVN,
24 not in any particular release.
25 </para>
27 <para>
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>.
36 </para>
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"/>
46   <thead>
47     <row>
48       <entry>Library Feature</entry>
49       <entry>Proposal</entry>
50       <entry>Status</entry>
51       <entry>SD-6 Feature Test</entry>
52     </row>
53   </thead>
55   <tbody>
57     <row>
58       <?dbhtml bgcolor="#C8B0B0" ?>
59       <entry>
60         <code>constexpr std::hardware_{constructive,destructive}_interference_size</code>
61       </entry>
62       <entry>
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">
64         P0154R1
65         </link>
66       </entry>
67       <entry align="center"> No </entry>
68       <entry> <code>__cpp_lib_hardware_interference_size >= 201603</code> </entry>
69     </row>
71     <row>
72       <entry> Core Issue 1776: Replacement of class objects containing reference members</entry>
73       <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">
75         P0137R1
76         </link>
77       </entry>
78       <entry align="center"> 7.1 </entry>
79       <entry> <code>__cpp_lib_launder >= 201606</code> </entry>
80     </row>
82     <row>
83       <entry>Wording for <code>std::uncaught_exceptions</code></entry>
84       <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">
86           N4259
87         </link>
88       </entry>
89       <entry align="center">6.1</entry>
90       <entry><code>__cpp_lib_uncaught_exceptions >= 201411</code></entry>
91     </row>
93     <row>
94       <entry> Variant: a type-safe union for C++17 </entry>
95       <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">
97         P0088R3
98         </link>
99       </entry>
100       <entry align="center"> 7.1 </entry>
101       <entry> <code>__has_include(&lt;variant&gt;)</code>,
102               <code>__cpp_lib_variant >= 201603</code>
103               (since 7.3, see Note 1)
104       </entry>
105     </row>
107     <row>
108       <entry> Library Fundamentals V1 TS Components: <code>optional</code> </entry>
109       <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">
111         P0220R1
112         </link>
113       </entry>
114       <entry align="center"> 7.1 </entry>
115       <entry> <code>__has_include(&lt;optional&gt;)</code>,
116               <code>__cpp_lib_optional >= 201603</code>
117               (since 7.3, see Note 1)
118       </entry>
119     </row>
121     <row>
122       <entry> Library Fundamentals V1 TS Components: <code>any</code> </entry>
123       <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">
125         P0220R1
126         </link>
127       </entry>
128       <entry align="center"> 7.1 </entry>
129       <entry> <code>__has_include(&lt;any&gt;)</code>,
130               <code>__cpp_lib_any >= 201603</code>
131               (since 7.3, see Note 1)
132       </entry>
133     </row>
135     <row>
136       <entry> Library Fundamentals V1 TS Components: <code>string_view</code> </entry>
137       <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">
139         P0220R1
140         </link>
141       </entry>
142       <entry align="center"> 7.1 </entry>
143       <entry> <code>__has_include(&lt;string_view&gt;)</code>,
144               <code>__cpp_lib_string_view >= 201603</code>
145               (since 7.3, see Note 1)
146       </entry>
147     </row>
149     <row>
150       <entry> Library Fundamentals V1 TS Components: <code>memory_resource</code> </entry>
151       <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">
153         P0220R1
154         </link>
155       </entry>
156       <entry align="center"> 9.1 </entry>
157       <entry> <code>__has_include(&lt;memory_resource&gt;)</code>,
158               <code>__cpp_lib_memory_resource >= 201603</code>
159       </entry>
160     </row>
162     <row>
163       <entry> Library Fundamentals V1 TS Components: <code>apply</code> </entry>
164       <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">
166         P0220R1
167         </link>
168       </entry>
169       <entry align="center"> 7.1 </entry>
170       <entry> <code>__cpp_lib_apply >= 201603</code> </entry>
171     </row>
173     <row>
174       <entry> Library Fundamentals V1 TS Components: <code>shared_ptr&lt;T[]&gt;</code> </entry>
175       <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">
177         P0220R1
178         </link>
179       </entry>
180       <entry align="center"> 7.1 </entry>
181       <entry> <code>__cpp_lib_shared_ptr_arrays >= 201603</code> </entry>
182     </row>
184     <row>
185       <entry> Library Fundamentals V1 TS Components: Searchers </entry>
186       <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">
188         P0220R1
189         </link>
190       </entry>
191       <entry align="center"> 7.1 </entry>
192       <entry> <code>__cpp_lib_boyer_moore_searcher >= 201603</code> </entry>
193     </row>
195     <row>
196       <entry> Library Fundamentals V1 TS Components: Sampling </entry>
197       <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">
199         P0220R1
200         </link>
201       </entry>
202       <entry align="center"> 7.1 </entry>
203       <entry> <code>__cpp_lib_sample >= 201603</code> </entry>
204     </row>
206     <row>
207       <entry> Constant View: A proposal for a <code>std::as_const</code> helper function template       </entry>
208       <entry>
209         <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
210         P0007R1
211         </link>
212       </entry>
213       <entry align="center"> 7.1 </entry>
214       <entry><code> __cpp_lib_as_const >= 201510 </code></entry>
215     </row>
217     <row>
218       <entry> Improving pair and tuple </entry>
219       <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">
221         N4387
222         </link>
223       </entry>
224       <entry align="center"> 6.1 </entry>
225       <entry> N/A </entry>
226     </row>
228     <row>
229       <entry> <code>make_from_tuple</code>: apply for construction </entry>
230       <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">
232         P0209R2
233         </link>
234       </entry>
235       <entry align="center"> 7.1 </entry>
236       <entry><code> __cpp_lib_make_from_tuple >= 201606 </code></entry>
237     </row>
239     <row>
240       <?dbhtml bgcolor="#C8B0B0" ?>
241       <entry>
242         Removing <code>auto_ptr</code>, <code>random_shuffle()</code>,
243         And Old <code>&lt;functional&gt;</code> Stuff
244       </entry>
245       <entry>
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">
247           N4190
248         </link>
249       </entry>
250       <entry align="center">No (kept for backwards compatibility)</entry>
251       <entry/>
252     </row>
254     <row>
255       <?dbhtml bgcolor="#C8B0B0" ?>
256       <entry> Deprecating Vestigial Library Parts in C++17 </entry>
257       <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">
259         P0174R2
260         </link>
261       </entry>
262       <entry align="center"> No  (kept for backwards compatibility)</entry>
263       <entry/>
264     </row>
266     <row>
267       <entry> Making <code>std::owner_less</code> more flexible </entry>
268       <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">
270         P0074R0
271         </link>
272       </entry>
273       <entry align="center"> 7.1 </entry>
274       <entry><code> __cpp_lib_transparent_operators >= 201510 </code></entry>
275     </row>
277     <row>
278       <entry> <code>std::addressof</code> should be constexpr </entry>
279       <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">
281         LWG2296
282         </link>
283       </entry>
284       <entry align="center"> 7.1 </entry>
285       <entry><code> __cpp_lib_addressof_constexpr >= 201603 </code></entry>
286     </row>
288     <row>
289       <entry> Safe conversions in <code>unique_ptr&lt;T[]&gt;</code> </entry>
290       <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">
292         N4089
293         </link>
294       </entry>
295       <entry align="center"> 6 </entry>
296       <entry/>
297     </row>
299     <row>
300       <entry> LWG 2228: Missing SFINAE rule in unique_ptr templated assignment </entry>
301       <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">
303           N4366
304         </link>
305       </entry>
306       <entry align="center"> 6 </entry>
307       <entry/>
308     </row>
310     <row>
311       <entry> Re-enabling <code>shared_from_this</code></entry>
312       <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">
314         P0033R1
315         </link>
316       </entry>
317       <entry align="center"> 7.1 </entry>
318       <entry><code>__cpp_lib_enable_shared_from_this >= 201603</code></entry>
319     </row>
321     <row>
322       <entry> A proposal to add <code>invoke</code> function template </entry>
323       <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">
325         N4169
326         </link>
327       </entry>
328       <entry align="center"> 6.1 </entry>
329       <entry><code> __cpp_lib_invoke >= 201411 </code></entry>
330     </row>
332     <row>
333       <entry>TriviallyCopyable <code>reference_wrapper</code> </entry>
334       <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">
336           N4277
337         </link>
338       </entry>
339       <entry align="center"> 5.1 </entry>
340       <entry/>
341     </row>
343     <row>
344       <entry> Adopt <code>not_fn</code> from Library Fundamentals 2 for C++17 </entry>
345       <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">
347         P0005R4
348         </link>
349       </entry>
350       <entry align="center"> 7.1 </entry>
351       <entry><code>__cpp_lib_not_fn >= 201603</code></entry>
352     </row>
354     <row>
355       <entry> Fixes for <code>not_fn</code> </entry>
356       <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">
358         P0358R1
359         </link>
360       </entry>
361       <entry align="center"> 7.1 </entry>
362       <entry/>
363     </row>
365     <row>
366       <entry> Fixing a design mistake in the searchers interface in Library Fundamentals </entry>
367       <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">
369         P0253R1
370         </link>
371       </entry>
372       <entry align="center"> 7.1 </entry>
373       <entry/>
374     </row>
376     <row>
377       <entry> Extending memory management tools </entry>
378       <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">
380         P0040R3
381         </link>
382       </entry>
383       <entry align="center"> 7.1 </entry>
384       <entry><code> </code></entry>
385     </row>
387     <row>
388       <entry> <code>shared_ptr::weak_type</code></entry>
389       <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">
391         P0163R0
392         </link>
393       </entry>
394       <entry align="center"> 7.1 </entry>
395       <entry><code> __cpp_lib_shared_ptr_weak_type >= 201606</code></entry>
396     </row>
398     <row>
399       <entry>Transformation Trait Alias <code>void_t</code></entry>
400       <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">
402           N3911
403         </link>
404       </entry>
405       <entry align="center">6.1</entry>
406       <entry><code> __cpp_lib_void_t >= 201411</code></entry>
407     </row>
409     <row>
410       <entry> Wording for <code>bool_constant</code>, revision 1 </entry>
411       <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">
413           N4389
414         </link>
415       </entry>
416       <entry align="center">6.1</entry>
417       <entry><code> __cpp_lib_bool_constant >= 201505</code></entry>
418     </row>
420     <row>
421       <entry> Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17</entry>
422       <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">
424         P0006R0
425         </link>
426       </entry>
427       <entry align="center"> 7.1 </entry>
428       <entry><code> __cpp_lib_type_trait_variable_templates >= 201510 </code></entry>
429     </row>
431     <row>
432       <entry> Logical Operator Type Traits</entry>
433       <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">
435         P0013R1
436         </link>
437       </entry>
438       <entry align="center"> 6.1 </entry>
439       <entry><code> __cpp_lib_logical_traits >= 201510 </code></entry>
440     </row>
442     <row>
443       <entry> Adding [nothrow-]swappable traits </entry>
444       <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">
446         P0185R1
447         </link>
448       </entry>
449       <entry align="center"> 7 (<code>__is_swappable</code> available since 6.1)</entry>
450       <entry><code> __cpp_lib_is_swappable >= 201603 </code></entry>
451     </row>
453     <row>
454       <entry> <code>is_callable</code>, the missing INVOKE related trait</entry>
455       <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">
457         P0077R2
458         </link>
459       </entry>
460       <entry align="center"> 7.1 </entry>
461       <entry><code> __cpp_lib_is_callable >= 201603 </code></entry>
462     </row>
464     <row>
465       <entry> has_unique_object_representations </entry>
466       <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">
468         P0258R2
469         </link>
470       </entry>
471       <entry align="center"> 7.1 </entry>
472       <entry><code> __cpp_lib_has_unique_object_representations >= 201606 </code></entry>
473     </row>
475     <row>
476       <entry> Polishing <code>&lt;chrono&gt;</code> </entry>
477       <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">
479         P0092R1
480         </link>
481       </entry>
482       <entry align="center"> 7.1 </entry>
483       <entry><code> __cpp_lib_chrono >= 201510 </code></entry>
484     </row>
486     <row>
487       <entry> Adding more constexpr to <code>&lt;chrono&gt;</code> </entry>
488       <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">
490         P0505R0
491         </link>
492       </entry>
493       <entry align="center"> 7.1 </entry>
494       <entry><code> __cpp_lib_chrono >= 201611 </code>
495              (since 7.3, see Note 2)
496       </entry>
497     </row>
499     <row>
500       <entry> Constexpr for <code>std::char_traits</code> </entry>
501       <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">
503         P0426R1
504         </link>
505       </entry>
506       <entry align="center"> 8.1 </entry>
507       <entry><code> __cpp_lib_constexpr_char_traits >= 201611 </code></entry>
508     </row>
510     <row>
511       <entry> Integrating <code>std::string_view</code> and <code>std::string</code> </entry>
512       <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">
514         P0254R2
515         </link>
516       </entry>
517       <entry align="center"> 7.1 </entry>
518       <entry><code> </code></entry>
519     </row>
521     <row>
522       <entry> Give 'std::string' a non-const '.data()' member function </entry>
523       <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">
525         P0272R1
526         </link>
527       </entry>
528       <entry align="center"> 7.1 </entry>
529       <entry><code> </code></entry>
530     </row>
532     <row>
533       <entry>Cleaning-up noexcept in the Library</entry>
534       <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">
536           N4258
537         </link>
538       </entry>
539       <entry align="center">6.1</entry>
540       <entry><code> __cpp_lib_allocator_traits_is_always_equal >= 201411 </code></entry>
541     </row>
543     <row>
544       <entry>Contiguous Iterators </entry>
545       <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">
547           N4284
548         </link>
549       </entry>
550       <entry align="center">N/A</entry>
551       <entry/>
552     </row>
554     <row>
555       <entry> Minimal incomplete type support for standard containers </entry>
556       <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">
558         N4510
559         </link>
560       </entry>
561       <entry align="center"> 3.0 </entry>
562       <entry><code> __cpp_lib_incomplete_container_elements >= 201505 </code>
563              (since 6.2, see Note 2)
564       </entry>
565     </row>
567     <row>
568       <entry> Emplace return type </entry>
569       <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">
571         P0084R2
572         </link>
573       </entry>
574       <entry align="center"> 7.1 </entry>
575       <entry/>
576     </row>
578     <row>
579       <entry>Improved insertion interface for unique-key maps</entry>
580       <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">
582           N4279
583         </link>
584       </entry>
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>
588       </entry>
589     </row>
591     <row>
592       <entry> Splicing Maps and Sets </entry>
593       <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">
595         P0083R3
596         </link>
597       </entry>
598       <entry align="center"> 7.1 </entry>
599       <entry><code> __cpp_lib_node_extract >= 201606 </code></entry>
600     </row>
602     <row>
603       <entry>Non-member <code>size()</code> and more</entry>
604       <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">
606           N4280
607         </link>
608       </entry>
609       <entry align="center"> 6.1 </entry>
610       <entry><code> __cpp_lib_nonmember_container_access >= 201411 </code></entry>
611     </row>
613     <row>
614       <entry> A Proposal to Add Constexpr Modifiers to <code>reverse_iterator</code>, <code>move_iterator</code>, <code>array</code> and Range Access </entry>
615       <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">
617         P0031R0
618         </link>
619       </entry>
620       <entry align="center"> 7.1 </entry>
621       <entry><code> __cpp_lib_array_constexpr >= 201603 </code></entry>
622     </row>
624     <row>
625       <?dbhtml bgcolor="#C8B0B0" ?>
626       <entry> The Parallelism TS Should be Standardized  </entry>
627       <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">
629         P0024R2
630         </link>
631       </entry>
632       <entry align="center"> No </entry>
633       <entry><code> __has_include(&lt;execution&gt;) </code>,
634              <code> __cpp_lib_execution >= 201603 </code>,
635              <code> __cpp_lib_parallel_algorithm >= 201603 </code>
636       </entry>
637     </row>
639     <row>
640       <entry> An algorithm to "clamp" a value between a pair of boundary values </entry>
641       <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">
643         P0025R0
644         </link>
645       </entry>
646       <entry align="center"> 7.1 </entry>
647       <entry><code> __cpp_lib_clamp >= 201603 </code></entry>
648     </row>
650     <row>
651       <entry> Adopt Selected Library Fundamentals V2 Components for C++17 </entry>
652       <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">
654         P0295R0
655         </link>
656       </entry>
657       <entry align="center"> 7.1 </entry>
658       <entry><code> __cpp_lib_gcd_lcm >= 201606 </code></entry>
659     </row>
661     <row>
662       <entry> Proposal to Introduce a 3-Argument Overload to <code>std::hypot</code> </entry>
663       <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">
665         P0030R1
666         </link>
667       </entry>
668       <entry align="center"> 7.1 </entry>
669       <entry><code> __cpp_lib_hypot >= 201603 </code></entry>
670     </row>
672     <row>
673       <entry> Mathematical Special Functions for C++17 </entry>
674       <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">
676         P0226R1
677         </link>
678       </entry>
679       <entry align="center"> 7.1 </entry>
680       <entry><code> __cpp_lib_math_special_functions >= 201603 </code>
681              (see Note 3)
682       </entry>
683     </row>
685     <row>
686       <entry>Adopt the File System TS for C++17  </entry>
687       <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">
689         P0218R1
690         </link>
691       </entry>
692       <entry align="center"> 8.1 </entry>
693       <entry><code> __has_include(&lt;filesystem&gt;) </code>,
694              <code> __cpp_lib_filesystem >= 201603 </code>
695              (GCC 8.x requires linking with <code>-lstdc++fs</code>)
696       </entry>
697     </row>
699     <row>
700       <entry> Relative Paths for Filesystem</entry>
701       <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">
703         P0219R1
704         </link>
705       </entry>
706       <entry align="center"> 8.1 </entry>
707       <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
708     </row>
710     <row>
711       <entry> Adapting string_view by filesystem paths </entry>
712       <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">
714         P0392R0
715         </link>
716       </entry>
717       <entry align="center"> 8.1 </entry>
718       <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
719     </row>
721     <row>
722       <entry> Directory Entry Caching for Filesystem </entry>
723       <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">
725        P0317R1
726        </link>
727       </entry>
728       <entry align="center"> 8.1 </entry>
729       <entry><code> __cpp_lib_filesystem >= 201703 </code></entry>
730      </row>
732     <row>
733       <entry> constexpr <code>atomic&lt;T&gt;::is_always_lock_free</code>        </entry>
734       <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">
736         P0152R1
737         </link>
738       </entry>
739       <entry align="center"> 7.1 </entry>
740       <entry><code> __cpp_lib_atomic_is_always_lock_free >= 201603 </code></entry>
741     </row>
743     <row>
744       <entry>A proposal to add <code>shared_mutex</code> (untimed) (Revision 4)</entry>
745       <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">
747           N4508
748         </link>
749       </entry>
750       <entry align="center"> 6.1 </entry>
751       <entry><code> __cpp_lib_shared_mutex >= 201505 </code></entry>
752     </row>
754     <row>
755       <entry> Variadic <code>lock_guard</code> (Rev. 5) </entry>
756       <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">
758         P0156R2
759         </link>
760       </entry>
761       <entry align="center"> 7.1 </entry>
762       <entry><code> __cpp_lib_scoped_lock >= 201703 </code></entry>
763     </row>
765     <row>
766       <entry> A byte type definition </entry>
767       <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">
769         P0298R3
770         </link>
771       </entry>
772       <entry align="center"> 7.1 </entry>
773       <entry><code> __cpp_lib_byte >= 201603 </code> (since 7.3, see Note 2)
774       </entry>
775     </row>
777     <row>
778       <?dbhtml bgcolor="#B0B0B0" ?>
779       <entry> Elementary string conversions </entry>
780       <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">
782         P0067R5
783         </link>
784       </entry>
785       <entry align="center"> 8.1 (only integral types supported) </entry>
786       <entry><code> __has_include(&lt;charconv&gt;) </code>
787              <code> __cpp_lib_to_chars >= 201611 </code></entry>
788     </row>
790     <row>
791       <entry> Homogeneous interface for variant, any and optional </entry>
792       <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">
794         P0032R3
795         </link>
796       </entry>
797       <entry align="center"> 7.1  </entry>
798       <entry>
799              <code> __cpp_lib_any >= 201606 </code>,
800              <code> __cpp_lib_optional >= 201606 </code>,
801              <code> __cpp_lib_variant >= 201606 </code>
802       </entry>
803     </row>
805     <row>
806       <entry> Making Optional Greater Equal Again </entry>
807       <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">
809         P0307R2
810         </link>
811       </entry>
812       <entry align="center"> 7.1  </entry>
813       <entry> <code> __cpp_lib_optional >= 201606 </code> </entry>
814     </row>
816   </tbody>
817 </tgroup>
818 </table>
820 <para>
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.
824 </para>
826 <para>
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.
830 </para>
832 <para>
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>.
837 </para>
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"/>
847   <thead>
848     <row>
849       <entry>Paper</entry>
850       <entry>Title</entry>
851       <entry>Status</entry>
852       <entry>Comments</entry>
853     </row>
854   </thead>
856   <tbody>
858     <row>
859       <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">
861           N4076
862         </link>
863       </entry>
864       <entry>A generalized callable negator</entry>
865       <entry>Y</entry>
866       <entry>Library Fundamentals 2 TS</entry>
867     </row>
869     <row>
870       <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">
872           N4273
873         </link>
874       </entry>
875       <entry>Uniform Container Erasure</entry>
876       <entry>Y</entry>
877       <entry>Library Fundamentals 2 TS</entry>
878     </row>
880     <row>
881       <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">
883           N4061
884         </link>
885       </entry>
886       <entry>Greatest Common Divisor and Least Common Multiple</entry>
887       <entry>Y</entry>
888       <entry>Library Fundamentals 2 TS</entry>
889     </row>
891     <row>
892       <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">
894           N4066
895         </link>
896       </entry>
897       <entry>Delimited iterators</entry>
898       <entry>Y</entry>
899       <entry>Library Fundamentals 2 TS</entry>
900     </row>
902     <row>
903       <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">
905           N4282
906         </link>
907       </entry>
908       <entry>The World's Dumbest Smart Pointer</entry>
909       <entry>Y</entry>
910       <entry>Library Fundamentals 2 TS</entry>
911     </row>
914     <row>
915       <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">
917           N4388
918         </link>
919       </entry>
920       <entry>Const-Propagating Wrapper</entry>
921       <entry>Y</entry>
922       <entry>Library Fundamentals 2 TS</entry>
923     </row>
925     <row>
926       <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">
928           N4391
929         </link>
930       </entry>
931       <entry> <code>make_array</code>, revision 4 </entry>
932       <entry>Y</entry>
933       <entry>Library Fundamentals 2 TS</entry>
934     </row>
936     <row>
937       <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">
939           N4502
940         </link>
941       </entry>
942       <entry> Support for the C++ Detection Idiom, V2 </entry>
943       <entry>Y</entry>
944       <entry>Library Fundamentals 2 TS</entry>
945     </row>
947     <row>
948       <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">
950           N4519
951         </link>
952       </entry>
953       <entry> Source-Code Information Capture </entry>
954       <entry>Y</entry>
955       <entry>Library Fundamentals 2 TS</entry>
956     </row>
958     <row>
959       <?dbhtml bgcolor="#C8B0B0" ?>
960       <entry>
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">
962           N4521
963         </link>
964       </entry>
965       <entry> Merge Fundamentals V1 into V2 </entry>
966       <entry>
967         N (components from V1 are still in namespace
968         <code>fundamentals_v1</code>)
969       </entry>
970       <entry>Library Fundamentals 2 TS</entry>
971     </row>
973     <row>
974       <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">
976           P0013R1
977         </link>
978       </entry>
979       <entry>Logical Operator Type Traits (revision 1)</entry>
980       <entry>Y</entry>
981       <entry>Library Fundamentals 2 TS</entry>
982     </row>
984     <row>
985       <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">
987           N4531
988         </link>
989       </entry>
990       <entry>std::rand replacement, revision 3</entry>
991       <entry>Y</entry>
992       <entry>Library Fundamentals 2 TS</entry>
993     </row>
995   </tbody>
996 </tgroup>
997 </table>
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.
1006    </para>
1008    <para>
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.
1014    </para>
1016    <para>
1017       <emphasis>23.6.5 [optional.bad_optional_access]</emphasis>
1018       <code>what()</code> returns <literal>"bad optional access"</literal>.
1019    </para>
1021    <para>
1022       <emphasis>23.7.3 [variant.variant]</emphasis>
1023       <classname>variant</classname> supports over-aligned types.
1024    </para>
1026    <para>
1027       <emphasis>23.7.10 [variant.bad.access]</emphasis>
1028       <code>what()</code> returns <literal>"Unexpected index"</literal>.
1029    </para>
1031    <para>
1032       <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis>
1033       Let S equal <code>numeric_limits&lt;size_t&gt;::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>,
1041       otherwise 768.
1042    </para>
1044    <para>
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>.
1048    </para>
1050    <para>
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.
1055    </para>
1057    <para>
1058       <emphasis>23.19.3 [execpol.type],
1059       28.4.3 [algorithms.parallel.exec]</emphasis>
1060       There are no implementation-defined execution policies.
1061    </para>
1063    <para>
1064       <emphasis>24.4.2 [string.view.template]</emphasis>
1065       <classname>basic_string_view&lt;C, T&gt;::iterator</classname> is
1066       <code>C*</code> and
1067       <classname>basic_string_view&lt;C, T&gt;::const_iterator</classname> is
1068       <code>const C*</code>.
1069    </para>
1072    <para>
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.
1078    </para>
1080    <para>
1081       <emphasis>29.4.1 [cfenv.syn]</emphasis>
1082       The effects of the <filename>&lt;cfenv&gt;</filename> functions
1083       depends on whether the <code>FENV_ACCESS</code> pragma is supported,
1084       and on the C library that provides the header.
1085    </para>
1087    <para>
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.
1091    </para>
1093    <para>
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.
1097    </para>
1099    <para>
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
1103       on some targets.
1104    </para>
1106    <para>
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.
1112    </para>
1114    <para>
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.
1123    </para>
1125    <para>
1126       <emphasis>30.10.10.1 [fs.enum.path.format]</emphasis>
1127       The character sequence is always interpreted in the native pathname
1128       format.
1129    </para>
1131    <para>
1132       <emphasis>30.10.15.4 [fs.op.file_size]</emphasis>
1133       If <code>!is_regular_file(p)</code>, an error is reported.
1134    </para>
1137 </section>
1139 </section>