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. 20GCC 9.1 was the first release with non-experimental C++17 support, 21so the API and ABI of features added in C++17 is only stable 22since that release. 23</para> 24 25<para> 26This section describes the C++17 and library TS support in the GCC 12 release series, 27not in any particular release. 28</para> 29 30<para> 31The following table lists new library features that are included in 32the C++17 standard. The "Proposal" column provides a link to the 33ISO C++ committee proposal that describes the feature, while the "Status" 34column indicates the first version of GCC that contains an implementation of 35this feature (if it has been implemented). 36The "SD-6 Feature Test" column shows the corresponding macro or header from 37<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: 38Feature-testing recommendations for C++</link>. 39</para> 40 41<table frame="all" xml:id="table.cxx17_features"> 42<title>C++ 2017 Library Features</title> 43 44<tgroup cols="4" align="left" colsep="0" rowsep="1"> 45<colspec colname="c1"/> 46<colspec colname="c2"/> 47<colspec colname="c3"/> 48<colspec colname="c4"/> 49 <thead> 50 <row> 51 <entry>Library Feature</entry> 52 <entry>Proposal</entry> 53 <entry>Status</entry> 54 <entry>SD-6 Feature Test</entry> 55 </row> 56 </thead> 57 58 <tbody> 59 60 <row> 61 <entry> 62 <code>constexpr std::hardware_{constructive,destructive}_interference_size</code> 63 </entry> 64 <entry> 65 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0154r1.html"> 66 P0154R1 67 </link> 68 </entry> 69 <entry align="center"> 12.1 </entry> 70 <entry> <code>__cpp_lib_hardware_interference_size >= 201603</code> </entry> 71 </row> 72 73 <row> 74 <entry> Core Issue 1776: Replacement of class objects containing reference members</entry> 75 <entry> 76 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0137r1.html"> 77 P0137R1 78 </link> 79 </entry> 80 <entry align="center"> 7.1 </entry> 81 <entry> <code>__cpp_lib_launder >= 201606</code> </entry> 82 </row> 83 84 <row> 85 <entry>Wording for <code>std::uncaught_exceptions</code></entry> 86 <entry> 87 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n4259.pdf"> 88 N4259 89 </link> 90 </entry> 91 <entry align="center">6.1</entry> 92 <entry><code>__cpp_lib_uncaught_exceptions >= 201411</code></entry> 93 </row> 94 95 <row> 96 <entry> C++17 should refer to C11 instead of C99 </entry> 97 <entry> 98 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0063r3.html"> 99 P0063R3 100 </link> 101 </entry> 102 <entry align="center"> 9.1 </entry> 103 <entry/> 104 </row> 105 106 <row> 107 <entry> Variant: a type-safe union for C++17 </entry> 108 <entry> 109 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0088r3.html"> 110 P0088R3 111 </link> 112 </entry> 113 <entry align="center"> 7.1 </entry> 114 <entry> <code>__has_include(<variant>)</code>, 115 <code>__cpp_lib_variant >= 201603</code> 116 (since 7.3, see Note 1) 117 </entry> 118 </row> 119 120 <row> 121 <entry> Library Fundamentals V1 TS Components: <code>optional</code> </entry> 122 <entry> 123 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 124 P0220R1 125 </link> 126 </entry> 127 <entry align="center"> 7.1 </entry> 128 <entry> <code>__has_include(<optional>)</code>, 129 <code>__cpp_lib_optional >= 201603</code> 130 (since 7.3, see Note 1) 131 </entry> 132 </row> 133 134 <row> 135 <entry> Library Fundamentals V1 TS Components: <code>any</code> </entry> 136 <entry> 137 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 138 P0220R1 139 </link> 140 </entry> 141 <entry align="center"> 7.1 </entry> 142 <entry> <code>__has_include(<any>)</code>, 143 <code>__cpp_lib_any >= 201603</code> 144 (since 7.3, see Note 1) 145 </entry> 146 </row> 147 148 <row> 149 <entry> Library Fundamentals V1 TS Components: <code>string_view</code> </entry> 150 <entry> 151 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 152 P0220R1 153 </link> 154 </entry> 155 <entry align="center"> 7.1 </entry> 156 <entry> <code>__has_include(<string_view>)</code>, 157 <code>__cpp_lib_string_view >= 201603</code> 158 (since 7.3, see Note 1) 159 </entry> 160 </row> 161 162 <row> 163 <entry> Library Fundamentals V1 TS Components: <code>memory_resource</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"> 9.1 </entry> 170 <entry> <code>__has_include(<memory_resource>)</code>, 171 <code>__cpp_lib_memory_resource >= 201603</code> 172 </entry> 173 </row> 174 175 <row> 176 <entry> Library Fundamentals V1 TS Components: <code>apply</code> </entry> 177 <entry> 178 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 179 P0220R1 180 </link> 181 </entry> 182 <entry align="center"> 7.1 </entry> 183 <entry> <code>__cpp_lib_apply >= 201603</code> </entry> 184 </row> 185 186 <row> 187 <entry> Library Fundamentals V1 TS Components: <code>shared_ptr<T[]></code> </entry> 188 <entry> 189 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 190 P0220R1 191 </link> 192 </entry> 193 <entry align="center"> 7.1 </entry> 194 <entry> <code>__cpp_lib_shared_ptr_arrays >= 201603</code> </entry> 195 </row> 196 197 <row> 198 <entry> Library Fundamentals V1 TS Components: Searchers </entry> 199 <entry> 200 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 201 P0220R1 202 </link> 203 </entry> 204 <entry align="center"> 7.1 </entry> 205 <entry> <code>__cpp_lib_boyer_moore_searcher >= 201603</code> </entry> 206 </row> 207 208 <row> 209 <entry> Library Fundamentals V1 TS Components: Sampling </entry> 210 <entry> 211 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0220r1.html"> 212 P0220R1 213 </link> 214 </entry> 215 <entry align="center"> 7.1 </entry> 216 <entry> <code>__cpp_lib_sample >= 201603</code> </entry> 217 </row> 218 219 <row> 220 <entry> Constant View: A proposal for a <code>std::as_const</code> helper function template </entry> 221 <entry> 222 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href=""> 223 P0007R1 224 </link> 225 </entry> 226 <entry align="center"> 7.1 </entry> 227 <entry><code> __cpp_lib_as_const >= 201510 </code></entry> 228 </row> 229 230 <row> 231 <entry> Improving pair and tuple </entry> 232 <entry> 233 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4387"> 234 N4387 235 </link> 236 </entry> 237 <entry align="center"> 6.1 </entry> 238 <entry> N/A </entry> 239 </row> 240 241 <row> 242 <entry> <code>make_from_tuple</code>: apply for construction </entry> 243 <entry> 244 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0209r2.pdf"> 245 P0209R2 246 </link> 247 </entry> 248 <entry align="center"> 7.1 </entry> 249 <entry><code> __cpp_lib_make_from_tuple >= 201606 </code></entry> 250 </row> 251 252 <row> 253 <?dbhtml bgcolor="#C8B0B0" ?> 254 <entry> 255 Removing <code>auto_ptr</code>, <code>random_shuffle()</code>, 256 And Old <code><functional></code> Stuff 257 </entry> 258 <entry> 259 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4190.htm"> 260 N4190 261 </link> 262 </entry> 263 <entry align="center">No (kept for backwards compatibility)</entry> 264 <entry/> 265 </row> 266 267 <row> 268 <entry> Deprecating Vestigial Library Parts in C++17 </entry> 269 <entry> 270 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0174r2.html"> 271 P0174R2 272 </link> 273 </entry> 274 <entry align="center"> 12.1 </entry> 275 <entry/> 276 </row> 277 278 <row> 279 <entry> Making <code>std::owner_less</code> more flexible </entry> 280 <entry> 281 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0074r0.html"> 282 P0074R0 283 </link> 284 </entry> 285 <entry align="center"> 7.1 </entry> 286 <entry><code> __cpp_lib_transparent_operators >= 201510 </code></entry> 287 </row> 288 289 <row> 290 <entry> <code>std::addressof</code> should be constexpr </entry> 291 <entry> 292 <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"> 293 LWG2296 294 </link> 295 </entry> 296 <entry align="center"> 7.1 </entry> 297 <entry><code> __cpp_lib_addressof_constexpr >= 201603 </code></entry> 298 </row> 299 300 <row> 301 <entry> Safe conversions in <code>unique_ptr<T[]></code> </entry> 302 <entry> 303 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4089.pdf"> 304 N4089 305 </link> 306 </entry> 307 <entry align="center"> 6 </entry> 308 <entry/> 309 </row> 310 311 <row> 312 <entry> LWG 2228: Missing SFINAE rule in unique_ptr templated assignment </entry> 313 <entry> 314 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4366.html"> 315 N4366 316 </link> 317 </entry> 318 <entry align="center"> 6 </entry> 319 <entry/> 320 </row> 321 322 <row> 323 <entry> Re-enabling <code>shared_from_this</code></entry> 324 <entry> 325 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0033r1.html"> 326 P0033R1 327 </link> 328 </entry> 329 <entry align="center"> 7.1 </entry> 330 <entry><code>__cpp_lib_enable_shared_from_this >= 201603</code></entry> 331 </row> 332 333 <row> 334 <entry> A proposal to add <code>invoke</code> function template </entry> 335 <entry> 336 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4169.html"> 337 N4169 338 </link> 339 </entry> 340 <entry align="center"> 6.1 </entry> 341 <entry><code> __cpp_lib_invoke >= 201411 </code></entry> 342 </row> 343 344 <row> 345 <entry>TriviallyCopyable <code>reference_wrapper</code> </entry> 346 <entry> 347 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4277.html"> 348 N4277 349 </link> 350 </entry> 351 <entry align="center"> 5.1 </entry> 352 <entry/> 353 </row> 354 355 <row> 356 <entry> Adopt <code>not_fn</code> from Library Fundamentals 2 for C++17 </entry> 357 <entry> 358 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0005r4.html"> 359 P0005R4 360 </link> 361 </entry> 362 <entry align="center"> 7.1 </entry> 363 <entry><code>__cpp_lib_not_fn >= 201603</code></entry> 364 </row> 365 366 <row> 367 <entry> Fixes for <code>not_fn</code> </entry> 368 <entry> 369 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0358r1.html"> 370 P0358R1 371 </link> 372 </entry> 373 <entry align="center"> 7.1 </entry> 374 <entry/> 375 </row> 376 377 <row> 378 <entry> Fixing a design mistake in the searchers interface in Library Fundamentals </entry> 379 <entry> 380 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0253r1.pdf"> 381 P0253R1 382 </link> 383 </entry> 384 <entry align="center"> 7.1 </entry> 385 <entry/> 386 </row> 387 388 <row> 389 <entry> Extending memory management tools </entry> 390 <entry> 391 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0040r3.html"> 392 P0040R3 393 </link> 394 </entry> 395 <entry align="center"> 7.1 </entry> 396 <entry><code>__cpp_lib_raw_memory_algorithms >= 201606L</code></entry> 397 </row> 398 399 <row> 400 <entry> <code>shared_ptr::weak_type</code></entry> 401 <entry> 402 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0163r0.html"> 403 P0163R0 404 </link> 405 </entry> 406 <entry align="center"> 7.1 </entry> 407 <entry><code> __cpp_lib_shared_ptr_weak_type >= 201606</code></entry> 408 </row> 409 410 <row> 411 <entry>Transformation Trait Alias <code>void_t</code></entry> 412 <entry> 413 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/sc22/WG21/docs/papers/2014/n3911.pdf"> 414 N3911 415 </link> 416 </entry> 417 <entry align="center">6.1</entry> 418 <entry><code> __cpp_lib_void_t >= 201411</code></entry> 419 </row> 420 421 <row> 422 <entry> Wording for <code>bool_constant</code>, revision 1 </entry> 423 <entry> 424 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4389.html"> 425 N4389 426 </link> 427 </entry> 428 <entry align="center">6.1</entry> 429 <entry><code> __cpp_lib_bool_constant >= 201505</code></entry> 430 </row> 431 432 <row> 433 <entry> Adopt Type Traits Variable Templates from Library Fundamentals TS for C++17</entry> 434 <entry> 435 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0006r0.html"> 436 P0006R0 437 </link> 438 </entry> 439 <entry align="center"> 7.1 </entry> 440 <entry><code> __cpp_lib_type_trait_variable_templates >= 201510 </code></entry> 441 </row> 442 443 <row> 444 <entry> Logical Operator Type Traits</entry> 445 <entry> 446 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0013r1.html"> 447 P0013R1 448 </link> 449 </entry> 450 <entry align="center"> 6.1 </entry> 451 <entry><code> __cpp_lib_logical_traits >= 201510 </code></entry> 452 </row> 453 454 <row> 455 <entry> Adding [nothrow-]swappable traits </entry> 456 <entry> 457 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0185r1.html"> 458 P0185R1 459 </link> 460 </entry> 461 <entry align="center"> 7.1 (<code>__is_swappable</code> available since 6.1)</entry> 462 <entry><code> __cpp_lib_is_swappable >= 201603 </code></entry> 463 </row> 464 465 <row> 466 <entry> <code>is_callable</code>, the missing INVOKE related trait</entry> 467 <entry> 468 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0077r2.html"> 469 P0077R2 470 </link> 471 </entry> 472 <entry align="center"> 7.1 </entry> 473 <entry><code> __cpp_lib_is_invocable >= 201703 </code></entry> 474 </row> 475 476 <row> 477 <entry> has_unique_object_representations </entry> 478 <entry> 479 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0258r2.html"> 480 P0258R2 481 </link> 482 </entry> 483 <entry align="center"> 7.1 </entry> 484 <entry><code> __cpp_lib_has_unique_object_representations >= 201606 </code></entry> 485 </row> 486 487 <row> 488 <entry> Polishing <code><chrono></code> </entry> 489 <entry> 490 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0092r1.html"> 491 P0092R1 492 </link> 493 </entry> 494 <entry align="center"> 7.1 </entry> 495 <entry><code> __cpp_lib_chrono >= 201510 </code></entry> 496 </row> 497 498 <row> 499 <entry> Adding more constexpr to <code><chrono></code> </entry> 500 <entry> 501 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0505r0.html"> 502 P0505R0 503 </link> 504 </entry> 505 <entry align="center"> 7.1 </entry> 506 <entry><code> __cpp_lib_chrono >= 201611 </code> 507 (since 7.3, see Note 2) 508 </entry> 509 </row> 510 511 <row> 512 <entry> Constexpr for <code>std::char_traits</code> </entry> 513 <entry> 514 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0426r1.html"> 515 P0426R1 516 </link> 517 </entry> 518 <entry align="center"> 8.1 </entry> 519 <entry><code> __cpp_lib_constexpr_string >= 201611 </code></entry> 520 </row> 521 522 <row> 523 <entry> Integrating <code>std::string_view</code> and <code>std::string</code> </entry> 524 <entry> 525 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0254r2.pdf"> 526 P0254R2 527 </link> 528 </entry> 529 <entry align="center"> 7.1 </entry> 530 <entry><code> </code></entry> 531 </row> 532 533 <row> 534 <entry> Give 'std::string' a non-const '.data()' member function </entry> 535 <entry> 536 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0272r1.html"> 537 P0272R1 538 </link> 539 </entry> 540 <entry align="center"> 7.1 </entry> 541 <entry><code> </code></entry> 542 </row> 543 544 <row> 545 <entry>Cleaning-up noexcept in the Library</entry> 546 <entry> 547 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4258.pdf"> 548 N4258 549 </link> 550 </entry> 551 <entry align="center">6.1</entry> 552 <entry><code> __cpp_lib_allocator_traits_is_always_equal >= 201411 </code></entry> 553 </row> 554 555 <row> 556 <entry>Contiguous Iterators </entry> 557 <entry> 558 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4284.html"> 559 N4284 560 </link> 561 </entry> 562 <entry align="center">N/A</entry> 563 <entry/> 564 </row> 565 566 <row> 567 <entry> Minimal incomplete type support for standard containers </entry> 568 <entry> 569 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4510.html"> 570 N4510 571 </link> 572 </entry> 573 <entry align="center"> 3.0 </entry> 574 <entry><code> __cpp_lib_incomplete_container_elements >= 201505 </code> 575 (since 6.2, see Note 2) 576 </entry> 577 </row> 578 579 <row> 580 <entry> Emplace return type </entry> 581 <entry> 582 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0084r2.pdf"> 583 P0084R2 584 </link> 585 </entry> 586 <entry align="center"> 7.1 </entry> 587 <entry/> 588 </row> 589 590 <row> 591 <entry>Improved insertion interface for unique-key maps</entry> 592 <entry> 593 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4279.html"> 594 N4279 595 </link> 596 </entry> 597 <entry align="center"> 6.1 </entry> 598 <entry><code> __cpp_lib_map_try_emplace >= 201411</code>, 599 <code> __cpp_lib_unordered_map_try_emplace >= 201411</code> 600 </entry> 601 </row> 602 603 <row> 604 <entry> Splicing Maps and Sets </entry> 605 <entry> 606 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0083r3.pdf"> 607 P0083R3 608 </link> 609 </entry> 610 <entry align="center"> 7.1 </entry> 611 <entry><code> __cpp_lib_node_extract >= 201606 </code></entry> 612 </row> 613 614 <row> 615 <entry>Non-member <code>size()</code> and more</entry> 616 <entry> 617 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4280.pdf"> 618 N4280 619 </link> 620 </entry> 621 <entry align="center"> 6.1 </entry> 622 <entry><code> __cpp_lib_nonmember_container_access >= 201411 </code></entry> 623 </row> 624 625 <row> 626 <entry> A Proposal to Add Constexpr Modifiers to <code>reverse_iterator</code>, <code>move_iterator</code>, <code>array</code> and Range Access </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/2015/p0031r0.html"> 629 P0031R0 630 </link> 631 </entry> 632 <entry align="center"> 7.1 </entry> 633 <entry><code> __cpp_lib_array_constexpr >= 201603 </code></entry> 634 </row> 635 636 <row> 637 <?dbhtml bgcolor="#B0B0B0" ?> 638 <entry> The Parallelism TS Should be Standardized </entry> 639 <entry> 640 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0024r2.html"> 641 P0024R2 642 </link> 643 </entry> 644 <entry align="center"> 9.1 </entry> 645 <entry><code> __has_include(<execution>)</code>, 646 <code> __cpp_lib_execution >= 201603 </code>, 647 <code> __cpp_lib_parallel_algorithm >= 201603 </code> 648 (requires linking with <code>-ltbb</code>, see Note 3) 649 </entry> 650 </row> 651 652 <row> 653 <entry> An algorithm to "clamp" a value between a pair of boundary values </entry> 654 <entry> 655 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0025r0.html"> 656 P0025R0 657 </link> 658 </entry> 659 <entry align="center"> 7.1 </entry> 660 <entry><code> __cpp_lib_clamp >= 201603 </code></entry> 661 </row> 662 663 <row> 664 <entry> Adopt Selected Library Fundamentals V2 Components for C++17 </entry> 665 <entry> 666 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0295r0.pdf"> 667 P0295R0 668 </link> 669 </entry> 670 <entry align="center"> 7.1 </entry> 671 <entry><code> __cpp_lib_gcd_lcm >= 201606 </code></entry> 672 </row> 673 674 <row> 675 <entry> Proposal to Introduce a 3-Argument Overload to <code>std::hypot</code> </entry> 676 <entry> 677 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0030r1.pdf"> 678 P0030R1 679 </link> 680 </entry> 681 <entry align="center"> 7.1 </entry> 682 <entry><code> __cpp_lib_hypot >= 201603 </code></entry> 683 </row> 684 685 <row> 686 <entry> Mathematical Special Functions 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/p0226r1.pdf"> 689 P0226R1 690 </link> 691 </entry> 692 <entry align="center"> 7.1 </entry> 693 <entry><code> __cpp_lib_math_special_functions >= 201603 </code> 694 (see Note 4) 695 </entry> 696 </row> 697 698 <row> 699 <entry>Adopt the File System TS for C++17 </entry> 700 <entry> 701 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0218r1.html"> 702 P0218R1 703 </link> 704 </entry> 705 <entry align="center"> 8.1 </entry> 706 <entry><code> __has_include(<filesystem>)</code>, 707 <code> __cpp_lib_filesystem >= 201603 </code> 708 (GCC 8.x requires linking with <code>-lstdc++fs</code>) 709 </entry> 710 </row> 711 712 <row> 713 <entry> Relative Paths for Filesystem</entry> 714 <entry> 715 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0219r1.html"> 716 P0219R1 717 </link> 718 </entry> 719 <entry align="center"> 8.1 </entry> 720 <entry><code> __cpp_lib_filesystem >= 201606 </code></entry> 721 </row> 722 723 <row> 724 <entry> Adapting string_view by filesystem paths </entry> 725 <entry> 726 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0392r0.pdf"> 727 P0392R0 728 </link> 729 </entry> 730 <entry align="center"> 8.1 </entry> 731 <entry><code> __cpp_lib_filesystem >= 201606 </code></entry> 732 </row> 733 734 <row> 735 <entry> Directory Entry Caching for Filesystem </entry> 736 <entry> 737 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0317r1.html"> 738 P0317R1 739 </link> 740 </entry> 741 <entry align="center"> 8.1 </entry> 742 <entry><code> __cpp_lib_filesystem >= 201703 </code></entry> 743 </row> 744 745 <row> 746 <entry> constexpr <code>atomic<T>::is_always_lock_free</code> </entry> 747 <entry> 748 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0152r1.html"> 749 P0152R1 750 </link> 751 </entry> 752 <entry align="center"> 7.1 </entry> 753 <entry><code> __cpp_lib_atomic_is_always_lock_free >= 201603 </code></entry> 754 </row> 755 756 <row> 757 <entry>A proposal to add <code>shared_mutex</code> (untimed) (Revision 4)</entry> 758 <entry> 759 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4508.html"> 760 N4508 761 </link> 762 </entry> 763 <entry align="center"> 6.1 </entry> 764 <entry><code> __cpp_lib_shared_mutex >= 201505 </code></entry> 765 </row> 766 767 <row> 768 <entry> Variadic <code>lock_guard</code> (Rev. 5) </entry> 769 <entry> 770 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0156r2.html"> 771 P0156R2 772 </link> 773 </entry> 774 <entry align="center"> 7.1 </entry> 775 <entry><code> __cpp_lib_scoped_lock >= 201703 </code></entry> 776 </row> 777 778 <row> 779 <entry> A byte type definition </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/2017/p0298r3.pdf"> 782 P0298R3 783 </link> 784 </entry> 785 <entry align="center"> 7.1 </entry> 786 <entry><code> __cpp_lib_byte >= 201603 </code> (since 7.3, see Note 2) 787 </entry> 788 </row> 789 790 <row> 791 <entry> Elementary string conversions </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/p0067r5.html"> 794 P0067R5 795 </link> 796 </entry> 797 <entry align="center"> 11.1 (integral types supported since 8.1) </entry> 798 <entry><code> __has_include(<charconv>)</code>, 799 <code> __cpp_lib_to_chars >= 201611 </code></entry> 800 </row> 801 802 <row> 803 <entry> Homogeneous interface for variant, any and optional </entry> 804 <entry> 805 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0032r3.pdf"> 806 P0032R3 807 </link> 808 </entry> 809 <entry align="center"> 7.1 </entry> 810 <entry> 811 <code> __cpp_lib_any >= 201606 </code>, 812 <code> __cpp_lib_optional >= 201606 </code>, 813 <code> __cpp_lib_variant >= 201606 </code> 814 </entry> 815 </row> 816 817 <row> 818 <entry> Making Optional Greater Equal Again </entry> 819 <entry> 820 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0307r2.pdf"> 821 P0307R2 822 </link> 823 </entry> 824 <entry align="center"> 7.1 </entry> 825 <entry> <code> __cpp_lib_optional >= 201606 </code> </entry> 826 </row> 827 828 </tbody> 829</tgroup> 830</table> 831 832<para> 833Note 1: This feature is supported in GCC 7.1 and 7.2 but before GCC 7.3 the 834<code>__cpp_lib</code> macro is not defined, and compilation will fail if the 835header is included without using <option>-std</option> to enable C++17 support. 836</para> 837 838<para> 839Note 2: This feature is supported in older releases but the 840<code>__cpp_lib</code> macro is not defined to the right value 841(or not defined at all) until the version shown in parentheses. 842</para> 843 844<para> 845Note 3: The Parallel Algorithms have an external dependency on Intel TBB 2018 846or later. If the <filename class="headerfile"><execution></filename> 847header is included then <code>-ltbb</code> must be used to link to TBB. 848</para> 849 850<para> 851Note 4: The mathematical special functions are enabled in C++17 mode from 852GCC 7.1 onwards. For GCC 6.x or for C++11/C++14 define 853<code>__STDCPP_WANT_MATH_SPEC_FUNCS__</code> to a non-zero value 854and test for <code>__STDCPP_MATH_SPEC_FUNCS__ >= 201003L</code>. 855</para> 856 857 858 859<para> 860The following status table is based on the table of contents of 861ISO/IEC 14882:2017. 862Some subclauses are not shown in the table where the content is unchanged 863since C++14 and the implementation is complete. 864</para> 865 866<table frame="all" xml:id="table.cxx17_status"> 867<title>C++ 2017 Implementation Status</title> 868 869<tgroup cols="4" align="left" colsep="0" rowsep="1"> 870<colspec colname="c1"/> 871<colspec colname="c2"/> 872<colspec colname="c3"/> 873<colspec colname="c4"/> 874 <thead> 875 <row> 876 <entry>Section</entry> 877 <entry>Description</entry> 878 <entry>Status</entry> 879 <entry>Comments</entry> 880 </row> 881 </thead> 882 883 <tbody> 884 885 <row> 886 <entry> 887 <emphasis>21</emphasis> 888 </entry> 889 <entry namest="c2" nameend="c4" align="left"> 890 <emphasis>Language support</emphasis> 891 </entry> 892 </row> 893 894 <row> 895 <entry>21.1</entry> 896 <entry>General</entry> 897 <entry/> 898 <entry/> 899 </row> 900 <row> 901 <entry>21.2</entry> 902 <entry>Common definitions</entry> 903 <entry/> 904 <entry/> 905 </row> 906 <row> 907 <entry>21.3</entry> 908 <entry>Implementation properties</entry> 909 <entry/> 910 <entry/> 911 </row> 912 <row> 913 <entry>21.3.1</entry> 914 <entry>General</entry> 915 <entry/> 916 <entry/> 917 </row> 918 <row> 919 <entry>21.3.2</entry> 920 <entry>Header <code><limits></code> synopsis</entry> 921 <entry/> 922 <entry/> 923 </row> 924 <row> 925 <entry>21.3.3</entry> 926 <entry>Floating-point type properties</entry> 927 <entry/> 928 <entry/> 929 </row> 930 <row> 931 <?dbhtml bgcolor="#C8B0B0" ?> 932 <entry>21.3.3.1</entry> 933 <entry><code>float_round_style</code></entry> 934 <entry>N</entry> 935 <entry/> 936 </row> 937 <row> 938 <?dbhtml bgcolor="#C8B0B0" ?> 939 <entry>21.3.3.2</entry> 940 <entry><code>float_denorm_style</code></entry> 941 <entry>N</entry> 942 <entry/> 943 </row> 944 <row> 945 <entry>21.3.4</entry> 946 <entry>Class template <code>numeric_limits</code></entry> 947 <entry>Y</entry> 948 <entry/> 949 </row> 950 <row> 951 <entry>21.3.5</entry> 952 <entry>Header <code><climits></code> synopsis</entry> 953 <entry>Y</entry> 954 <entry/> 955 </row> 956 <row> 957 <entry>21.3.6</entry> 958 <entry>Header <code><cfloat></code> synopsis</entry> 959 <entry>Y</entry> 960 <entry/> 961 </row> 962 <row> 963 <entry>21.4</entry> 964 <entry>Integer types</entry> 965 <entry/> 966 <entry/> 967 </row> 968 <row> 969 <entry>21.4.1</entry> 970 <entry>Header <code><cstdint></code> synopsis</entry> 971 <entry>Y</entry> 972 <entry/> 973 </row> 974 <row> 975 <?dbhtml bgcolor="#B0B0B0" ?> 976 <entry>21.5</entry> 977 <entry>Start and termination</entry> 978 <entry>Partial</entry> 979 <entry>C library dependency for quick_exit, at_quick_exit</entry> 980 </row> 981 <row> 982 <entry>21.6</entry> 983 <entry>Dynamic memory management</entry> 984 <entry/> 985 <entry/> 986 </row> 987 <row> 988 <entry>21.6.1</entry> 989 <entry>Header <code><new></code> synopsis</entry> 990 <entry/> 991 <entry/> 992 </row> 993 <row> 994 <entry>21.6.2</entry> 995 <entry>Storage allocation and deallocation</entry> 996 <entry>Y</entry> 997 <entry/> 998 </row> 999 <row> 1000 <entry>21.6.3</entry> 1001 <entry>Storage allocation errors</entry> 1002 <entry>Y</entry> 1003 <entry/> 1004 </row> 1005 <row> 1006 <entry>21.6.4</entry> 1007 <entry>Pointer optimization barrier</entry> 1008 <entry>Y</entry> 1009 <entry/> 1010 </row> 1011 <row> 1012 <entry>21.6.5</entry> 1013 <entry>Hardware interference size</entry> 1014 <entry>Y</entry> 1015 <entry/> 1016 </row> 1017 <row> 1018 <entry>21.7</entry> 1019 <entry>Type identification</entry> 1020 <entry>Y</entry> 1021 <entry/> 1022 </row> 1023 <row> 1024 <entry>21.8</entry> 1025 <entry>Exception handling</entry> 1026 <entry/> 1027 <entry/> 1028 </row> 1029 <row> 1030 <entry>21.8.1</entry> 1031 <entry>Header <code><exception></code> synopsis</entry> 1032 <entry/> 1033 <entry/> 1034 </row> 1035 <row> 1036 <entry>21.8.2</entry> 1037 <entry>Class exception</entry> 1038 <entry>Y</entry> 1039 <entry/> 1040 </row> 1041 <row> 1042 <entry>21.8.3</entry> 1043 <entry>Class bad_exception</entry> 1044 <entry>Y</entry> 1045 <entry/> 1046 </row> 1047 <row> 1048 <entry>21.8.4</entry> 1049 <entry>Abnormal termination</entry> 1050 <entry>Y</entry> 1051 <entry/> 1052 </row> 1053 <row> 1054 <entry>21.8.5</entry> 1055 <entry><code>uncaught_exceptions</code></entry> 1056 <entry>Y</entry> 1057 <entry/> 1058 </row> 1059 <row> 1060 <entry>21.8.6</entry> 1061 <entry>Exception Propagation</entry> 1062 <entry>Y</entry> 1063 <entry/> 1064 </row> 1065 <row> 1066 <entry>21.8.7</entry> 1067 <entry><code>nested_exception</code></entry> 1068 <entry>Y</entry> 1069 <entry/> 1070 </row> 1071 <row> 1072 <entry>21.9</entry> 1073 <entry>Initializer lists</entry> 1074 <entry>Y</entry> 1075 <entry/> 1076 </row> 1077 <row> 1078 <entry>21.10</entry> 1079 <entry>Other runtime support</entry> 1080 <entry>Y</entry> 1081 <entry/> 1082 </row> 1083 <row> 1084 <entry> 1085 <emphasis>22</emphasis> 1086 </entry> 1087 <entry namest="c2" nameend="c4" align="left"> 1088 <emphasis>Diagnostics</emphasis> 1089 </entry> 1090 </row> 1091 <row> 1092 <entry>22.1</entry> 1093 <entry>General</entry> 1094 <entry/> 1095 <entry/> 1096 </row> 1097 <row> 1098 <entry>22.2</entry> 1099 <entry>Exception classes</entry> 1100 <entry>Y</entry> 1101 <entry/> 1102 </row> 1103 <row> 1104 <entry>22.3</entry> 1105 <entry>Assertions</entry> 1106 <entry>Y</entry> 1107 <entry/> 1108 </row> 1109 <row> 1110 <entry>22.4</entry> 1111 <entry>Error numbers</entry> 1112 <entry>Y</entry> 1113 <entry/> 1114 </row> 1115 <row> 1116 <entry>22.5</entry> 1117 <entry>System error support</entry> 1118 <entry/> 1119 <entry/> 1120 </row> 1121 <row> 1122 <entry> 1123 <emphasis>23</emphasis> 1124 </entry> 1125 <entry namest="c2" nameend="c4" align="left"> 1126 <emphasis>General utilities</emphasis> 1127 </entry> 1128 </row> 1129 <row> 1130 <entry>23.1</entry> 1131 <entry>General</entry> 1132 <entry/> 1133 <entry/> 1134 </row> 1135 <row> 1136 <entry>23.2</entry> 1137 <entry>Utility components</entry> 1138 <entry/> 1139 <entry/> 1140 </row> 1141 <row> 1142 <entry>23.2.1</entry> 1143 <entry>Header <code><utility></code> synopsis</entry> 1144 <entry/> 1145 <entry/> 1146 </row> 1147 <row> 1148 <entry>23.2.2</entry> 1149 <entry>Operators</entry> 1150 <entry>Y</entry> 1151 <entry/> 1152 </row> 1153 <row> 1154 <entry>23.2.3</entry> 1155 <entry><code>swap</code></entry> 1156 <entry>Y</entry> 1157 <entry/> 1158 </row> 1159 <row> 1160 <entry>23.2.4</entry> 1161 <entry><code>exchange</code></entry> 1162 <entry>Y</entry> 1163 <entry/> 1164 </row> 1165 <row> 1166 <entry>23.2.5</entry> 1167 <entry>Forward/move helpers</entry> 1168 <entry>Y</entry> 1169 <entry/> 1170 </row> 1171 <row> 1172 <entry>23.2.6</entry> 1173 <entry>Function template <code>as_const</code></entry> 1174 <entry>Y</entry> 1175 <entry/> 1176 </row> 1177 <row> 1178 <entry>23.2.7</entry> 1179 <entry>Function template <code>declval</code></entry> 1180 <entry>Y</entry> 1181 <entry/> 1182 </row> 1183 <row> 1184 <entry>23.2.8</entry> 1185 <entry>Primitive numeric output conversion</entry> 1186 <entry>Partial</entry> 1187 <entry/> 1188 </row> 1189 <row> 1190 <entry>23.2.9</entry> 1191 <entry>Primitive numeric input conversion</entry> 1192 <entry>Partial</entry> 1193 <entry/> 1194 </row> 1195 <row> 1196 <entry>23.3</entry> 1197 <entry>Compile-time integer sequences</entry> 1198 <entry/> 1199 <entry/> 1200 </row> 1201 <row> 1202 <entry>23.4</entry> 1203 <entry>Pairs</entry> 1204 <entry>Y</entry> 1205 <entry/> 1206 </row> 1207 <row> 1208 <entry>23.5</entry> 1209 <entry>Tuples</entry> 1210 <entry>Y</entry> 1211 <entry/> 1212 </row> 1213 <row> 1214 <entry>23.6</entry> 1215 <entry>Optional objects</entry> 1216 <entry>Y</entry> 1217 <entry/> 1218 </row> 1219 <row> 1220 <entry>23.7</entry> 1221 <entry>Variants</entry> 1222 <entry>Y</entry> 1223 <entry/> 1224 </row> 1225 <row> 1226 <entry>23.8</entry> 1227 <entry>Storage for any type</entry> 1228 <entry>Y</entry> 1229 <entry/> 1230 </row> 1231 <row> 1232 <entry>23.9</entry> 1233 <entry>Bitsets</entry> 1234 <entry>Y</entry> 1235 <entry/> 1236 </row> 1237 <row> 1238 <entry>23.10</entry> 1239 <entry>Memory</entry> 1240 <entry>Y</entry> 1241 <entry/> 1242 </row> 1243 <row> 1244 <entry>23.10.1</entry> 1245 <entry>In general</entry> 1246 <entry/> 1247 <entry/> 1248 </row> 1249 <row> 1250 <entry>23.10.2</entry> 1251 <entry>Header <code><memory></code> synopsis</entry> 1252 <entry>Y</entry> 1253 <entry/> 1254 </row> 1255 <row> 1256 <entry>23.10.3</entry> 1257 <entry>Pointer traits</entry> 1258 <entry>Y</entry> 1259 <entry/> 1260 </row> 1261 <row> 1262 <entry>23.10.4</entry> 1263 <entry>Pointer safety</entry> 1264 <entry>Y</entry> 1265 <entry/> 1266 </row> 1267 <row> 1268 <entry>23.10.5</entry> 1269 <entry>Align</entry> 1270 <entry>Y</entry> 1271 <entry/> 1272 </row> 1273 <row> 1274 <entry>23.10.6</entry> 1275 <entry>Allocator argument tag</entry> 1276 <entry>Y</entry> 1277 <entry/> 1278 </row> 1279 <row> 1280 <entry>23.10.7</entry> 1281 <entry><code>uses_allocator</code></entry> 1282 <entry>Y</entry> 1283 <entry/> 1284 </row> 1285 <row> 1286 <entry>23.10.8</entry> 1287 <entry>Allocator traits</entry> 1288 <entry>Y</entry> 1289 <entry/> 1290 </row> 1291 <row> 1292 <entry>23.10.9</entry> 1293 <entry>The default allocator</entry> 1294 <entry>Y</entry> 1295 <entry/> 1296 </row> 1297 <row> 1298 <entry>23.10.10</entry> 1299 <entry>Specialized algorithms</entry> 1300 <entry>Y</entry> 1301 <entry/> 1302 </row> 1303 <row> 1304 <entry>23.10.11</entry> 1305 <entry>C library memory allocation</entry> 1306 <entry>Y</entry> 1307 <entry/> 1308 </row> 1309 <row> 1310 <entry>23.11</entry> 1311 <entry>Smart pointers</entry> 1312 <entry/> 1313 <entry/> 1314 </row> 1315 <row> 1316 <entry>23.11.1</entry> 1317 <entry>Class template <code>unique_ptr</code></entry> 1318 <entry>Y</entry> 1319 <entry/> 1320 </row> 1321 <row> 1322 <entry>23.11.2</entry> 1323 <entry>Shared-ownership pointers</entry> 1324 <entry>Y</entry> 1325 <entry/> 1326 </row> 1327 <row> 1328 <entry>23.12</entry> 1329 <entry>Memory resources</entry> 1330 <entry/> 1331 <entry/> 1332 </row> 1333 <row> 1334 <entry>23.12.1</entry> 1335 <entry>Header <code><memory_resource></code> synopsis</entry> 1336 <entry>Y</entry> 1337 <entry/> 1338 </row> 1339 <row> 1340 <entry>23.12.2</entry> 1341 <entry>Class <code>memory_resource</code></entry> 1342 <entry>Y</entry> 1343 <entry/> 1344 </row> 1345 <row> 1346 <entry>23.12.3</entry> 1347 <entry>Class template <code>polymorphic_allocator</code></entry> 1348 <entry>Y</entry> 1349 <entry/> 1350 </row> 1351 <row> 1352 <entry>23.12.4</entry> 1353 <entry>Access to program-wide <code>memory_resource</code> objects</entry> 1354 <entry>Y</entry> 1355 <entry/> 1356 </row> 1357 <row> 1358 <entry>23.12.5</entry> 1359 <entry>Pool resource classes</entry> 1360 <entry>Y</entry> 1361 <entry/> 1362 </row> 1363 <row> 1364 <entry>23.12.6</entry> 1365 <entry>Class <code>monotonic_buffer_resource</code></entry> 1366 <entry>Y</entry> 1367 <entry/> 1368 </row> 1369 <row> 1370 <entry>23.13</entry> 1371 <entry>Class template <code>scoped_allocator_adaptor</code></entry> 1372 <entry>Y</entry> 1373 <entry/> 1374 </row> 1375 <row> 1376 <entry>23.14</entry> 1377 <entry>Function objects</entry> 1378 <entry/> 1379 <entry/> 1380 </row> 1381 <row> 1382 <entry>23.14.1</entry> 1383 <entry>Header <code><functional></code> synopsis</entry> 1384 <entry/> 1385 <entry/> 1386 </row> 1387 <row> 1388 <entry>23.14.2</entry> 1389 <entry>Definitions</entry> 1390 <entry/> 1391 <entry/> 1392 </row> 1393 <row> 1394 <entry>23.14.3</entry> 1395 <entry>Requirements</entry> 1396 <entry/> 1397 <entry/> 1398 </row> 1399 <row> 1400 <entry>23.14.4</entry> 1401 <entry>Function template <code>invoke</code></entry> 1402 <entry>Y</entry> 1403 <entry/> 1404 </row> 1405 <row> 1406 <entry>23.14.5</entry> 1407 <entry>Class template <code>reference_wrapper</code></entry> 1408 <entry>Y</entry> 1409 <entry/> 1410 </row> 1411 <row> 1412 <entry>23.14.6</entry> 1413 <entry>Arithmetic operation</entry> 1414 <entry>Y</entry> 1415 <entry/> 1416 </row> 1417 <row> 1418 <entry>23.14.7</entry> 1419 <entry>Comparisons</entry> 1420 <entry>Y</entry> 1421 <entry/> 1422 </row> 1423 <row> 1424 <entry>23.14.8</entry> 1425 <entry>Logical operations</entry> 1426 <entry>Y</entry> 1427 <entry/> 1428 </row> 1429 <row> 1430 <entry>23.14.9</entry> 1431 <entry>Bitwise operations</entry> 1432 <entry>Y</entry> 1433 <entry/> 1434 </row> 1435 <row> 1436 <entry>23.14.10</entry> 1437 <entry>Function template <code>not_fn</code></entry> 1438 <entry>Y</entry> 1439 <entry/> 1440 </row> 1441 <row> 1442 <entry>23.14.11</entry> 1443 <entry>Function object binders</entry> 1444 <entry>Y</entry> 1445 <entry/> 1446 </row> 1447 <row> 1448 <entry>23.14.12</entry> 1449 <entry>Function template <code>mem_fn</code></entry> 1450 <entry>Y</entry> 1451 <entry/> 1452 </row> 1453 <row> 1454 <entry>23.14.13</entry> 1455 <entry>Polymorphic function wrappers</entry> 1456 <entry>Y</entry> 1457 <entry/> 1458 </row> 1459 <row> 1460 <entry>23.14.14</entry> 1461 <entry>Searchers</entry> 1462 <entry>Y</entry> 1463 <entry/> 1464 </row> 1465 <row> 1466 <entry>23.14.15</entry> 1467 <entry>Class template <code>hash</code></entry> 1468 <entry>Y</entry> 1469 <entry/> 1470 </row> 1471 <row> 1472 <entry>23.15</entry> 1473 <entry>Metaprogramming and type traits</entry> 1474 <entry/> 1475 <entry/> 1476 </row> 1477 <row> 1478 <entry>23.15.1</entry> 1479 <entry>Requirements</entry> 1480 <entry/> 1481 <entry/> 1482 </row> 1483 <row> 1484 <entry>23.15.2</entry> 1485 <entry>Header <code><type_traits></code> synopsis</entry> 1486 <entry>Y</entry> 1487 <entry/> 1488 </row> 1489 <row> 1490 <entry>23.15.3</entry> 1491 <entry>Helper classes</entry> 1492 <entry>Y</entry> 1493 <entry/> 1494 </row> 1495 <row> 1496 <entry>23.15.4</entry> 1497 <entry>Unary Type Traits</entry> 1498 <entry>Y</entry> 1499 <entry/> 1500 </row> 1501 <row> 1502 <entry>23.15.5</entry> 1503 <entry>Type property queries</entry> 1504 <entry>Y</entry> 1505 <entry/> 1506 </row> 1507 <row> 1508 <entry>23.15.6</entry> 1509 <entry>Relationships between types</entry> 1510 <entry>Y</entry> 1511 <entry/> 1512 </row> 1513 <row> 1514 <entry>23.15.7</entry> 1515 <entry>Transformations between types</entry> 1516 <entry>Y</entry> 1517 <entry/> 1518 </row> 1519 <row> 1520 <entry>23.15.8</entry> 1521 <entry>Logical operator traits</entry> 1522 <entry>Y</entry> 1523 <entry/> 1524 </row> 1525 <row> 1526 <entry>23.16</entry> 1527 <entry>Compile-time rational arithmetic</entry> 1528 <entry>Y</entry> 1529 <entry/> 1530 </row> 1531 <row> 1532 <entry>23.17.1</entry> 1533 <entry>In general</entry> 1534 <entry/> 1535 <entry/> 1536 </row> 1537 <row> 1538 <entry>23.17.2</entry> 1539 <entry>Header <code><chrono></code> synopsis</entry> 1540 <entry/> 1541 <entry/> 1542 </row> 1543 <row> 1544 <entry>23.17</entry> 1545 <entry>Time utilities</entry> 1546 <entry/> 1547 <entry/> 1548 </row> 1549 <row> 1550 <entry>23.17.3</entry> 1551 <entry>Clock requirements</entry> 1552 <entry>Y</entry> 1553 <entry/> 1554 </row> 1555 <row> 1556 <entry>23.17.4</entry> 1557 <entry>Time-related traits</entry> 1558 <entry>Y</entry> 1559 <entry/> 1560 </row> 1561 <row> 1562 <entry>23.17.5</entry> 1563 <entry>Class template <code>duration</code></entry> 1564 <entry>Y</entry> 1565 <entry/> 1566 </row> 1567 <row> 1568 <entry>23.17.6</entry> 1569 <entry>Class template <code>time_point</code></entry> 1570 <entry>Y</entry> 1571 <entry/> 1572 </row> 1573 <row> 1574 <entry>23.17.7</entry> 1575 <entry>Clocks</entry> 1576 <entry>Y</entry> 1577 <entry/> 1578 </row> 1579 <row> 1580 <entry>23.17.8</entry> 1581 <entry>Header <code><ctime></code> synopsis</entry> 1582 <entry>Y</entry> 1583 <entry/> 1584 </row> 1585 <row> 1586 <entry>23.18</entry> 1587 <entry>Class <code>type_index</code></entry> 1588 <entry>Y</entry> 1589 <entry/> 1590 </row> 1591 <row> 1592 <entry>23.19</entry> 1593 <entry>Execution policies</entry> 1594 <entry/> 1595 <entry/> 1596 </row> 1597 <row> 1598 <entry>23.19.1</entry> 1599 <entry>In general</entry> 1600 <entry/> 1601 <entry/> 1602 </row> 1603 <row> 1604 <entry>23.19.2</entry> 1605 <entry>Header <code><execution></code> synopsis</entry> 1606 <entry/> 1607 <entry/> 1608 </row> 1609 <row> 1610 <entry>23.19.3</entry> 1611 <entry>Execution policy type trait</entry> 1612 <entry>Y</entry> 1613 <entry/> 1614 </row> 1615 <row> 1616 <entry>23.19.4</entry> 1617 <entry>Sequenced execution policy</entry> 1618 <entry>Y</entry> 1619 <entry/> 1620 </row> 1621 <row> 1622 <entry>23.19.5</entry> 1623 <entry>Parallel execution policy</entry> 1624 <entry>Y</entry> 1625 <entry/> 1626 </row> 1627 <row> 1628 <entry>23.19.6</entry> 1629 <entry>Parallel and unsequenced execution policy</entry> 1630 <entry>Y</entry> 1631 <entry/> 1632 </row> 1633 <row> 1634 <entry>23.19.7</entry> 1635 <entry>Execution policy objects</entry> 1636 <entry>Y</entry> 1637 <entry/> 1638 </row> 1639 <row> 1640 <entry> 1641 <emphasis>24</emphasis> 1642 </entry> 1643 <entry namest="c2" nameend="c4" align="left"> 1644 <emphasis>Strings</emphasis> 1645 </entry> 1646 </row> 1647 <row> 1648 <entry>24.1</entry> 1649 <entry>General</entry> 1650 <entry/> 1651 <entry/> 1652 </row> 1653 <row> 1654 <entry>24.2</entry> 1655 <entry>Character traits</entry> 1656 <entry>Y</entry> 1657 <entry/> 1658 </row> 1659 <row> 1660 <entry>24.3</entry> 1661 <entry>String classes</entry> 1662 <entry>Y</entry> 1663 <entry/> 1664 </row> 1665 <row> 1666 <entry>24.4</entry> 1667 <entry>String view classes</entry> 1668 <entry>Y</entry> 1669 <entry/> 1670 </row> 1671 <row> 1672 <entry>24.4.1</entry> 1673 <entry>Header <code><string_view></code> synopsis</entry> 1674 <entry>Y</entry> 1675 <entry/> 1676 </row> 1677 <row> 1678 <entry>24.4.2</entry> 1679 <entry>Class template <code>basic_string_view</code></entry> 1680 <entry>Y</entry> 1681 <entry/> 1682 </row> 1683 <row> 1684 <entry>24.4.3</entry> 1685 <entry>Non-member comparison functions</entry> 1686 <entry>Y</entry> 1687 <entry/> 1688 </row> 1689 <row> 1690 <entry>24.4.4</entry> 1691 <entry>Inserters and extractors</entry> 1692 <entry>Y</entry> 1693 <entry/> 1694 </row> 1695 <row> 1696 <entry>24.4.5</entry> 1697 <entry>Hash support</entry> 1698 <entry>Y</entry> 1699 <entry/> 1700 </row> 1701 <row> 1702 <entry>24.4.6</entry> 1703 <entry>Suffix for <code>basic_string_view</code> literals</entry> 1704 <entry>Y</entry> 1705 <entry/> 1706 </row> 1707 <row> 1708 <?dbhtml bgcolor="#B0B0B0" ?> 1709 <entry>24.5</entry> 1710 <entry>Null-terminated sequence utilities</entry> 1711 <entry>Partial</entry> 1712 <entry>C library dependency. </entry> 1713 </row> 1714 <row> 1715 <entry> 1716 <emphasis>25</emphasis> 1717 </entry> 1718 <entry namest="c2" nameend="c4" align="left"> 1719 <emphasis>Localization</emphasis> 1720 </entry> 1721 </row> 1722 <row> 1723 <entry>25.1</entry> 1724 <entry>General</entry> 1725 <entry>Y</entry> 1726 <entry/> 1727 </row> 1728 <row> 1729 <entry>25.2</entry> 1730 <entry>Header <code><locale></code> synopsis</entry> 1731 <entry>Y</entry> 1732 <entry/> 1733 </row> 1734 <row> 1735 <entry>25.3</entry> 1736 <entry>Locales</entry> 1737 <entry>Y</entry> 1738 <entry/> 1739 </row> 1740 <row> 1741 <entry>25.4</entry> 1742 <entry>Standard <code>locale</code> categories</entry> 1743 <entry>Y</entry> 1744 <entry/> 1745 </row> 1746 <row> 1747 <entry>25.5</entry> 1748 <entry>C Library Locales</entry> 1749 <entry>Y</entry> 1750 <entry/> 1751 </row> 1752 <row> 1753 <entry> 1754 <emphasis>26</emphasis> 1755 </entry> 1756 <entry namest="c2" nameend="c4" align="left"> 1757 <emphasis>Containers</emphasis> 1758 </entry> 1759 </row> 1760 <row> 1761 <entry>26.1</entry> 1762 <entry>General</entry> 1763 <entry/> 1764 <entry/> 1765 </row> 1766 <row> 1767 <entry>26.2</entry> 1768 <entry>Container requirements</entry> 1769 <entry>Y</entry> 1770 <entry/> 1771 </row> 1772 <row> 1773 <entry>26.3</entry> 1774 <entry>Sequence containers</entry> 1775 <entry>Y</entry> 1776 <entry/> 1777 </row> 1778 <row> 1779 <entry>26.4</entry> 1780 <entry>Associative containers</entry> 1781 <entry>Y</entry> 1782 <entry/> 1783 </row> 1784 <row> 1785 <entry>26.5</entry> 1786 <entry>Unordered associative containers</entry> 1787 <entry>Y</entry> 1788 <entry/> 1789 </row> 1790 <row> 1791 <entry>26.6</entry> 1792 <entry>Container adaptors</entry> 1793 <entry>Y</entry> 1794 <entry/> 1795 </row> 1796 <row> 1797 <entry> 1798 <emphasis>27</emphasis> 1799 </entry> 1800 <entry namest="c2" nameend="c4" align="left"> 1801 <emphasis>Iterators</emphasis> 1802 </entry> 1803 </row> 1804 <row> 1805 <entry>27.1</entry> 1806 <entry>General</entry> 1807 <entry>Y</entry> 1808 <entry/> 1809 </row> 1810 <row> 1811 <entry>27.2</entry> 1812 <entry>Iterator requirements</entry> 1813 <entry>Y</entry> 1814 <entry/> 1815 </row> 1816 <row> 1817 <entry>27.3</entry> 1818 <entry>Header <code><iterator></code> synopsis</entry> 1819 <entry>Y</entry> 1820 <entry/> 1821 </row> 1822 <row> 1823 <entry>27.4</entry> 1824 <entry>Iterator primitives</entry> 1825 <entry>Y</entry> 1826 <entry/> 1827 </row> 1828 <row> 1829 <entry>27.5</entry> 1830 <entry>Iterator adaptors</entry> 1831 <entry>Y</entry> 1832 <entry/> 1833 </row> 1834 <row> 1835 <entry>27.6</entry> 1836 <entry>Stream iterators</entry> 1837 <entry>Y</entry> 1838 <entry/> 1839 </row> 1840 <row> 1841 <entry>27.7</entry> 1842 <entry>Range access</entry> 1843 <entry>Y</entry> 1844 <entry/> 1845 </row> 1846 <row> 1847 <entry>27.8</entry> 1848 <entry>Container access</entry> 1849 <entry>Y</entry> 1850 <entry/> 1851 </row> 1852 <row> 1853 <entry> 1854 <emphasis>28</emphasis> 1855 </entry> 1856 <entry namest="c2" nameend="c4" align="left"> 1857 <emphasis>Algorithms</emphasis> 1858 </entry> 1859 </row> 1860 <row> 1861 <entry>28.1</entry> 1862 <entry>General</entry> 1863 <entry/> 1864 <entry/> 1865 </row> 1866 <row> 1867 <entry>28.2</entry> 1868 <entry>Header <code><algorithm></code> synopsis</entry> 1869 <entry/> 1870 <entry/> 1871 </row> 1872 <row> 1873 <entry>28.3</entry> 1874 <entry>Algorithms requirements</entry> 1875 <entry/> 1876 <entry/> 1877 </row> 1878 <row> 1879 <entry>28.4</entry> 1880 <entry>Parallel algorithms</entry> 1881 <entry/> 1882 <entry>Using <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="https://github.com/llvm/llvm-project/tree/main/pstl">PSTL</link></entry> 1883 </row> 1884 <row> 1885 <entry>28.5</entry> 1886 <entry>Non-modifying sequence operations</entry> 1887 <entry>Y</entry> 1888 <entry/> 1889 </row> 1890 <row> 1891 <entry>28.6</entry> 1892 <entry>Mutating sequence operations</entry> 1893 <entry>Y</entry> 1894 <entry/> 1895 </row> 1896 <row> 1897 <entry>28.7</entry> 1898 <entry>Sorting and related operations</entry> 1899 <entry>Y</entry> 1900 <entry/> 1901 </row> 1902 <row> 1903 <entry>28.8</entry> 1904 <entry>C library algorithms</entry> 1905 <entry>Y</entry> 1906 <entry/> 1907 </row> 1908 <row> 1909 <entry> 1910 <emphasis>29</emphasis> 1911 </entry> 1912 <entry namest="c2" nameend="c4" align="left"> 1913 <emphasis>Numerics</emphasis> 1914 </entry> 1915 </row> 1916 <row> 1917 <entry>29.1</entry> 1918 <entry>General</entry> 1919 <entry/> 1920 <entry/> 1921 </row> 1922 <row> 1923 <entry>29.2</entry> 1924 <entry>Definitions</entry> 1925 <entry/> 1926 <entry/> 1927 </row> 1928 <row> 1929 <entry>29.3</entry> 1930 <entry>Numeric type requirements</entry> 1931 <entry>Y</entry> 1932 <entry/> 1933 </row> 1934 <row> 1935 <entry>29.4</entry> 1936 <entry>The floating-point environment</entry> 1937 <entry>Y</entry> 1938 <entry/> 1939 </row> 1940 <row> 1941 <entry>29.5</entry> 1942 <entry>Complex numbers</entry> 1943 <entry>Y</entry> 1944 <entry/> 1945 </row> 1946 <row> 1947 <entry>29.6</entry> 1948 <entry>Random number generation</entry> 1949 <entry>Y</entry> 1950 <entry/> 1951 </row> 1952 <row> 1953 <entry>29.7</entry> 1954 <entry>Numeric arrays</entry> 1955 <entry>Y</entry> 1956 <entry/> 1957 </row> 1958 <row> 1959 <entry>29.8</entry> 1960 <entry>Generalized numeric operations</entry> 1961 <entry/> 1962 <entry/> 1963 </row> 1964 <row> 1965 <entry>29.8.1</entry> 1966 <entry>Header <code><numeric></code> synopsis</entry> 1967 <entry/> 1968 <entry/> 1969 </row> 1970 <row> 1971 <entry>29.8.2</entry> 1972 <entry>Accumulate</entry> 1973 <entry>Y</entry> 1974 <entry/> 1975 </row> 1976 <row> 1977 <entry>29.8.3</entry> 1978 <entry>Reduce</entry> 1979 <entry>Y</entry> 1980 <entry/> 1981 </row> 1982 <row> 1983 <entry>29.8.4</entry> 1984 <entry>Inner product</entry> 1985 <entry>Y</entry> 1986 <entry/> 1987 </row> 1988 <row> 1989 <entry>29.8.5</entry> 1990 <entry>Transform reduce</entry> 1991 <entry>Y</entry> 1992 <entry/> 1993 </row> 1994 <row> 1995 <entry>29.8.6</entry> 1996 <entry>Partial sum</entry> 1997 <entry>Y</entry> 1998 <entry/> 1999 </row> 2000 <row> 2001 <entry>29.8.7</entry> 2002 <entry>Exclusive scan</entry> 2003 <entry>Y</entry> 2004 <entry/> 2005 </row> 2006 <row> 2007 <entry>29.8.8</entry> 2008 <entry>Inclusive scan</entry> 2009 <entry>Y</entry> 2010 <entry/> 2011 </row> 2012 <row> 2013 <entry>29.8.9</entry> 2014 <entry>Transform exclusive scan</entry> 2015 <entry>Y</entry> 2016 <entry/> 2017 </row> 2018 <row> 2019 <entry>29.8.10</entry> 2020 <entry>Transform inclusive scan</entry> 2021 <entry>Y</entry> 2022 <entry/> 2023 </row> 2024 <row> 2025 <entry>29.8.11</entry> 2026 <entry>Adjacent difference</entry> 2027 <entry>Y</entry> 2028 <entry/> 2029 </row> 2030 <row> 2031 <entry>29.8.12</entry> 2032 <entry>Iota</entry> 2033 <entry>Y</entry> 2034 <entry/> 2035 </row> 2036 <row> 2037 <entry>29.8.13</entry> 2038 <entry>Greatest common divisor</entry> 2039 <entry>Y</entry> 2040 <entry/> 2041 </row> 2042 <row> 2043 <entry>29.8.14</entry> 2044 <entry>Least common multiple</entry> 2045 <entry>Y</entry> 2046 <entry/> 2047 </row> 2048 <row> 2049 <entry>29.9</entry> 2050 <entry>Mathematical functions for floating-point types</entry> 2051 <entry/> 2052 <entry/> 2053 </row> 2054 <row> 2055 <entry>29.9.1</entry> 2056 <entry>Header <code><cmath></code> synopsis</entry> 2057 <entry/> 2058 <entry/> 2059 </row> 2060 <row> 2061 <entry>29.9.2</entry> 2062 <entry>Absolute values</entry> 2063 <entry>Y</entry> 2064 <entry/> 2065 </row> 2066 <row> 2067 <entry>29.9.3</entry> 2068 <entry>Three-dimensional hypotenuse</entry> 2069 <entry>Y</entry> 2070 <entry/> 2071 </row> 2072 <row> 2073 <entry>29.9.4</entry> 2074 <entry>Classification / comparison functions</entry> 2075 <entry>Y</entry> 2076 <entry/> 2077 </row> 2078 <row> 2079 <entry>29.9.5</entry> 2080 <entry>Mathematical special functions</entry> 2081 <entry>Y</entry> 2082 <entry/> 2083 </row> 2084 <row> 2085 <entry> 2086 <emphasis>30</emphasis> 2087 </entry> 2088 <entry namest="c2" nameend="c4" align="left"> 2089 <emphasis>Input/output library</emphasis> 2090 </entry> 2091 </row> 2092 <row> 2093 <entry>30.1</entry> 2094 <entry>General</entry> 2095 <entry>Y</entry> 2096 <entry/> 2097 </row> 2098 <row> 2099 <entry>30.2</entry> 2100 <entry>Iostreams requirements</entry> 2101 <entry>Y</entry> 2102 <entry/> 2103 </row> 2104 <row> 2105 <entry>30.2.1</entry> 2106 <entry>Imbue Limitations</entry> 2107 <entry>Y</entry> 2108 <entry/> 2109 </row> 2110 <row> 2111 <entry>30.2.2</entry> 2112 <entry>Positioning Type Limitations</entry> 2113 <entry>Y</entry> 2114 <entry/> 2115 </row> 2116 <row> 2117 <?dbhtml bgcolor="#B0B0B0" ?> 2118 <entry>30.2.3</entry> 2119 <entry>Thread safety</entry> 2120 <entry>Partial</entry> 2121 <entry/> 2122 </row> 2123 <row> 2124 <entry>30.3</entry> 2125 <entry>Forward declarations</entry> 2126 <entry>Y</entry> 2127 <entry/> 2128 </row> 2129 <row> 2130 <entry>30.4</entry> 2131 <entry>Standard iostream objects</entry> 2132 <entry>Y</entry> 2133 <entry/> 2134 </row> 2135 <row> 2136 <entry>30.5</entry> 2137 <entry>Iostreams base classes</entry> 2138 <entry>Y</entry> 2139 <entry/> 2140 </row> 2141 <row> 2142 <entry>30.6</entry> 2143 <entry>Stream buffers</entry> 2144 <entry>Y</entry> 2145 <entry/> 2146 </row> 2147 <row> 2148 <entry>30.7</entry> 2149 <entry>Formatting and manipulators</entry> 2150 <entry>Y</entry> 2151 <entry/> 2152 </row> 2153 <row> 2154 <entry>30.8</entry> 2155 <entry>String-based streams</entry> 2156 <entry>Y</entry> 2157 <entry/> 2158 </row> 2159 <row> 2160 <entry>30.9</entry> 2161 <entry>File-based streams</entry> 2162 <entry>Y</entry> 2163 <entry/> 2164 </row> 2165 <row> 2166 <entry>30.10</entry> 2167 <entry>File systemss</entry> 2168 <entry>Y</entry> 2169 <entry/> 2170 </row> 2171 <row> 2172 <entry>30.11</entry> 2173 <entry>C library files</entry> 2174 <entry>Y</entry> 2175 <entry/> 2176 </row> 2177 <row> 2178 <entry> 2179 <emphasis>31</emphasis> 2180 </entry> 2181 <entry namest="c2" nameend="c4" align="left"> 2182 <emphasis>Regular expressions</emphasis> 2183 </entry> 2184 </row> 2185 <row> 2186 <entry>31.1</entry> 2187 <entry>General</entry> 2188 <entry>Y</entry> 2189 <entry/> 2190 </row> 2191 <row> 2192 <entry>31.2</entry> 2193 <entry>Definitions</entry> 2194 <entry>Y</entry> 2195 <entry/> 2196 </row> 2197 <row> 2198 <entry>31.3</entry> 2199 <entry>Requirements</entry> 2200 <entry>Y</entry> 2201 <entry/> 2202 </row> 2203 <row> 2204 <entry>31.4</entry> 2205 <entry>Header <code><regex></code> synopsis</entry> 2206 <entry>Y</entry> 2207 <entry/> 2208 </row> 2209 <row> 2210 <entry>31.5</entry> 2211 <entry>Namespace <code>std::regex_constants</code></entry> 2212 <entry>Y</entry> 2213 <entry/> 2214 </row> 2215 <row> 2216 <entry>31.6</entry> 2217 <entry>Class <code>regex_error</code></entry> 2218 <entry>Y</entry> 2219 <entry/> 2220 </row> 2221 <row> 2222 <?dbhtml bgcolor="#B0B0B0" ?> 2223 <entry>31.7</entry> 2224 <entry>Class template <code>regex_traits</code></entry> 2225 <entry>Partial</entry> 2226 <entry><code>transform_primary</code> is not correctly implemented</entry> 2227 </row> 2228 <row> 2229 <entry>31.8</entry> 2230 <entry>Class template <code>basic_regex</code></entry> 2231 <entry>Y</entry> 2232 <entry/> 2233 </row> 2234 <row> 2235 <entry>31.9</entry> 2236 <entry>Class template <code>sub_match</code></entry> 2237 <entry>Y</entry> 2238 <entry/> 2239 </row> 2240 <row> 2241 <entry>31.10</entry> 2242 <entry>Class template <code>match_results</code></entry> 2243 <entry>Y</entry> 2244 <entry/> 2245 </row> 2246 <row> 2247 <entry>31.11</entry> 2248 <entry>Regular expression algorithms</entry> 2249 <entry>Y</entry> 2250 <entry/> 2251 </row> 2252 <row> 2253 <entry>31.12</entry> 2254 <entry>Regular expression Iterators</entry> 2255 <entry>Y</entry> 2256 <entry/> 2257 </row> 2258 <row> 2259 <entry>31.13</entry> 2260 <entry>Modified ECMAScript regular expression grammar</entry> 2261 <entry>Y</entry> 2262 <entry/> 2263 </row> 2264 <row> 2265 <entry> 2266 <emphasis>32</emphasis> 2267 </entry> 2268 <entry namest="c2" nameend="c4" align="left"> 2269 <emphasis>Atomic operations</emphasis> 2270 </entry> 2271 </row> 2272 <row> 2273 <entry>32.1</entry> 2274 <entry>General</entry> 2275 <entry>Y</entry> 2276 <entry/> 2277 </row> 2278 <row> 2279 <entry>32.2</entry> 2280 <entry>Header <code><atomic></code> synopsis</entry> 2281 <entry>Y</entry> 2282 <entry/> 2283 </row> 2284 <row> 2285 <entry>32.3</entry> 2286 <entry>Type aliases</entry> 2287 <entry>Y</entry> 2288 <entry/> 2289 </row> 2290 <row> 2291 <entry>32.4</entry> 2292 <entry>Order and consistency</entry> 2293 <entry>Y</entry> 2294 <entry/> 2295 </row> 2296 <row> 2297 <entry>32.5</entry> 2298 <entry>Lock-free property</entry> 2299 <entry>Y</entry> 2300 <entry/> 2301 </row> 2302 <row> 2303 <entry>32.6</entry> 2304 <entry>Class template <code><atomic></code></entry> 2305 <entry>Y</entry> 2306 <entry/> 2307 </row> 2308 <row> 2309 <entry>32.7</entry> 2310 <entry>Non-member functions</entry> 2311 <entry>Y</entry> 2312 <entry/> 2313 </row> 2314 <row> 2315 <entry>32.8</entry> 2316 <entry>Flag Type and operations</entry> 2317 <entry>Y</entry> 2318 <entry/> 2319 </row> 2320 <row> 2321 <entry>32.9</entry> 2322 <entry>Fences</entry> 2323 <entry>Y</entry> 2324 <entry/> 2325 </row> 2326 <row> 2327 <entry> 2328 <emphasis>33</emphasis> 2329 </entry> 2330 <entry namest="c2" nameend="c4" align="left"> 2331 <emphasis>Thread support</emphasis> 2332 </entry> 2333 </row> 2334 <row> 2335 <entry>33.1</entry> 2336 <entry>General</entry> 2337 <entry>Y</entry> 2338 <entry/> 2339 </row> 2340 <row> 2341 <entry>33.2</entry> 2342 <entry>Requirements</entry> 2343 <entry>Y</entry> 2344 <entry/> 2345 </row> 2346 <row> 2347 <entry>33.3</entry> 2348 <entry>Threads</entry> 2349 <entry/> 2350 <entry/> 2351 </row> 2352 <row> 2353 <entry>33.3.1</entry> 2354 <entry>Header <code>thread</code> synopsis</entry> 2355 <entry/> 2356 <entry/> 2357 </row> 2358 <row> 2359 <entry>33.3.2</entry> 2360 <entry>Class <code>thread</code></entry> 2361 <entry>Y</entry> 2362 <entry/> 2363 </row> 2364 <row> 2365 <?dbhtml bgcolor="#B0B0B0" ?> 2366 <entry>33.3.2.1</entry> 2367 <entry>Class <code>thread</code></entry> 2368 <entry>Partial</entry> 2369 <entry><code>thread::id</code> comparisons not well-defined</entry> 2370 </row> 2371 <row> 2372 <entry>33.3.3</entry> 2373 <entry>Namespace <code>this_thread</code></entry> 2374 <entry>Y</entry> 2375 <entry/> 2376 </row> 2377 <row> 2378 <entry>33.4</entry> 2379 <entry>Mutual exclusion</entry> 2380 <entry/> 2381 <entry/> 2382 </row> 2383 <row> 2384 <entry>33.4.3</entry> 2385 <entry>Mutex requirements</entry> 2386 <entry/> 2387 <entry/> 2388 </row> 2389 <row> 2390 <entry>33.4.3.1</entry> 2391 <entry>In general</entry> 2392 <entry/> 2393 <entry/> 2394 </row> 2395 <row> 2396 <entry>33.4.3.2</entry> 2397 <entry>Mutex types</entry> 2398 <entry/> 2399 <entry/> 2400 </row> 2401 <row> 2402 <entry>33.4.3.2.1</entry> 2403 <entry>Class <code>mutex</code></entry> 2404 <entry>Y</entry> 2405 <entry/> 2406 </row> 2407 <row> 2408 <entry>33.4.3.2.2</entry> 2409 <entry>Class <code>recursive_mutex</code></entry> 2410 <entry>Y</entry> 2411 <entry/> 2412 </row> 2413 <row> 2414 <entry>33.4.3.3</entry> 2415 <entry>Timed mutex types</entry> 2416 <entry/> 2417 <entry/> 2418 </row> 2419 <row> 2420 <entry>33.4.3.3.1</entry> 2421 <entry>Class <code>timed_mutex</code></entry> 2422 <entry>Y</entry> 2423 <entry/> 2424 </row> 2425 <row> 2426 <entry>33.4.3.3.2</entry> 2427 <entry>Class <code>recursive_timed_mutex</code></entry> 2428 <entry>Y</entry> 2429 <entry/> 2430 </row> 2431 <row> 2432 <entry>33.4.3.4</entry> 2433 <entry>Shared mutex types</entry> 2434 <entry/> 2435 <entry/> 2436 </row> 2437 <row> 2438 <entry>33.4.3.4.1</entry> 2439 <entry>Class <code>shared_mutex</code></entry> 2440 <entry>Y</entry> 2441 <entry/> 2442 </row> 2443 <row> 2444 <entry>33.4.3.5</entry> 2445 <entry>Shared timed mutex types</entry> 2446 <entry/> 2447 <entry/> 2448 </row> 2449 <row> 2450 <entry>33.4.3.5.1</entry> 2451 <entry>Class <code>shared_timed_mutex</code></entry> 2452 <entry>Y</entry> 2453 <entry/> 2454 </row> 2455 <row> 2456 <entry>33.4.4</entry> 2457 <entry>Locks</entry> 2458 <entry/> 2459 <entry/> 2460 </row> 2461 <row> 2462 <entry>33.4.4.1</entry> 2463 <entry>Class template <code>lock_guard</code></entry> 2464 <entry>Y</entry> 2465 <entry/> 2466 </row> 2467 <row> 2468 <entry>33.4.4.2</entry> 2469 <entry>Class template <code>scoped_guard</code></entry> 2470 <entry>Y</entry> 2471 <entry/> 2472 </row> 2473 <row> 2474 <entry>33.4.4.3</entry> 2475 <entry>Class template <code>unique_lock</code></entry> 2476 <entry>Y</entry> 2477 <entry/> 2478 </row> 2479 <row> 2480 <entry>33.4.4.4</entry> 2481 <entry>Class template <code>shared_lock</code></entry> 2482 <entry>Y</entry> 2483 <entry/> 2484 </row> 2485 <row> 2486 <entry>33.4.5</entry> 2487 <entry>Generic locking algorithms</entry> 2488 <entry>Y</entry> 2489 <entry/> 2490 </row> 2491 <row> 2492 <entry>33.4.6</entry> 2493 <entry>Call once</entry> 2494 <entry/> 2495 <entry/> 2496 </row> 2497 <row> 2498 <entry>33.4.6.1</entry> 2499 <entry>Struct <code>once_flag</code></entry> 2500 <entry>Y</entry> 2501 <entry/> 2502 </row> 2503 <row> 2504 <?dbhtml bgcolor="#B0B0B0" ?> 2505 <entry>33.4.6.2</entry> 2506 <entry>Function <code>call_once</code></entry> 2507 <entry>Y</entry> 2508 <entry>Exception support is broken on non-Linux targets. 2509 See <link xmlns:xlink="http://www.w3.org/1999/xlink" 2510 xlink:href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66146">PR 2511 66146</link>. 2512 </entry> 2513 </row> 2514 <row> 2515 <entry>33.5</entry> 2516 <entry>Condition variables</entry> 2517 <entry>Y</entry> 2518 <entry/> 2519 </row> 2520 <row> 2521 <entry>33.5.1</entry> 2522 <entry>Class <code>condition_variable</code></entry> 2523 <entry>Y</entry> 2524 <entry/> 2525 </row> 2526 <row> 2527 <entry>33.5.2</entry> 2528 <entry>Class <code>condition_variable_any</code></entry> 2529 <entry>Y</entry> 2530 <entry/> 2531 </row> 2532 <row> 2533 <entry>33.6</entry> 2534 <entry>Futures</entry> 2535 <entry/> 2536 <entry/> 2537 </row> 2538 <row> 2539 <entry>33.6.1</entry> 2540 <entry>Overview</entry> 2541 <entry/> 2542 <entry/> 2543 </row> 2544 <row> 2545 <entry>33.6.2</entry> 2546 <entry>Header <code><future></code></entry> 2547 <entry/> 2548 <entry/> 2549 </row> 2550 <row> 2551 <entry>33.6.3</entry> 2552 <entry>Error handling</entry> 2553 <entry>Y</entry> 2554 <entry/> 2555 </row> 2556 <row> 2557 <entry>33.6.4</entry> 2558 <entry>Class <code>future_error</code></entry> 2559 <entry>Y</entry> 2560 <entry/> 2561 </row> 2562 <row> 2563 <entry>33.6.5</entry> 2564 <entry>Shared state</entry> 2565 <entry>Y</entry> 2566 <entry/> 2567 </row> 2568 <row> 2569 <entry>33.6.6</entry> 2570 <entry>Class template <code>promise</code></entry> 2571 <entry>Y</entry> 2572 <entry/> 2573 </row> 2574 <row> 2575 <entry>33.6.7</entry> 2576 <entry>Class template <code>future</code></entry> 2577 <entry>Y</entry> 2578 <entry/> 2579 </row> 2580 <row> 2581 <entry>33.6.8</entry> 2582 <entry>Class template <code>shared_future</code></entry> 2583 <entry>Y</entry> 2584 <entry/> 2585 </row> 2586 <row> 2587 <entry>33.6.9</entry> 2588 <entry>Function template <code>async</code></entry> 2589 <entry>Y</entry> 2590 <entry/> 2591 </row> 2592 <row> 2593 <entry>33.6.10</entry> 2594 <entry>Class template <code>packaged_task</code></entry> 2595 <entry>Y</entry> 2596 <entry/> 2597 </row> 2598 <row> 2599 <entry> 2600 <emphasis>Appendix D</emphasis> 2601 </entry> 2602 <entry namest="c2" nameend="c4" align="left"> 2603 <emphasis>Compatibility features</emphasis> 2604 </entry> 2605 </row> 2606 <row> 2607 <entry>D.4</entry> 2608 <entry>C++ standard library headers</entry> 2609 <entry>Y</entry> 2610 <entry/> 2611 </row> 2612 <row> 2613 <entry>D.4.1</entry> 2614 <entry>Header <code><ccomplex></code> synopsis</entry> 2615 <entry>Y</entry> 2616 <entry/> 2617 </row> 2618 <row> 2619 <entry>D.4.1</entry> 2620 <entry>Header <code><cstdalign></code> synopsis</entry> 2621 <entry>Y</entry> 2622 <entry/> 2623 </row> 2624 <row> 2625 <entry>D.4.1</entry> 2626 <entry>Header <code><cstdbool></code> synopsis</entry> 2627 <entry>Y</entry> 2628 <entry/> 2629 </row> 2630 <row> 2631 <entry>D.4.1</entry> 2632 <entry>Header <code><ctgmath></code> synopsis</entry> 2633 <entry>Y</entry> 2634 <entry/> 2635 </row> 2636 <row> 2637 <entry>D.5</entry> 2638 <entry>C standard library headers</entry> 2639 <entry>Y</entry> 2640 <entry/> 2641 </row> 2642 <row> 2643 <entry>D.6</entry> 2644 <entry><code>char*</code> streams</entry> 2645 <entry>Y</entry> 2646 <entry/> 2647 </row> 2648 <row> 2649 <entry>D.7</entry> 2650 <entry><code>uncaught_exception</code></entry> 2651 <entry>Y</entry> 2652 <entry/> 2653 </row> 2654 <row> 2655 <entry>D.8</entry> 2656 <entry>Old adaptable function bindings</entry> 2657 <entry>Y</entry> 2658 <entry/> 2659 </row> 2660 <row> 2661 <entry>D.9</entry> 2662 <entry>The default allocator</entry> 2663 <entry>Y</entry> 2664 <entry/> 2665 </row> 2666 <row> 2667 <entry>D.10</entry> 2668 <entry>Raw storage iterator</entry> 2669 <entry>Y</entry> 2670 <entry/> 2671 </row> 2672 <row> 2673 <entry>D.11</entry> 2674 <entry>Temporary buffers</entry> 2675 <entry>Y</entry> 2676 <entry/> 2677 </row> 2678 <row> 2679 <entry>D.12</entry> 2680 <entry>Deprecated type traits</entry> 2681 <entry>Y</entry> 2682 <entry/> 2683 </row> 2684 <row> 2685 <entry>D.13</entry> 2686 <entry>Deprecated iterator primitives</entry> 2687 <entry>Y</entry> 2688 <entry/> 2689 </row> 2690 <row> 2691 <entry>D.14</entry> 2692 <entry>Deprecated <code>shared_ptr</code> observers</entry> 2693 <entry>Y</entry> 2694 <entry/> 2695 </row> 2696 <row> 2697 <entry>D.15</entry> 2698 <entry>Deprecated standard code conversion facets</entry> 2699 <entry>Y</entry> 2700 <entry/> 2701 </row> 2702 <row> 2703 <entry>D.16</entry> 2704 <entry>Deprecated convenience conversion interfaces</entry> 2705 <entry>Y</entry> 2706 <entry/> 2707 </row> 2708 2709 </tbody> 2710</tgroup> 2711</table> 2712 2713<table frame="all" xml:id="table.cxx17_ts_status"> 2714<title>C++ Technical Specifications Implementation Status</title> 2715 2716<tgroup cols="4" align="left" colsep="0" rowsep="1"> 2717<colspec colname="c1"/> 2718<colspec colname="c2"/> 2719<colspec colname="c3"/> 2720<colspec colname="c4"/> 2721 <thead> 2722 <row> 2723 <entry>Paper</entry> 2724 <entry>Title</entry> 2725 <entry>Status</entry> 2726 <entry>Comments</entry> 2727 </row> 2728 </thead> 2729 2730 <tbody> 2731 2732 <row> 2733 <entry> 2734 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4076.html"> 2735 N4076 2736 </link> 2737 </entry> 2738 <entry>A generalized callable negator</entry> 2739 <entry>Y</entry> 2740 <entry>Library Fundamentals 2 TS</entry> 2741 </row> 2742 2743 <row> 2744 <entry> 2745 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4273.htm"> 2746 N4273 2747 </link> 2748 </entry> 2749 <entry>Uniform Container Erasure</entry> 2750 <entry>Y</entry> 2751 <entry>Library Fundamentals 2 TS</entry> 2752 </row> 2753 2754 <row> 2755 <entry> 2756 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4061.pdf"> 2757 N4061 2758 </link> 2759 </entry> 2760 <entry>Greatest Common Divisor and Least Common Multiple</entry> 2761 <entry>Y</entry> 2762 <entry>Library Fundamentals 2 TS</entry> 2763 </row> 2764 2765 <row> 2766 <entry> 2767 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4066.htm"> 2768 N4066 2769 </link> 2770 </entry> 2771 <entry>Delimited iterators</entry> 2772 <entry>Y</entry> 2773 <entry>Library Fundamentals 2 TS</entry> 2774 </row> 2775 2776 <row> 2777 <entry> 2778 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4282.pdf"> 2779 N4282 2780 </link> 2781 </entry> 2782 <entry>The World's Dumbest Smart Pointer</entry> 2783 <entry>Y</entry> 2784 <entry>Library Fundamentals 2 TS</entry> 2785 </row> 2786 2787 2788 <row> 2789 <entry> 2790 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4388.html"> 2791 N4388 2792 </link> 2793 </entry> 2794 <entry>Const-Propagating Wrapper</entry> 2795 <entry>Y</entry> 2796 <entry>Library Fundamentals 2 TS</entry> 2797 </row> 2798 2799 <row> 2800 <entry> 2801 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4391.html"> 2802 N4391 2803 </link> 2804 </entry> 2805 <entry> <code>make_array</code>, revision 4 </entry> 2806 <entry>Y</entry> 2807 <entry>Library Fundamentals 2 TS</entry> 2808 </row> 2809 2810 <row> 2811 <entry> 2812 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4502.pdf"> 2813 N4502 2814 </link> 2815 </entry> 2816 <entry> Support for the C++ Detection Idiom, V2 </entry> 2817 <entry>Y</entry> 2818 <entry>Library Fundamentals 2 TS</entry> 2819 </row> 2820 2821 <row> 2822 <entry> 2823 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4519.pdf"> 2824 N4519 2825 </link> 2826 </entry> 2827 <entry> Source-Code Information Capture </entry> 2828 <entry>Y</entry> 2829 <entry>Library Fundamentals 2 TS</entry> 2830 </row> 2831 2832 <row> 2833 <?dbhtml bgcolor="#C8B0B0" ?> 2834 <entry> 2835 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4521.html"> 2836 N4521 2837 </link> 2838 </entry> 2839 <entry> Merge Fundamentals V1 into V2 </entry> 2840 <entry> 2841 N (components from V1 are still in namespace 2842 <code>fundamentals_v1</code>) 2843 </entry> 2844 <entry>Library Fundamentals 2 TS</entry> 2845 </row> 2846 2847 <row> 2848 <entry> 2849 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://open-std.org/JTC1/SC22/WG21/docs/papers/2015/p0013r1.html"> 2850 P0013R1 2851 </link> 2852 </entry> 2853 <entry>Logical Operator Type Traits (revision 1)</entry> 2854 <entry>Y</entry> 2855 <entry>Library Fundamentals 2 TS</entry> 2856 </row> 2857 2858 <row> 2859 <entry> 2860 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4531.html"> 2861 N4531 2862 </link> 2863 </entry> 2864 <entry>std::rand replacement, revision 3</entry> 2865 <entry>Y</entry> 2866 <entry>Library Fundamentals 2 TS</entry> 2867 </row> 2868 2869 <row> 2870 <entry> 2871 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0214r9.pdf"> 2872 P0214R9 2873 </link> 2874 </entry> 2875 <entry>Data-Parallel Types</entry> 2876 <entry>Y</entry> 2877 <entry>Parallelism 2 TS</entry> 2878 </row> 2879 2880 </tbody> 2881</tgroup> 2882</table> 2883 2884<section xml:id="iso.2017.specific" xreflabel="Implementation Specific"><info><title>Implementation Specific Behavior</title></info> 2885 2886 <para>For behaviour which is also specified by previous standards, 2887 see <link linkend="iso.1998.specific">C++ 1998/2003 Implementation 2888 Specific Behavior</link> and <link linkend="iso.2011.specific">C++ 2889 2011 Implementation Specific Behavior</link>. This section only 2890 documents behaviour which is new in the 2017 standard. 2891 </para> 2892 2893 <para> 2894 <emphasis>20.5.1.2 [headers]</emphasis> 2895 Whether names from Annex K are declared by C++ headers depends on 2896 whether the underlying C library supports Annex K and declares the 2897 names. For the GNU C library, there is no Annex K support and so 2898 none of its names are declared by C++ headers. 2899 </para> 2900 2901 <para> 2902 <emphasis>23.6.5 [optional.bad_optional_access]</emphasis> 2903 <code>what()</code> returns <literal>"bad optional access"</literal>. 2904 </para> 2905 2906 <para> 2907 <emphasis>23.7.3 [variant.variant]</emphasis> 2908 <classname>variant</classname> supports over-aligned types. 2909 </para> 2910 2911 <para> 2912 <emphasis>23.7.10 [variant.bad.access]</emphasis> 2913 <code>what()</code> returns one of the strings 2914 <literal>"std::get: variant is valueless"</literal>, 2915 <literal>"std::get: wrong index for variant"</literal>, 2916 <literal>"std::visit: variant is valueless"</literal>, 2917 or <literal>"std::visit<R>: variant is valueless"</literal>. 2918 </para> 2919 2920 <para> 2921 <emphasis>23.12.5.2 [memory.resource.pool.options]</emphasis> 2922 Let S equal <code>numeric_limits<size_t>::digits</code>. 2923 The limit for maximum number of blocks in a chunk is given by 2924 <inlineequation><mathphrase>2<superscript>N</superscript>-1</mathphrase></inlineequation>, 2925 where N is <inlineequation><mathphrase>min(19, 3 + S/2)</mathphrase></inlineequation>. 2926 The largest allocation size that will be allocated from a pool is 2927 <inlineequation><mathphrase>2<superscript>22</superscript></mathphrase></inlineequation> 2928 when <inlineequation><mathphrase>S > 20</mathphrase></inlineequation>, 2929 otherwise 3072 when <inlineequation><mathphrase>S > 16</mathphrase></inlineequation>, 2930 otherwise 768. 2931 </para> 2932 2933 <para> 2934 <emphasis>23.12.6.1 [memory.resource.monotonic.buffer.ctor]</emphasis> 2935 The default <code>next_buffer_size</code> is <code>128 * sizeof(void*)</code>. 2936 The default growth factor is <code>1.5</code>. 2937 </para> 2938 2939 <para> 2940 <emphasis>23.15.4.3 [meta.unary.prop]</emphasis> 2941 The predicate condition for 2942 <code>has_unique_object_representations</code> is true for all scalar 2943 types except floating point types. 2944 </para> 2945 2946 <para> 2947 <emphasis>23.19.3 [execpol.type], 2948 28.4.3 [algorithms.parallel.exec]</emphasis> 2949 There are no implementation-defined execution policies. 2950 </para> 2951 2952 <para> 2953 <emphasis>24.4.2 [string.view.template]</emphasis> 2954 <classname>basic_string_view<C, T>::iterator</classname> is 2955 <code>C*</code> and 2956 <classname>basic_string_view<C, T>::const_iterator</classname> is 2957 <code>const C*</code>. 2958 </para> 2959 2960 2961 <para> 2962 <emphasis>28.4.3 [algorithms.parallel.exec]</emphasis> 2963 Threads of execution created by <classname>std::thread</classname> 2964 provide concurrent forward progress guarantees, so threads of execution 2965 implicitly created by the library will provide parallel forward 2966 progress guarantees. 2967 </para> 2968 2969 <para> 2970 <emphasis>29.4.1 [cfenv.syn]</emphasis> 2971 The effects of the <filename><cfenv></filename> functions 2972 depends on whether the <code>FENV_ACCESS</code> pragma is supported, 2973 and on the C library that provides the header. 2974 </para> 2975 2976 <para> 2977 <emphasis>29.6.9 [c.math.rand]</emphasis> 2978 Whether the <function>rand</function> function may introduce data 2979 races depends on the target C library that provides the function. 2980 </para> 2981 2982 <para> 2983 <emphasis>29.9.5 [sf.cmath]</emphasis> 2984 The effect of calling the mathematical special functions with large 2985 inputs should be documented here. 2986 </para> 2987 2988 <para> 2989 <emphasis>30.10.2.1 [fs.conform.9945]</emphasis> 2990 The behavior of the filesystem library implementation will depend on 2991 the target operating system. Some features will not be supported 2992 on some targets. Symbolic links and file permissions 2993 are not supported on Windows. 2994 </para> 2995 2996 <para> 2997 <emphasis>30.10.5 [fs.filesystem.syn]</emphasis> 2998 The clock used for file times is an unspecified type 2999 with a signed 64-bit representation, capable of representing 3000 timestamps with nanosecond resolution. The clock's epoch is 3001 unspecified, but is not the same as the system clock's epoch. 3002 </para> 3003 3004 <para> 3005 <emphasis>30.10.7.1 [fs.path.generic]</emphasis> 3006 dot-dot in the root-directory refers to the root-directory itself. 3007 On Windows, a drive specifier such as <code>"C:"</code> or 3008 <code>"z:"</code> is treated as a root-name. On Cygwin, a path 3009 that begins with two successive directory separators is a 3010 root-name. Otherwise (for POSIX-like systems other than Cygwin), 3011 the implementation-defined root-name is an unspecified string 3012 which does not appear in any pathnames. 3013 </para> 3014 3015 <para> 3016 <emphasis>30.10.10.1 [fs.enum.path.format]</emphasis> 3017 The character sequence is always interpreted in the native pathname 3018 format. 3019 </para> 3020 3021 <para> 3022 <emphasis>30.10.15.4 [fs.op.file_size]</emphasis> 3023 If <code>!is_regular_file(p)</code>, an error is reported. 3024 </para> 3025 3026 <para> 3027 <emphasis>30.10.15.32 [fs.op.rename]</emphasis> 3028 On Windows, <code>filesystem::rename</code> 3029 is implemented by calling <code>MoveFileExW</code> and so 3030 does not meet the requirements of POSIX <code>rename</code> 3031 when one or both of the paths resolves to an existing directory. 3032 Specifically, it is not possible to rename a directory to replace another 3033 directory (POSIX requires that to work if the directory being 3034 replaced is empty). 3035 </para> 3036 3037 3038 <section xml:id="iso.2017.par2ts" xreflabel="Implementation Specific Behavior of the Parallelism 2 TS"><info><title>Parallelism 2 TS</title></info> 3039 3040 <para> 3041 <emphasis>9.3 [parallel.simd.abi]</emphasis> 3042 <code>max_fixed_size<T></code> is 32, except when targetting 3043 AVX512BW and <code>sizeof(T)</code> is 1. 3044 </para> 3045 3046 <para> 3047 When targeting 32-bit x86, 3048 <classname>simd_abi::compatible<T></classname> is an alias for 3049 <classname>simd_abi::scalar</classname>. 3050 When targeting 64-bit x86 (including x32) or Aarch64, 3051 <classname>simd_abi::compatible<T></classname> is an alias for 3052 <classname>simd_abi::_VecBuiltin<16></classname>, 3053 unless <code>T</code> is <code>long double</code>, in which case it is 3054 an alias for <classname>simd_abi::scalar</classname>. 3055 When targeting ARM (but not Aarch64) with NEON support, 3056 <classname>simd_abi::compatible<T></classname> is an alias for 3057 <classname>simd_abi::_VecBuiltin<16></classname>, 3058 unless <code>sizeof(T) > 4</code>, in which case it is 3059 an alias for <classname>simd_abi::scalar</classname>. Additionally, 3060 <classname>simd_abi::compatible<float></classname> is an alias for 3061 <classname>simd_abi::scalar</classname> unless compiling with 3062 -ffast-math. 3063 </para> 3064 3065 <para> 3066 When targeting x86 (both 32-bit and 64-bit), 3067 <classname>simd_abi::native<T></classname> is an alias for one of 3068 <classname>simd_abi::scalar</classname>, 3069 <classname>simd_abi::_VecBuiltin<16></classname>, 3070 <classname>simd_abi::_VecBuiltin<32></classname>, or 3071 <classname>simd_abi::_VecBltnBtmsk<64></classname>, depending on 3072 <code>T</code> and the machine options the compiler was invoked with. 3073 </para> 3074 3075 <para> 3076 When targeting ARM/Aarch64 or POWER, 3077 <classname>simd_abi::native<T></classname> is an alias for 3078 <classname>simd_abi::scalar</classname> or 3079 <classname>simd_abi::_VecBuiltin<16></classname>, depending on 3080 <code>T</code> and the machine options the compiler was invoked with. 3081 </para> 3082 3083 <para> 3084 For any other targeted machine 3085 <classname>simd_abi::compatible<T></classname> and 3086 <classname>simd_abi::native<T></classname> are aliases for 3087 <classname>simd_abi::scalar</classname>. (subject to change) 3088 </para> 3089 3090 <para> 3091 The extended ABI tag types defined in the 3092 <code>std::experimental::parallelism_v2::simd_abi</code> namespace are: 3093 <classname>simd_abi::_VecBuiltin<Bytes></classname>, and 3094 <classname>simd_abi::_VecBltnBtmsk<Bytes></classname>. 3095 </para> 3096 3097 <para> 3098 <classname>simd_abi::deduce<T, N, Abis...>::type</classname>, 3099 with <code>N > 1</code> is an alias for an extended ABI tag, if a 3100 supported extended ABI tag exists. Otherwise it is an alias for 3101 <classname>simd_abi::fixed_size<N></classname>. The <classname> 3102 simd_abi::_VecBltnBtmsk</classname> ABI tag is preferred over 3103 <classname>simd_abi::_VecBuiltin</classname>. 3104 </para> 3105 3106 <para> 3107 <emphasis>9.4 [parallel.simd.traits]</emphasis> 3108 <classname>memory_alignment<T, U>::value</classname> is 3109 <code>sizeof(U) * T::size()</code> rounded up to the next power-of-two 3110 value. 3111 </para> 3112 3113 <para> 3114 <emphasis>9.6.1 [parallel.simd.overview]</emphasis> 3115 On ARM, <classname>simd<T, _VecBuiltin<Bytes>></classname> 3116 is supported if <code>__ARM_NEON</code> is defined and 3117 <code>sizeof(T) <= 4</code>. Additionally, 3118 <code>sizeof(T) == 8</code> with integral <code>T</code> is supported if 3119 <code>__ARM_ARCH >= 8</code>, and <code>double</code> is supported if 3120 <code>__aarch64__</code> is defined. 3121 3122 On POWER, <classname>simd<T, _VecBuiltin<Bytes>></classname> 3123 is supported if <code>__ALTIVEC__</code> is defined and <code>sizeof(T) 3124 < 8</code>. Additionally, <code>double</code> is supported if 3125 <code>__VSX__</code> is defined, and any <code>T</code> with <code> 3126 sizeof(T) <= 8</code> is supported if <code>__POWER8_VECTOR__</code> 3127 is defined. 3128 3129 On x86, given an extended ABI tag <code>Abi</code>, 3130 <classname>simd<T, Abi></classname> is supported according to the 3131 following table: 3132 <table frame="all" xml:id="table.par2ts_simd_support"> 3133 <title>Support for Extended ABI Tags</title> 3134 3135 <tgroup cols="4" align="left" colsep="0" rowsep="1"> 3136 <colspec colname="c1"/> 3137 <colspec colname="c2"/> 3138 <colspec colname="c3"/> 3139 <colspec colname="c4"/> 3140 <thead> 3141 <row> 3142 <entry>ABI tag <code>Abi</code></entry> 3143 <entry>value type <code>T</code></entry> 3144 <entry>values for <code>Bytes</code></entry> 3145 <entry>required machine option</entry> 3146 </row> 3147 </thead> 3148 3149 <tbody> 3150 <row> 3151 <entry morerows="5"> 3152 <classname>_VecBuiltin<Bytes></classname> 3153 </entry> 3154 <entry morerows="1"><code>float</code></entry> 3155 <entry>8, 12, 16</entry> 3156 <entry>"-msse"</entry> 3157 </row> 3158 3159 <row> 3160 <entry>20, 24, 28, 32</entry> 3161 <entry>"-mavx"</entry> 3162 </row> 3163 3164 <row> 3165 <entry morerows="1"><code>double</code></entry> 3166 <entry>16</entry> 3167 <entry>"-msse2"</entry> 3168 </row> 3169 3170 <row> 3171 <entry>24, 32</entry> 3172 <entry>"-mavx"</entry> 3173 </row> 3174 3175 <row> 3176 <entry morerows="1"> 3177 integral types other than <code>bool</code> 3178 </entry> 3179 <entry> 3180 <code>Bytes</code> ��� 16 and <code>Bytes</code> divisible by 3181 <code>sizeof(T)</code> 3182 </entry> 3183 <entry>"-msse2"</entry> 3184 </row> 3185 3186 <row> 3187 <entry> 3188 16 < <code>Bytes</code> ��� 32 and <code>Bytes</code> 3189 divisible by <code>sizeof(T)</code> 3190 </entry> 3191 <entry>"-mavx2"</entry> 3192 </row> 3193 3194 <row> 3195 <entry morerows="1"> 3196 <classname>_VecBuiltin<Bytes></classname> and 3197 <classname>_VecBltnBtmsk<Bytes></classname> 3198 </entry> 3199 <entry> 3200 vectorizable types with <code>sizeof(T)</code> ��� 4 3201 </entry> 3202 <entry morerows="1"> 3203 32 < <code>Bytes</code> ��� 64 and <code>Bytes</code> 3204 divisible by <code>sizeof(T)</code> 3205 </entry> 3206 <entry>"-mavx512f"</entry> 3207 </row> 3208 3209 <row> 3210 <entry> 3211 vectorizable types with <code>sizeof(T)</code> < 4 3212 </entry> 3213 <entry>"-mavx512bw"</entry> 3214 </row> 3215 3216 <row> 3217 <entry morerows="1"> 3218 <classname>_VecBltnBtmsk<Bytes></classname> 3219 </entry> 3220 <entry> 3221 vectorizable types with <code>sizeof(T)</code> ��� 4 3222 </entry> 3223 <entry morerows="1"> 3224 <code>Bytes</code> ��� 32 and <code>Bytes</code> divisible by 3225 <code>sizeof(T)</code> 3226 </entry> 3227 <entry>"-mavx512vl"</entry> 3228 </row> 3229 3230 <row> 3231 <entry> 3232 vectorizable types with <code>sizeof(T)</code> < 4 3233 </entry> 3234 <entry>"-mavx512bw" and "-mavx512vl"</entry> 3235 </row> 3236 3237 </tbody> 3238 </tgroup> 3239 </table> 3240 </para> 3241 3242 </section> 3243 3244</section> 3245 3246</section> 3247