xref: /netbsd-src/external/gpl3/gcc.old/dist/libstdc++-v3/doc/xml/manual/status_cxx2017.xml (revision a77ebd868432a4d7e595fb7709cfc1b8f144789b)
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"?>
4
5<info><title>C++ 2017</title>
6  <keywordset>
7    <keyword>ISO C++</keyword>
8    <keyword>2017</keyword>
9  </keywordset>
10</info>
11
12<para>
13In this implementation the <literal>-std=gnu++17</literal> or
14<literal>-std=c++17</literal> flag must be used to enable language
15and library
16features. See <link linkend="manual.intro.using.flags">dialect</link>
17options. The pre-defined symbol
18<constant>__cplusplus</constant> is used to check for the
19presence of the required flag.
20</para>
21
22<para>
23This section describes the C++17 and library TS support in the GCC 9 series.
24</para>
25
26<para>
27The following table lists new library features that are included in
28the C++17 standard. The "Proposal" column provides a link to the
29ISO C++ committee proposal that describes the feature, while the "Status"
30column indicates the first version of GCC that contains an implementation of
31this feature (if it has been implemented).
32The "SD-6 Feature Test" column shows the corresponding macro or header from
33<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:
34Feature-testing recommendations for C++</link>.
35</para>
36
37<table frame="all" xml:id="table.cxx17_status">
38<title>C++ 2017 Implementation Status</title>
39
40<tgroup cols="4" align="left" colsep="0" rowsep="1">
41<colspec colname="c1"/>
42<colspec colname="c2"/>
43<colspec colname="c3"/>
44<colspec colname="c4"/>
45  <thead>
46    <row>
47      <entry>Library Feature</entry>
48      <entry>Proposal</entry>
49      <entry>Status</entry>
50      <entry>SD-6 Feature Test</entry>
51    </row>
52  </thead>
53
54  <tbody>
55
56    <row>
57      <?dbhtml bgcolor="#C8B0B0" ?>
58      <entry>
59	<code>constexpr std::hardware_{constructive,destructive}_interference_size</code>
60      </entry>
61      <entry>
62	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html">
63	P0154R1
64	</link>
65      </entry>
66      <entry align="center"> No </entry>
67      <entry> <code>__cpp_lib_hardware_interference_size >= 201603</code> </entry>
68    </row>
69
70    <row>
71      <entry> Core Issue 1776: Replacement of class objects containing reference members</entry>
72      <entry>
73	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0137r1.html">
74	P0137R1
75	</link>
76      </entry>
77      <entry align="center"> 7.1 </entry>
78      <entry> <code>__cpp_lib_launder >= 201606</code> </entry>
79    </row>
80
81    <row>
82      <entry>Wording for <code>std::uncaught_exceptions</code></entry>
83      <entry>
84	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n4259.pdf">
85	  N4259
86	</link>
87      </entry>
88      <entry align="center">6.1</entry>
89      <entry><code>__cpp_lib_uncaught_exceptions >= 201411</code></entry>
90    </row>
91
92    <row>
93      <entry> C++17 should refer to C11 instead of C99 </entry>
94      <entry>
95	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html">
96	P0063R3
97	</link>
98      </entry>
99      <entry align="center"> 9.1 </entry>
100      <entry/>
101    </row>
102
103    <row>
104      <entry> Variant: a type-safe union for C++17 </entry>
105      <entry>
106	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html">
107	P0088R3
108	</link>
109      </entry>
110      <entry align="center"> 7.1 </entry>
111      <entry> <code>__has_include(&lt;variant&gt;)</code>,
112              <code>__cpp_lib_variant >= 201603</code>
113              (since 7.3, see Note 1)
114      </entry>
115    </row>
116
117    <row>
118      <entry> Library Fundamentals V1 TS Components: <code>optional</code> </entry>
119      <entry>
120	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
121	P0220R1
122	</link>
123      </entry>
124      <entry align="center"> 7.1 </entry>
125      <entry> <code>__has_include(&lt;optional&gt;)</code>,
126              <code>__cpp_lib_optional >= 201603</code>
127              (since 7.3, see Note 1)
128      </entry>
129    </row>
130
131    <row>
132      <entry> Library Fundamentals V1 TS Components: <code>any</code> </entry>
133      <entry>
134	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
135	P0220R1
136	</link>
137      </entry>
138      <entry align="center"> 7.1 </entry>
139      <entry> <code>__has_include(&lt;any&gt;)</code>,
140              <code>__cpp_lib_any >= 201603</code>
141              (since 7.3, see Note 1)
142      </entry>
143    </row>
144
145    <row>
146      <entry> Library Fundamentals V1 TS Components: <code>string_view</code> </entry>
147      <entry>
148	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
149	P0220R1
150	</link>
151      </entry>
152      <entry align="center"> 7.1 </entry>
153      <entry> <code>__has_include(&lt;string_view&gt;)</code>,
154              <code>__cpp_lib_string_view >= 201603</code>
155              (since 7.3, see Note 1)
156      </entry>
157    </row>
158
159    <row>
160      <entry> Library Fundamentals V1 TS Components: <code>memory_resource</code> </entry>
161      <entry>
162	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
163	P0220R1
164	</link>
165      </entry>
166      <entry align="center"> 9.1 </entry>
167      <entry> <code>__has_include(&lt;memory_resource&gt;)</code>,
168              <code>__cpp_lib_memory_resource >= 201603</code>
169      </entry>
170    </row>
171
172    <row>
173      <entry> Library Fundamentals V1 TS Components: <code>apply</code> </entry>
174      <entry>
175	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
176	P0220R1
177	</link>
178      </entry>
179      <entry align="center"> 7.1 </entry>
180      <entry> <code>__cpp_lib_apply >= 201603</code> </entry>
181    </row>
182
183    <row>
184      <entry> Library Fundamentals V1 TS Components: <code>shared_ptr&lt;T[]&gt;</code> </entry>
185      <entry>
186	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
187	P0220R1
188	</link>
189      </entry>
190      <entry align="center"> 7.1 </entry>
191      <entry> <code>__cpp_lib_shared_ptr_arrays >= 201603</code> </entry>
192    </row>
193
194    <row>
195      <entry> Library Fundamentals V1 TS Components: Searchers </entry>
196      <entry>
197	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
198	P0220R1
199	</link>
200      </entry>
201      <entry align="center"> 7.1 </entry>
202      <entry> <code>__cpp_lib_boyer_moore_searcher >= 201603</code> </entry>
203    </row>
204
205    <row>
206      <entry> Library Fundamentals V1 TS Components: Sampling </entry>
207      <entry>
208	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html">
209	P0220R1
210	</link>
211      </entry>
212      <entry align="center"> 7.1 </entry>
213      <entry> <code>__cpp_lib_sample >= 201603</code> </entry>
214    </row>
215
216    <row>
217      <entry> Constant View: A proposal for a <code>std::as_const</code> helper function template	</entry>
218      <entry>
219	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="">
220	P0007R1
221	</link>
222      </entry>
223      <entry align="center"> 7.1 </entry>
224      <entry><code> __cpp_lib_as_const >= 201510 </code></entry>
225    </row>
226
227    <row>
228      <entry> Improving pair and tuple </entry>
229      <entry>
230	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387">
231	N4387
232	</link>
233      </entry>
234      <entry align="center"> 6.1 </entry>
235      <entry> N/A </entry>
236    </row>
237
238    <row>
239      <entry> <code>make_from_tuple</code>: apply for construction </entry>
240      <entry>
241	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0209r2.pdf">
242	P0209R2
243	</link>
244      </entry>
245      <entry align="center"> 7.1 </entry>
246      <entry><code> __cpp_lib_make_from_tuple >= 201606 </code></entry>
247    </row>
248
249    <row>
250      <?dbhtml bgcolor="#C8B0B0" ?>
251      <entry>
252        Removing <code>auto_ptr</code>, <code>random_shuffle()</code>,
253        And Old <code>&lt;functional&gt;</code> Stuff
254      </entry>
255      <entry>
256	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm">
257	  N4190
258	</link>
259      </entry>
260      <entry align="center">No (kept for backwards compatibility)</entry>
261      <entry/>
262    </row>
263
264    <row>
265      <?dbhtml bgcolor="#C8B0B0" ?>
266      <entry> Deprecating Vestigial Library Parts in C++17 </entry>
267      <entry>
268	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0174r2.html">
269	P0174R2
270	</link>
271      </entry>
272      <entry align="center"> No  (kept for backwards compatibility)</entry>
273      <entry/>
274    </row>
275
276    <row>
277      <entry> Making <code>std::owner_less</code> more flexible </entry>
278      <entry>
279	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0074r0.html">
280	P0074R0
281	</link>
282      </entry>
283      <entry align="center"> 7.1 </entry>
284      <entry><code> __cpp_lib_transparent_operators >= 201510 </code></entry>
285    </row>
286
287    <row>
288      <entry> <code>std::addressof</code> should be constexpr </entry>
289      <entry>
290	<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">
291	LWG2296
292	</link>
293      </entry>
294      <entry align="center"> 7.1 </entry>
295      <entry><code> __cpp_lib_addressof_constexpr >= 201603 </code></entry>
296    </row>
297
298    <row>
299      <entry> Safe conversions in <code>unique_ptr&lt;T[]&gt;</code> </entry>
300      <entry>
301	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4089.pdf">
302	N4089
303	</link>
304      </entry>
305      <entry align="center"> 6 </entry>
306      <entry/>
307    </row>
308
309    <row>
310      <entry> LWG 2228: Missing SFINAE rule in unique_ptr templated assignment </entry>
311      <entry>
312	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4366.html">
313	  N4366
314	</link>
315      </entry>
316      <entry align="center"> 6 </entry>
317      <entry/>
318    </row>
319
320    <row>
321      <entry> Re-enabling <code>shared_from_this</code></entry>
322      <entry>
323	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0033r1.html">
324	P0033R1
325	</link>
326      </entry>
327      <entry align="center"> 7.1 </entry>
328      <entry><code>__cpp_lib_enable_shared_from_this >= 201603</code></entry>
329    </row>
330
331    <row>
332      <entry> A proposal to add <code>invoke</code> function template </entry>
333      <entry>
334	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4169.html">
335	N4169
336	</link>
337      </entry>
338      <entry align="center"> 6.1 </entry>
339      <entry><code> __cpp_lib_invoke >= 201411 </code></entry>
340    </row>
341
342    <row>
343      <entry>TriviallyCopyable <code>reference_wrapper</code> </entry>
344      <entry>
345	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4277.html">
346	  N4277
347	</link>
348      </entry>
349      <entry align="center"> 5.1 </entry>
350      <entry/>
351    </row>
352
353    <row>
354      <entry> Adopt <code>not_fn</code> from Library Fundamentals 2 for C++17 </entry>
355      <entry>
356	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0005r4.html">
357	P0005R4
358	</link>
359      </entry>
360      <entry align="center"> 7.1 </entry>
361      <entry><code>__cpp_lib_not_fn >= 201603</code></entry>
362    </row>
363
364    <row>
365      <entry> Fixes for <code>not_fn</code> </entry>
366      <entry>
367	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html">
368	P0358R1
369	</link>
370      </entry>
371      <entry align="center"> 7.1 </entry>
372      <entry/>
373    </row>
374
375    <row>
376      <entry> Fixing a design mistake in the searchers interface in Library Fundamentals </entry>
377      <entry>
378	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0253r1.pdf">
379	P0253R1
380	</link>
381      </entry>
382      <entry align="center"> 7.1 </entry>
383      <entry/>
384    </row>
385
386    <row>
387      <entry> Extending memory management tools </entry>
388      <entry>
389	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0040r3.html">
390	P0040R3
391	</link>
392      </entry>
393      <entry align="center"> 7.1 </entry>
394      <entry><code>__cpp_lib_raw_memory_algorithms &gt;= 201606L</code></entry>
395    </row>
396
397    <row>
398      <entry> <code>shared_ptr::weak_type</code></entry>
399      <entry>
400	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0163r0.html">
401	P0163R0
402	</link>
403      </entry>
404      <entry align="center"> 7.1 </entry>
405      <entry><code> __cpp_lib_shared_ptr_weak_type >= 201606</code></entry>
406    </row>
407
408    <row>
409      <entry>Transformation Trait Alias <code>void_t</code></entry>
410      <entry>
411	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n3911.pdf">
412	  N3911
413	</link>
414      </entry>
415      <entry align="center">6.1</entry>
416      <entry><code> __cpp_lib_void_t >= 201411</code></entry>
417    </row>
418
419    <row>
420      <entry> Wording for <code>bool_constant</code>, revision 1 </entry>
421      <entry>
422	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html">
423	  N4389
424	</link>
425      </entry>
426      <entry align="center">6.1</entry>
427      <entry><code> __cpp_lib_bool_constant >= 201505</code></entry>
428    </row>
429
430    <row>
431      <entry> Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17</entry>
432      <entry>
433	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0006r0.html">
434	P0006R0
435	</link>
436      </entry>
437      <entry align="center"> 7.1 </entry>
438      <entry><code> __cpp_lib_type_trait_variable_templates >= 201510 </code></entry>
439    </row>
440
441    <row>
442      <entry> Logical Operator Type Traits</entry>
443      <entry>
444	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0013r1.html">
445	P0013R1
446	</link>
447      </entry>
448      <entry align="center"> 6.1 </entry>
449      <entry><code> __cpp_lib_logical_traits >= 201510 </code></entry>
450    </row>
451
452    <row>
453      <entry> Adding [nothrow-]swappable traits </entry>
454      <entry>
455	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0185r1.html">
456	P0185R1
457	</link>
458      </entry>
459      <entry align="center"> 7 (<code>__is_swappable</code> available since 6.1)</entry>
460      <entry><code> __cpp_lib_is_swappable >= 201603 </code></entry>
461    </row>
462
463    <row>
464      <entry> <code>is_callable</code>, the missing INVOKE related trait</entry>
465      <entry>
466	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0077r2.html">
467	P0077R2
468	</link>
469      </entry>
470      <entry align="center"> 7.1 </entry>
471      <entry><code> __cpp_lib_is_callable >= 201603 </code></entry>
472    </row>
473
474    <row>
475      <entry> has_unique_object_representations </entry>
476      <entry>
477	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0258r2.html">
478	P0258R2
479	</link>
480      </entry>
481      <entry align="center"> 7.1 </entry>
482      <entry><code> __cpp_lib_has_unique_object_representations >= 201606 </code></entry>
483    </row>
484
485    <row>
486      <entry> Polishing <code>&lt;chrono&gt;</code> </entry>
487      <entry>
488	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0092r1.html">
489	P0092R1
490	</link>
491      </entry>
492      <entry align="center"> 7.1 </entry>
493      <entry><code> __cpp_lib_chrono >= 201510 </code></entry>
494    </row>
495
496    <row>
497      <entry> Adding more constexpr to <code>&lt;chrono&gt;</code> </entry>
498      <entry>
499	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0505r0.html">
500	P0505R0
501	</link>
502      </entry>
503      <entry align="center"> 7.1 </entry>
504      <entry><code> __cpp_lib_chrono >= 201611 </code>
505             (since 7.3, see Note 2)
506      </entry>
507    </row>
508
509    <row>
510      <entry> Constexpr for <code>std::char_traits</code> </entry>
511      <entry>
512	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0426r1.html">
513	P0426R1
514	</link>
515      </entry>
516      <entry align="center"> 8.1 </entry>
517      <entry><code> __cpp_lib_constexpr_char_traits >= 201611 </code></entry>
518    </row>
519
520    <row>
521      <entry> Integrating <code>std::string_view</code> and <code>std::string</code> </entry>
522      <entry>
523	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0254r2.pdf">
524	P0254R2
525	</link>
526      </entry>
527      <entry align="center"> 7.1 </entry>
528      <entry><code> </code></entry>
529    </row>
530
531    <row>
532      <entry> Give 'std::string' a non-const '.data()' member function </entry>
533      <entry>
534	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html">
535	P0272R1
536	</link>
537      </entry>
538      <entry align="center"> 7.1 </entry>
539      <entry><code> </code></entry>
540    </row>
541
542    <row>
543      <entry>Cleaning-up noexcept in the Library</entry>
544      <entry>
545	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf">
546	  N4258
547	</link>
548      </entry>
549      <entry align="center">6.1</entry>
550      <entry><code> __cpp_lib_allocator_traits_is_always_equal >= 201411 </code></entry>
551    </row>
552
553    <row>
554      <entry>Contiguous Iterators </entry>
555      <entry>
556	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4284.html">
557	  N4284
558	</link>
559      </entry>
560      <entry align="center">N/A</entry>
561      <entry/>
562    </row>
563
564    <row>
565      <entry> Minimal incomplete type support for standard containers </entry>
566      <entry>
567	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4510.html">
568	N4510
569	</link>
570      </entry>
571      <entry align="center"> 3.0 </entry>
572      <entry><code> __cpp_lib_incomplete_container_elements >= 201505 </code>
573	     (since 6.2, see Note 2)
574      </entry>
575    </row>
576
577    <row>
578      <entry> Emplace return type </entry>
579      <entry>
580	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf">
581	P0084R2
582	</link>
583      </entry>
584      <entry align="center"> 7.1 </entry>
585      <entry/>
586    </row>
587
588    <row>
589      <entry>Improved insertion interface for unique-key maps</entry>
590      <entry>
591	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html">
592	  N4279
593	</link>
594      </entry>
595      <entry align="center"> 6.1 </entry>
596      <entry><code> __cpp_lib_map_try_emplace >= 201411</code>,
597	     <code> __cpp_lib_unordered_map_try_emplace >= 201411</code>
598      </entry>
599    </row>
600
601    <row>
602      <entry> Splicing Maps and Sets </entry>
603      <entry>
604	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf">
605	P0083R3
606	</link>
607      </entry>
608      <entry align="center"> 7.1 </entry>
609      <entry><code> __cpp_lib_node_extract >= 201606 </code></entry>
610    </row>
611
612    <row>
613      <entry>Non-member <code>size()</code> and more</entry>
614      <entry>
615	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf">
616	  N4280
617	</link>
618      </entry>
619      <entry align="center"> 6.1 </entry>
620      <entry><code> __cpp_lib_nonmember_container_access >= 201411 </code></entry>
621    </row>
622
623    <row>
624      <entry> A Proposal to Add Constexpr Modifiers to <code>reverse_iterator</code>, <code>move_iterator</code>, <code>array</code> and Range Access </entry>
625      <entry>
626	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0031r0.html">
627	P0031R0
628	</link>
629      </entry>
630      <entry align="center"> 7.1 </entry>
631      <entry><code> __cpp_lib_array_constexpr >= 201603 </code></entry>
632    </row>
633
634    <row>
635      <?dbhtml bgcolor="#B0B0B0" ?>
636      <entry> The Parallelism TS Should be Standardized	 </entry>
637      <entry>
638	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r2.html">
639	P0024R2
640	</link>
641      </entry>
642      <entry align="center"> 9.1 </entry>
643      <entry><code> __has_include(&lt;execution&gt;) </code>,
644	     <code> __cpp_lib_execution >= 201603 </code>,
645	     <code> __cpp_lib_parallel_algorithm >= 201603 </code>
646             (requires linking with <code>-ltbb</code>, see Note 3)
647      </entry>
648    </row>
649
650    <row>
651      <entry> An algorithm to "clamp" a value between a pair of boundary values </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/2015/p0025r0.html">
654	P0025R0
655	</link>
656      </entry>
657      <entry align="center"> 7.1 </entry>
658      <entry><code> __cpp_lib_clamp >= 201603 </code></entry>
659    </row>
660
661    <row>
662      <entry> Adopt Selected Library Fundamentals V2 Components for C++17 </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/2016/p0295r0.pdf">
665	P0295R0
666	</link>
667      </entry>
668      <entry align="center"> 7.1 </entry>
669      <entry><code> __cpp_lib_gcd_lcm >= 201606 </code></entry>
670    </row>
671
672    <row>
673      <entry> Proposal to Introduce a 3-Argument Overload to <code>std::hypot</code> </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/2015/p0030r1.pdf">
676	P0030R1
677	</link>
678      </entry>
679      <entry align="center"> 7.1 </entry>
680      <entry><code> __cpp_lib_hypot >= 201603 </code></entry>
681    </row>
682
683    <row>
684      <entry> Mathematical Special Functions for C++17 </entry>
685      <entry>
686	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0226r1.pdf">
687	P0226R1
688	</link>
689      </entry>
690      <entry align="center"> 7.1 </entry>
691      <entry><code> __cpp_lib_math_special_functions >= 201603 </code>
692	     (see Note 4)
693      </entry>
694    </row>
695
696    <row>
697      <entry>Adopt the File System TS for C++17	 </entry>
698      <entry>
699	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r1.html">
700	P0218R1
701	</link>
702      </entry>
703      <entry align="center"> 8.1 </entry>
704      <entry><code> __has_include(&lt;filesystem&gt;) </code>,
705	     <code> __cpp_lib_filesystem >= 201603 </code>
706	     (GCC 8.x requires linking with <code>-lstdc++fs</code>)
707      </entry>
708    </row>
709
710    <row>
711      <entry> Relative Paths for Filesystem</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/p0219r1.html">
714	P0219R1
715	</link>
716      </entry>
717      <entry align="center"> 8.1 </entry>
718      <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
719    </row>
720
721    <row>
722      <entry> Adapting string_view by filesystem paths </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/p0392r0.pdf">
725	P0392R0
726	</link>
727      </entry>
728      <entry align="center"> 8.1 </entry>
729      <entry><code> __cpp_lib_filesystem >= 201606 </code></entry>
730    </row>
731
732    <row>
733      <entry> Directory Entry Caching for Filesystem </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/p0317r1.html">
736       P0317R1
737       </link>
738      </entry>
739      <entry align="center"> 8.1 </entry>
740      <entry><code> __cpp_lib_filesystem >= 201703 </code></entry>
741     </row>
742
743    <row>
744      <entry> constexpr <code>atomic&lt;T&gt;::is_always_lock_free</code>	 </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/2016/p0152r1.html">
747	P0152R1
748	</link>
749      </entry>
750      <entry align="center"> 7.1 </entry>
751      <entry><code> __cpp_lib_atomic_is_always_lock_free >= 201603 </code></entry>
752    </row>
753
754    <row>
755      <entry>A proposal to add <code>shared_mutex</code> (untimed) (Revision 4)</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/2015/n4508.html">
758	  N4508
759	</link>
760      </entry>
761      <entry align="center"> 6.1 </entry>
762      <entry><code> __cpp_lib_shared_mutex >= 201505 </code></entry>
763    </row>
764
765    <row>
766      <entry> Variadic <code>lock_guard</code> (Rev. 5) </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/p0156r2.html">
769	P0156R2
770	</link>
771      </entry>
772      <entry align="center"> 7.1 </entry>
773      <entry><code> __cpp_lib_scoped_lock >= 201703 </code></entry>
774    </row>
775
776    <row>
777      <entry> A byte type definition </entry>
778      <entry>
779	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0298r3.pdf">
780	P0298R3
781	</link>
782      </entry>
783      <entry align="center"> 7.1 </entry>
784      <entry><code> __cpp_lib_byte >= 201603 </code> (since 7.3, see Note 2)
785      </entry>
786    </row>
787
788    <row>
789      <?dbhtml bgcolor="#B0B0B0" ?>
790      <entry> Elementary string conversions </entry>
791      <entry>
792	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0067r5.html">
793	P0067R5
794	</link>
795      </entry>
796      <entry align="center"> 8.1 (only integral types supported) </entry>
797      <entry><code> __has_include(&lt;charconv&gt;) </code>
798             <code> __cpp_lib_to_chars >= 201611 </code></entry>
799    </row>
800
801    <row>
802      <entry> Homogeneous interface for variant, any and optional </entry>
803      <entry>
804	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0032r3.pdf">
805	P0032R3
806	</link>
807      </entry>
808      <entry align="center"> 7.1  </entry>
809      <entry>
810             <code> __cpp_lib_any >= 201606 </code>,
811             <code> __cpp_lib_optional >= 201606 </code>,
812             <code> __cpp_lib_variant >= 201606 </code>
813      </entry>
814    </row>
815
816    <row>
817      <entry> Making Optional Greater Equal Again </entry>
818      <entry>
819	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0307r2.pdf">
820	P0307R2
821	</link>
822      </entry>
823      <entry align="center"> 7.1  </entry>
824      <entry> <code> __cpp_lib_optional >= 201606 </code> </entry>
825    </row>
826
827  </tbody>
828</tgroup>
829</table>
830
831<para>
832Note 1: This feature is supported in GCC 7.1 and 7.2 but before GCC 7.3 the
833<code>__cpp_lib</code> macro is not defined, and compilation will fail if the
834header is included without using <option>-std</option> to enable C++17 support.
835</para>
836
837<para>
838Note 2: This feature is supported in older releases but the
839<code>__cpp_lib</code> macro is not defined to the right value
840(or not defined at all) until the version shown in parentheses.
841</para>
842
843<para>
844Note 3: The Parallel Algorithms have an external dependency on Intel TBB 2018
845or later. If the <filename class="headerfile">&lt;execution&gt;</filename>
846header is included then <code>-ltbb</code> must be used to link to TBB.
847</para>
848
849<para>
850Note 4: The mathematical special functions are enabled in C++17 mode from
851GCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define
852<code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code> to a non-zero value
853and test for <code>__STDCPP_MATH_SPEC_FUNCS__ >= 201003L</code>.
854</para>
855
856<table frame="all" xml:id="table.cxx17_ts_status">
857<title>C++ Technical Specifications Implementation Status</title>
858
859<tgroup cols="4" align="left" colsep="0" rowsep="1">
860<colspec colname="c1"/>
861<colspec colname="c2"/>
862<colspec colname="c3"/>
863<colspec colname="c4"/>
864  <thead>
865    <row>
866      <entry>Paper</entry>
867      <entry>Title</entry>
868      <entry>Status</entry>
869      <entry>Comments</entry>
870    </row>
871  </thead>
872
873  <tbody>
874
875    <row>
876      <entry>
877	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4076.html">
878	  N4076
879	</link>
880      </entry>
881      <entry>A generalized callable negator</entry>
882      <entry>Y</entry>
883      <entry>Library Fundamentals 2 TS</entry>
884    </row>
885
886    <row>
887      <entry>
888	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4273.htm">
889	  N4273
890	</link>
891      </entry>
892      <entry>Uniform Container Erasure</entry>
893      <entry>Y</entry>
894      <entry>Library Fundamentals 2 TS</entry>
895    </row>
896
897    <row>
898      <entry>
899	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4061.pdf">
900	  N4061
901	</link>
902      </entry>
903      <entry>Greatest Common Divisor and Least Common Multiple</entry>
904      <entry>Y</entry>
905      <entry>Library Fundamentals 2 TS</entry>
906    </row>
907
908    <row>
909      <entry>
910	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4066.htm">
911	  N4066
912	</link>
913      </entry>
914      <entry>Delimited iterators</entry>
915      <entry>Y</entry>
916      <entry>Library Fundamentals 2 TS</entry>
917    </row>
918
919    <row>
920      <entry>
921	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf">
922	  N4282
923	</link>
924      </entry>
925      <entry>The World's Dumbest Smart Pointer</entry>
926      <entry>Y</entry>
927      <entry>Library Fundamentals 2 TS</entry>
928    </row>
929
930
931    <row>
932      <entry>
933	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4388.html">
934	  N4388
935	</link>
936      </entry>
937      <entry>Const-Propagating Wrapper</entry>
938      <entry>Y</entry>
939      <entry>Library Fundamentals 2 TS</entry>
940    </row>
941
942    <row>
943      <entry>
944	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4391.html">
945	  N4391
946	</link>
947      </entry>
948      <entry> <code>make_array</code>, revision 4 </entry>
949      <entry>Y</entry>
950      <entry>Library Fundamentals 2 TS</entry>
951    </row>
952
953    <row>
954      <entry>
955	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4502.pdf">
956	  N4502
957	</link>
958      </entry>
959      <entry> Support for the C++ Detection Idiom, V2 </entry>
960      <entry>Y</entry>
961      <entry>Library Fundamentals 2 TS</entry>
962    </row>
963
964    <row>
965      <entry>
966	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4519.pdf">
967	  N4519
968	</link>
969      </entry>
970      <entry> Source-Code Information Capture </entry>
971      <entry>Y</entry>
972      <entry>Library Fundamentals 2 TS</entry>
973    </row>
974
975    <row>
976      <?dbhtml bgcolor="#C8B0B0" ?>
977      <entry>
978	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4521.html">
979	  N4521
980	</link>
981      </entry>
982      <entry> Merge Fundamentals V1 into V2 </entry>
983      <entry>
984        N (components from V1 are still in namespace
985        <code>fundamentals_v1</code>)
986      </entry>
987      <entry>Library Fundamentals 2 TS</entry>
988    </row>
989
990    <row>
991      <entry>
992	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html">
993	  P0013R1
994	</link>
995      </entry>
996      <entry>Logical Operator Type Traits (revision 1)</entry>
997      <entry>Y</entry>
998      <entry>Library Fundamentals 2 TS</entry>
999    </row>
1000
1001    <row>
1002      <entry>
1003	<link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4531.html">
1004	  N4531
1005	</link>
1006      </entry>
1007      <entry>std::rand replacement, revision 3</entry>
1008      <entry>Y</entry>
1009      <entry>Library Fundamentals 2 TS</entry>
1010    </row>
1011
1012  </tbody>
1013</tgroup>
1014</table>
1015
1016<section xml:id="iso.2017.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info>
1017
1018   <para>For behaviour which is also specified by previous standards,
1019      see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation
1020      Specific Behavior</link> and <link linkend="iso.2011.specific">C++
1021      2011 Implementation Specific Behavior</link>. This section only
1022      documents behaviour which is new in the 2017 standard.
1023   </para>
1024
1025   <para>
1026      <emphasis>20.5.1.2 [headers]</emphasis>
1027      Whether names from Annex K are declared by C++ headers depends on
1028      whether the underlying C library supports Annex K and declares the
1029      names. For the GNU C library, there is no Annex K support and so
1030      none of its names are declared by C++ headers.
1031   </para>
1032
1033   <para>
1034      <emphasis>23.6.5 [optional.bad_optional_access]</emphasis>
1035      <code>what()</code> returns <literal>"bad optional access"</literal>.
1036   </para>
1037
1038   <para>
1039      <emphasis>23.7.3 [variant.variant]</emphasis>
1040      <classname>variant</classname> supports over-aligned types.
1041   </para>
1042
1043   <para>
1044      <emphasis>23.7.10 [variant.bad.access]</emphasis>
1045      <code>what()</code> returns <literal>"Unexpected index"</literal>.
1046   </para>
1047
1048   <para>
1049      <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis>
1050      Let S equal <code>numeric_limits&lt;size_t&gt;::digits</code>.
1051      The limit for maximum number of blocks in a chunk is given by
1052      <inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>,
1053      where N is <inlineequation><mathphrase>min(19, 3 + S/2)</mathphrase></inlineequation>.
1054      The largest allocation size that will be allocated from a pool is
1055      <inlineequation><mathphrase>2<superscript>22</superscript></mathphrase></inlineequation>
1056      when <inlineequation><mathphrase>S > 20</mathphrase></inlineequation>,
1057      otherwise 3072 when <inlineequation><mathphrase>S > 16</mathphrase></inlineequation>,
1058      otherwise 768.
1059   </para>
1060
1061   <para>
1062      <emphasis>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</emphasis>
1063      The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>.
1064      The default growth factor is <code>1.5</code>.
1065   </para>
1066
1067   <para>
1068      <emphasis>23.15.4.3 [meta.unary.prop]</emphasis>
1069      The predicate condition for
1070      <code>has_unique_object_representations</code> is true for all scalar
1071      types except floating point types.
1072   </para>
1073
1074   <para>
1075      <emphasis>23.19.3 [execpol.type],
1076      28.4.3 [algorithms.parallel.exec]</emphasis>
1077      There are no implementation-defined execution policies.
1078   </para>
1079
1080   <para>
1081      <emphasis>24.4.2 [string.view.template]</emphasis>
1082      <classname>basic_string_view&lt;C, T&gt;::iterator</classname> is
1083      <code>C*</code> and
1084      <classname>basic_string_view&lt;C, T&gt;::const_iterator</classname> is
1085      <code>const C*</code>.
1086   </para>
1087
1088
1089   <para>
1090      <emphasis>28.4.3 [algorithms.parallel.exec]</emphasis>
1091      Threads of execution created by <classname>std::thread</classname>
1092      provide concurrent forward progress guarantees, so threads of execution
1093      implicitly created by the library will provide parallel forward
1094      progress guarantees.
1095   </para>
1096
1097   <para>
1098      <emphasis>29.4.1 [cfenv.syn]</emphasis>
1099      The effects of the <filename>&lt;cfenv&gt;</filename> functions
1100      depends on whether the <code>FENV_ACCESS</code> pragma is supported,
1101      and on the C library that provides the header.
1102   </para>
1103
1104   <para>
1105      <emphasis>29.6.9 [c.math.rand]</emphasis>
1106      Whether the <function>rand</function> function may introduce data
1107      races depends on the target C library that provides the function.
1108   </para>
1109
1110   <para>
1111      <emphasis>29.9.5 [sf.cmath]</emphasis>
1112      The effect of calling the mathematical special functions with large
1113      inputs should be documented here.
1114   </para>
1115
1116   <para>
1117      <emphasis>30.10.2.1 [fs.conform.9945]</emphasis>
1118      The behavior of the filesystem library implementation will depend on
1119      the target operating system. Some features will not be supported
1120      on some targets.
1121   </para>
1122
1123   <para>
1124      <emphasis>30.10.5 [fs.filesystem.syn]</emphasis>
1125      The clock used for file times is an unspecified type
1126      with a signed 64-bit representation, capable of representing
1127      timestamps with nanosecond resolution. The clock's epoch is
1128      unspecified, but is not the same as the system clock's epoch.
1129   </para>
1130
1131   <para>
1132      <emphasis>30.10.7.1 [fs.path.generic]</emphasis>
1133      dot-dot in the root-directory refers to the root-directory itself.
1134      On Windows, a drive specifier such as <code>"C:"</code> or
1135      <code>"z:"</code> is treated as a root-name. On Cygwin, a path
1136      that begins with two successive directory separators is a
1137      root-name. Otherwise (for POSIX-like systems other than Cygwin),
1138      the implementation-defined root-name is an unspecified string
1139      which does not appear in any pathnames.
1140   </para>
1141
1142   <para>
1143      <emphasis>30.10.10.1 [fs.enum.path.format]</emphasis>
1144      The character sequence is always interpreted in the native pathname
1145      format.
1146   </para>
1147
1148   <para>
1149      <emphasis>30.10.15.4 [fs.op.file_size]</emphasis>
1150      If <code>!is_regular_file(p)</code>, an error is reported.
1151   </para>
1152
1153
1154</section>
1155
1156</section>
1157