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