1<section xmlns="http://docbook.org/ns/docbook" version="5.0" 2 xml:id="status.iso.2020" xreflabel="Status C++ 2020"> 3<?dbhtml filename="status_iso_cxx2020.html"?> 4 5<info><title>C++ 2020</title> 6 <keywordset> 7 <keyword>ISO C++</keyword> 8 <keyword>2020</keyword> 9 </keywordset> 10</info> 11 12<para> 13In this implementation the <literal>-std=gnu++20</literal> or 14<literal>-std=c++20</literal> flag must be used to enable language 15and library 16features. See <link linkend="manual.intro.using.flags">dialect</link> 17options. The pre-defined symbol 18<constant>__cplusplus</constant> is used to check for the 19presence of the required flag. 20</para> 21 22<para> 23This section describes the C++20 and library TS support in the GCC 12 release series, 24not in any particular release. 25</para> 26 27<para> 28The following table lists new library features that are included in 29the C++20 standard. The "Proposal" column provides a link to the 30ISO C++ committee proposal that describes the feature, while the "Status" 31column indicates the first version of GCC that contains an implementation of 32this feature (if it has been implemented). 33A dash (—) in the status column indicates that the changes in the proposal 34either do not affect the code in libstdc++, or the changes are not required for conformance. 35The "SD-6 Feature Test / Notes" 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: 37Feature-testing recommendations for C++</link> (where applicable) 38or any notes about the implementation. 39</para> 40 41<table frame="all" xml:id="table.cxx20_features"> 42<title>C++ 2020 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 / Notes</entry> 55 </row> 56 </thead> 57 58 <tbody> 59 60 <row> 61 <entry namest="c1" nameend="c4" align="left"> 62 <emphasis role="bold">Compile-time programming</emphasis> 63 </entry> 64 </row> 65 66 <row> 67 <entry> Add constexpr modifiers to functions in <code><algorithm></code> and <code><utility></code> Headers </entry> 68 <entry> 69 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0202r3.html"> 70 P0202R3 </link> 71 </entry> 72 <entry align="center"> 10.1 </entry> 73 <entry> <code>__cpp_lib_constexpr_algorithms >= 201703L</code> </entry> 74 </row> 75 76 <row> 77 <entry> Constexpr for <code>swap</code> and swap related functions </entry> 78 <entry> 79 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0879r0.html"> 80 P0879R0 </link> 81 </entry> 82 <entry align="center"> 10.1 </entry> 83 <entry> <code>__cpp_lib_constexpr_algorithms >= 201806L</code> </entry> 84 </row> 85 86 <row> 87 <entry> Constexpr for <code>std::complex</code> </entry> 88 <entry> 89 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0415r1.html"> 90 P0415R1 </link> 91 </entry> 92 <entry align="center"> 9.1 </entry> 93 <entry> <code>__cpp_lib_constexpr_complex >= 201711L</code> (since 9.4, see Note 1) </entry> 94 </row> 95 96 <row> 97 <entry> P0595R2 <code>std::is_constant_evaluated()</code> </entry> 98 <entry> 99 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0595r2.html"> 100 P0595R2 </link> 101 </entry> 102 <entry align="center"> 9.1 </entry> 103 <entry> <code>__cpp_lib_is_constant_evaluated >= 201811L</code> </entry> 104 </row> 105 106 <row> 107 <entry> More constexpr containers </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/2019/p0784r7.html"> 110 P0784R7 </link> 111 </entry> 112 <entry align="center"> 10.1 </entry> 113 <entry> <code>__cpp_lib_constexpr_dynamic_alloc >= 201907L</code> </entry> 114 </row> 115 116 <row> 117 <entry> Making <code>std::string</code> constexpr </entry> 118 <entry> 119 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0980r1.pdf"> 120 P0980R1 </link> 121 </entry> 122 <entry align="center"> 12.1 </entry> 123 <entry> <code>__cpp_lib_constexpr_string >= 201907L</code> </entry> 124 </row> 125 126 <row> 127 <entry> Making <code>std::vector</code> constexpr </entry> 128 <entry> 129 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1004r2.pdf"> 130 P1004R2 </link> 131 </entry> 132 <entry align="center"> 12.1 </entry> 133 <entry> <code>__cpp_lib_constexpr_vector >= 201907L</code> </entry> 134 </row> 135 136 <row> 137 <entry> Constexpr in <code>std::pointer_traits</code> </entry> 138 <entry> 139 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1006r1.pdf"> 140 P1006R1 </link> 141 </entry> 142 <entry align="center"> 9.1 </entry> 143 <entry> <code>__cpp_lib_constexpr_memory >= 201811L</code> (since 9.4, see Note 1) </entry> 144 </row> 145 146 <row> 147 <entry> constexpr for <code><numeric></code> algorithms </entry> 148 <entry> 149 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1645r1.html"> 150 P1645R1 </link> 151 </entry> 152 <entry align="center"> 10.1 </entry> 153 <entry> <code>__cpp_lib_constexpr_numeric >= 201911L</code> </entry> 154 </row> 155 156 <row> 157 <entry> Constexpr iterator requirements </entry> 158 <entry> 159 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0858r0.html"> 160 P0858R0 </link> 161 </entry> 162 <entry align="center"> 9.1 </entry> 163 <entry> 164 <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> 165 <row><entry> <code>__cpp_lib_array_constexpr >= 201803L</code> </entry></row> 166 <row><entry> <code>__cpp_lib_string_view >= 201803L</code> </entry></row> 167 <row><entry> (both since 9.4, see Note 1) </entry></row> 168 </tbody></tgroup></informaltable> 169 </entry> 170 </row> 171 172 <row> 173 <entry> <code>constexpr</code> comparison operators for <code>std::array</code> </entry> 174 <entry> 175 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1023r0.pdf"> 176 P1023R0 </link> 177 </entry> 178 <entry align="center"> 10.1 </entry> 179 <entry> <code>__cpp_lib_array_constexpr >= 201806</code> </entry> 180 </row> 181 182 <row> 183 <entry> Misc constexpr bits </entry> 184 <entry> 185 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1032r1.html"> 186 P1032R1 </link> 187 </entry> 188 <entry align="center"> 10.1 </entry> 189 <entry> 190 <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> 191 <row><entry> <code>__cpp_lib_array_constexpr >= 201811L</code> </entry></row> 192 <row><entry> <code>__cpp_lib_constexpr_functional >= 201811L</code> </entry></row> 193 <row><entry> <code>__cpp_lib_constexpr_iterator >= 201811L</code> </entry></row> 194 <row><entry> <code>__cpp_lib_constexpr_string_view >= 201811L</code> </entry></row> 195 <row><entry> <code>__cpp_lib_constexpr_tuple >= 201811L</code> </entry></row> 196 <row><entry> <code>__cpp_lib_constexpr_utility >= 201811L</code> </entry></row> 197 </tbody></tgroup></informaltable> 198 </entry> 199 </row> 200 201 <row> 202 <entry> <code>constexpr <emphasis>INVOKE</emphasis></code> </entry> 203 <entry> 204 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1065r2.html"> 205 P1065R2 </link> 206 </entry> 207 <entry align="center"> 10.1 </entry> 208 <entry> <code>__cpp_lib_constexpr_functional >= 201907L</code> </entry> 209 </row> 210 211 212 <row> 213 <entry> Transformation Trait <code>remove_cvref</code> </entry> 214 <entry> 215 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0550r2.pdf"> 216 P0550R2 </link> 217 </entry> 218 <entry align="center"> 9.1 </entry> 219 <entry> <code>__cpp_lib_remove_cvref >= 201711L</code> (since 9.4, see Note 1) </entry> 220 </row> 221 222 <row> 223 <entry> Implicit conversion traits and utility functions </entry> 224 <entry> 225 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0758r1.html"> 226 P0758R1 </link> 227 </entry> 228 <entry align="center"> 9.1 </entry> 229 <entry> <code>__cpp_lib_is_nothrow_convertible >= 201806L</code> (since 9.4, see Note 1) </entry> 230 </row> 231 232 <row> 233 <entry> The <code>identity</code> metafunction </entry> 234 <entry> 235 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0887r1.pdf"> 236 P0887R1 </link> 237 </entry> 238 <entry align="center"> 9.1 </entry> 239 <entry> <code>__cpp_lib_type_identity >= 201806L</code> (since 9.4, see Note 1) </entry> 240 </row> 241 242 243 <row> 244 <entry> <code>unwrap_ref_decay</code> and <code>unwrap_reference</code> </entry> 245 <entry> 246 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0318r1.pdf"> 247 P0318R1 </link> 248 </entry> 249 <entry align="center"> 9.1 </entry> 250 <entry> <code>__cpp_lib_unwrap_ref >= 201811L</code> (since 9.4, see Note 1) </entry> 251 </row> 252 253 <row> 254 <?dbhtml bgcolor="#B0B0B0" ?> 255 <entry> Improving Completeness Requirements for Type Traits </entry> 256 <entry> 257 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1285r0.pdf"> 258 P1285R0 </link> 259 </entry> 260 <entry align="center"> Partial </entry> 261 <entry /> 262 </row> 263 264 <row> 265 <entry> Missing feature test macros </entry> 266 <entry> 267 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1353r0.html"> 268 P1353R0 </link> 269 </entry> 270 <entry align="center"> 9.1 </entry> 271 <entry /> 272 </row> 273 274 <row> 275 <entry> Making std::underlying_type SFINAE-friendly </entry> 276 <entry> 277 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0340r3.html"> 278 P0340R3 </link> 279 </entry> 280 <entry align="center"> 9.1 </entry> 281 <entry /> 282 </row> 283 284 <row> 285 <entry> Traits for [Un]bounded Arrays </entry> 286 <entry> 287 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1357r1.pdf"> 288 P1357R1 </link> 289 </entry> 290 <entry align="center"> 9.1 </entry> 291 <entry> <code>__cpp_lib_bounded_array_traits >= 201902L</code> </entry> 292 </row> 293 294 <row> 295 <entry> Layout-compatibility and pointer-interconvertibility traits </entry> 296 <entry> 297 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0466r5.pdf"> 298 P0466R5 </link> 299 </entry> 300 <entry align="center"> 12.1 </entry> 301 <entry> 302 <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> 303 <row><entry> <code>__cpp_lib_is_layout_compatible >= 201907L</code> </entry></row> 304 <row><entry> <code>__cpp_lib_is_pointer_interconvertible >= 201907L</code> </entry></row> 305 </tbody></tgroup></informaltable> 306 </entry> 307 </row> 308 309 <row> 310 <entry> Integrating feature-test macros into the C++ WD </entry> 311 <entry> 312 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0941r2.html"> 313 P0941R2 </link> 314 </entry> 315 <entry align="center"> 5.1 </entry> 316 <entry /> 317 </row> 318 319 <row> 320 <entry> <code><version></code> </entry> 321 <entry> 322 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0754r2.pdf"> 323 P0754R2 </link> 324 </entry> 325 <entry align="center"> 9.1 </entry> 326 <entry> <code>__has_include(<version>)</code> </entry> 327 </row> 328 329 330 <row> 331 <entry namest="c1" nameend="c4" align="left"> 332 <emphasis role="bold">Synchronization</emphasis> 333 </entry> 334 </row> 335 336 <row> 337 <entry> Atomic Ref </entry> 338 <entry> 339 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0019r8.html"> 340 P0019R8 </link> 341 </entry> 342 <entry align="center"> 10.1 </entry> 343 <entry> <code>__cpp_lib_atomic_ref >= 201806L</code> </entry> 344 </row> 345 346 <row> 347 <entry> Floating Point Atomic </entry> 348 <entry> 349 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0020r6.html"> 350 P0020R6 </link> 351 </entry> 352 <entry align="center"> 10.1 </entry> 353 <entry> <code>__cpp_lib_atomic_float >= 201711L</code> </entry> 354 </row> 355 356 <row> 357 <entry> C++ Synchronized Buffered Ostream </entry> 358 <entry> 359 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0053r7.pdf"> 360 P0053R7 </link> 361 </entry> 362 <entry align="center"> 11.1 </entry> 363 <entry> <code>__cpp_lib_syncbuf >= 201711L</code> </entry> 364 </row> 365 366 <row> 367 <entry> Manipulators for C++ Synchronized Buffered Ostream </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/2018/p0753r2.pdf"> 370 P0753R2 </link> 371 </entry> 372 <entry align="center"> 11.1 </entry> 373 <entry> <code>__cpp_lib_syncbuf >= 201803L</code> </entry> 374 </row> 375 376 <row> 377 <entry> Make <code>std::memory_order</code> a scoped enumeration </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/p0439r0.html"> 380 P0439R0 </link> 381 </entry> 382 <entry align="center"> 9.1 </entry> 383 <entry /> 384 </row> 385 386 <row> 387 <?dbhtml bgcolor="#C8B0B0" ?> 388 <entry> The Curious Case of Padding Bits, Featuring Atomic Compare-and-Exchange </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/2018/p0528r3.html"> 391 P0528R3 </link> 392 </entry> 393 <entry align="center"> </entry> 394 <entry /> 395 </row> 396 397 <row> 398 <entry> Atomic <code>shared_ptr</code> </entry> 399 <entry> 400 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0718r2.html"> 401 P0718R2 </link> 402 </entry> 403 <entry align="center"> 12.1 </entry> 404 <entry> <code> __cpp_lib_atomic_shared_ptr >= 201711L</code> </entry> 405 </row> 406 407 <row> 408 <entry> std::stop_token and std::jthread </entry> 409 <entry> 410 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0660r10.pdf"> 411 P0660R10 </link> 412 </entry> 413 <entry align="center"> 10.1 </entry> 414 <entry> <code>__cpp_lib_jthread >= 201907L</code> </entry> 415 </row> 416 417 <row> 418 <entry> Rename <code>condition_variable_any</code> interruptible wait methods </entry> 419 <entry> 420 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1869r1.html"> 421 P1869R1 </link> 422 </entry> 423 <entry align="center"> 10.1 </entry> 424 <entry> <code>__cpp_lib_jthread >= 201911L</code> </entry> 425 </row> 426 427 <row> 428 <entry> Atomic waiting and notifying, std::semaphore, std::latch and std::barrier </entry> 429 <entry> 430 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1135r6.html"> 431 P1135R6 </link> 432 </entry> 433 <entry align="center"> 11.1 </entry> 434 <entry> 435 <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> 436 <row><entry> <code>__cpp_lib_atomic_lock_free_type_aliases >= 201907L</code> </entry></row> 437 <row><entry> <code>__cpp_lib_atomic_flag_test >= 201907L</code> </entry></row> 438 <row><entry> <code>__cpp_lib_atomic_wait >= 201907L</code> </entry></row> 439 <row><entry> <code>__cpp_lib_semaphore >= 201907L</code> </entry></row> 440 <row><entry> <code>__cpp_lib_latch >= 201907L</code> </entry></row> 441 <row><entry> <code>__cpp_lib_barrier >= 201907L</code> </entry></row> 442 </tbody></tgroup></informaltable> 443 </entry> 444 </row> 445 446 <row> 447 <entry> Fixing Atomic Initialization </entry> 448 <entry> 449 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0883r2.pdf"> 450 P0883R2 </link> 451 </entry> 452 <entry align="center"> 10.1 </entry> 453 <entry> <code>__cpp_lib_atomic_value_initialization >= 201911L</code> </entry> 454 </row> 455 456 457 458 <row> 459 <entry namest="c1" nameend="c4" align="left"> 460 <emphasis role="bold">Ranges and Concepts</emphasis> 461 </entry> 462 </row> 463 464 <row> 465 <entry> Standard Library Concepts </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/2018/p0898r3.pdf"> 468 P0898R3 </link> 469 </entry> 470 <entry align="center"> 10.1 </entry> 471 <entry> <code>__cpp_lib_concepts >= 201806L</code> </entry> 472 </row> 473 474 <row> 475 <entry> Rename concepts to standard_case for C++20, while we still can </entry> 476 <entry> 477 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1754r1.pdf"> 478 P1754R1 </link> 479 </entry> 480 <entry align="center"> 10.1 </entry> 481 <entry> <code>__cpp_lib_concepts >= 201907L</code> </entry> 482 </row> 483 484 <row> 485 <entry> Wording for <emphasis><code>boolean-testable</code></emphasis> </entry> 486 <entry> 487 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1964r2.html"> 488 P1964R2 </link> 489 </entry> 490 <entry align="center"> 10.1 </entry> 491 <entry> <code>__cpp_lib_concepts >= 202002L</code> </entry> 492 </row> 493 494 <row> 495 <entry> The One Ranges Proposal </entry> 496 <entry> 497 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0896r4.pdf"> 498 P0896R4 </link> 499 </entry> 500 <entry align="center"> 10.1 </entry> 501 <entry> <code>__cpp_lib_ranges >= 201811L</code> </entry> 502 </row> 503 504 <row> 505 <entry> Input Range Adaptors </entry> 506 <entry> 507 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1035r7.pdf"> 508 P1035R7 </link> 509 </entry> 510 <entry align="center"> 10.1 </entry> 511 <entry> <code>__cpp_lib_ranges >= 201907L</code> </entry> 512 </row> 513 514 <row> 515 <entry> <code>ranges</code> compare algorithm are over-constrained </entry> 516 <entry> 517 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1716r3.html"> 518 P1716R3 </link> 519 </entry> 520 <entry align="center"> 10.1 </entry> 521 <entry> <code>__cpp_lib_ranges >= 201911L</code> </entry> 522 </row> 523 524 <row> 525 <entry> Remove CommonReference requirement from StrictWeakOrdering (a.k.a Fixing Relations) </entry> 526 <entry> 527 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1248r1.html"> 528 P1248R1 </link> 529 </entry> 530 <entry align="center"> 10.1 </entry> 531 <entry /> 532 </row> 533 534 <row> 535 <entry> Ranges Design Cleanup </entry> 536 <entry> 537 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1252r2.pdf"> 538 P1252R2 </link> 539 </entry> 540 <entry align="center"> 10.1 </entry> 541 <entry /> 542 </row> 543 544 <row> 545 <?dbhtml bgcolor="#C8B0B0" ?> 546 <entry> Avoid template bloat for <code>safe_ranges</code> in combination with ���subrange-y��� view adaptors.</entry> 547 <entry> 548 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1739r4.html"> 549 P1739R4 </link> 550 </entry> 551 <entry align="center"> </entry> 552 <entry /> 553 </row> 554 555 556 <row> 557 <entry namest="c1" nameend="c4" align="left"> 558 <emphasis role="bold">Time, dates, calendars, time zones</emphasis> 559 </entry> 560 </row> 561 562 <row> 563 <?dbhtml bgcolor="#C8B0B0" ?> 564 <entry> Extending chrono to Calendars and Time Zones </entry> 565 <entry> 566 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0355r7.html"> 567 P0355R7 </link> 568 </entry> 569 <entry/> 570 <entry> <code>__cpp_lib_chrono >= 201803L</code> </entry> 571 </row> 572 573 <row> 574 <?dbhtml bgcolor="#C8B0B0" ?> 575 <entry> Miscellaneous minor fixes for chrono </entry> 576 <entry> 577 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1466r3.html"> 578 P1466R3 </link> 579 </entry> 580 <entry/> 581 <entry> <code>__cpp_lib_chrono >= 201907L</code> </entry> 582 </row> 583 584 <row> 585 <entry> <code><chrono></code> <code>zero()</code>, <code>min()</code>, and <code>max()</code> should be <code>noexcept</code> </entry> 586 <entry> 587 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0972r0.pdf"> 588 P0972R0 </link> 589 </entry> 590 <entry align="center"> 9.1 </entry> 591 <entry /> 592 </row> 593 594 595 <row> 596 <entry namest="c1" nameend="c4" align="left"> 597 <emphasis role="bold">Three-way comparison</emphasis> 598 </entry> 599 </row> 600 601 <row> 602 <entry> Library Support for the Spaceship (Comparison) Operator </entry> 603 <entry> 604 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0768r1.pdf"> 605 P0768R1 </link> 606 </entry> 607 <entry align="center"> 10.1 </entry> 608 <entry> <code>__cpp_lib_three_way_comparison >= 201711L</code> </entry> 609 </row> 610 611 <row> 612 <entry> Symmetry for spaceship </entry> 613 <entry> 614 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0905r1.html"> 615 P0905R1 </link> 616 </entry> 617 <entry align="center"> 10.1 </entry> 618 <entry /> 619 </row> 620 621 <row> 622 <entry> Adding <=> to the standard library </entry> 623 <entry> 624 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1614r2.html"> 625 P1614R2 </link> 626 </entry> 627 <entry align="center"> 10.1 </entry> 628 <entry> 629 <code>__cpp_lib_three_way_comparison >= 201907L</code> 630 </entry> 631 </row> 632 633 634 <row> 635 <entry namest="c1" nameend="c4" align="left"> 636 <emphasis role="bold">Strings and text</emphasis> 637 </entry> 638 </row> 639 640 <row> 641 <entry> <code>string::reserve</code> Should Not Shrink </entry> 642 <entry> 643 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0966r1.html"> 644 P0966R1 </link> 645 </entry> 646 <entry align="center"> 11.1 </entry> 647 <entry /> 648 </row> 649 650 <row> 651 <entry> <code>char8_t</code>: A type for UTF-8 characters and strings </entry> 652 <entry> 653 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0482r6.html"> 654 P0482R6 </link> 655 </entry> 656 <entry align="center"> 9.1 </entry> 657 <entry> <code>__cpp_lib_char8_t >= 201811L</code> </entry> 658 </row> 659 660 <row> 661 <entry> <code>char8_t</code> backward compatibility remediation </entry> 662 <entry> 663 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1423r3.html"> 664 P1423R3 </link> 665 </entry> 666 <entry align="center"> 10.1 </entry> 667 <entry> <code>__cpp_lib_char8_t >= 201907L</code> </entry> 668 </row> 669 670 <row> 671 <?dbhtml bgcolor="#C8B0B0" ?> 672 <entry> Text formatting </entry> 673 <entry> 674 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0645r10.html"> 675 P0645R10 </link> 676 </entry> 677 <entry align="center"> </entry> 678 <entry> 679 <code>__cpp_lib_format >= 201907L</code> 680 </entry> 681 </row> 682 683 <row> 684 <?dbhtml bgcolor="#C8B0B0" ?> 685 <entry> Integration of chrono with text formatting </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/2019/p1361r2.pdf"> 688 P1361R2 </link> 689 </entry> 690 <entry align="center"> </entry> 691 <entry> 692 <code>__cpp_lib_format >= 201907L</code> 693 </entry> 694 </row> 695 696 <row> 697 <?dbhtml bgcolor="#C8B0B0" ?> 698 <entry> Printf corner cases in <code>std::format</code> </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/2019/p1652r1.html"> 701 P1652R1 </link> 702 </entry> 703 <entry align="center"> </entry> 704 <entry> 705 <code>__cpp_lib_format >= 201907L</code> 706 </entry> 707 </row> 708 709 <row> 710 <entry> String Prefix and Suffix Checking </entry> 711 <entry> 712 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0457r2.html"> 713 P0457R2 </link> 714 </entry> 715 <entry align="center"> 9.1 </entry> 716 <entry> <code>__cpp_lib_starts_ends_with >= 201711L</code> (since 9.4, see Note 1) </entry> 717 </row> 718 719 <row> 720 <?dbhtml bgcolor="#C8B0B0" ?> 721 <entry> Update The Reference To The Unicode Standard </entry> 722 <entry> 723 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1025r1.html"> 724 P1025R1 </link> 725 </entry> 726 <entry align="center"> </entry> 727 <entry /> 728 </row> 729 730 731 <row> 732 <entry namest="c1" nameend="c4" align="left"> 733 <emphasis role="bold">Containers</emphasis> 734 </entry> 735 </row> 736 737 <row> 738 <entry> span: bounds-safe views for sequences of objects </entry> 739 <entry> 740 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0122r7.pdf"> 741 P0122R7 </link> 742 </entry> 743 <entry align="center"> 10.1 </entry> 744 <entry> <code>__cpp_lib_span >= 201803L</code> </entry> 745 </row> 746 747 <row> 748 <entry> 749 Usability Enhancements for <classname>std::span</classname> 750 </entry> 751 <entry> 752 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1024r3.pdf"> 753 P1024R3 </link> 754 </entry> 755 <entry align="center"> 10.1 </entry> 756 <entry> <code>__cpp_lib_span >= 201902L</code> </entry> 757 </row> 758 759 <row> 760 <entry> Should Span be Regular? </entry> 761 <entry> 762 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1085r2.md"> 763 P1085R2 </link> 764 </entry> 765 <entry align="center"> 10.1 </entry> 766 <entry/> 767 </row> 768 769 <row> 770 <entry> Fixed-size <code><span></code> construction from dynamic range </entry> 771 <entry> 772 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1976r2.html"> 773 P1976R2 </link> 774 </entry> 775 <entry align="center"> 10.1 </entry> 776 <entry> <code>__cpp_lib_span >= 202002L</code> </entry> 777 </row> 778 779 <row> 780 <entry> <code>std::to_array</code> </entry> 781 <entry> 782 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0325r4.html"> 783 P0325R4 </link> 784 </entry> 785 <entry align="center"> 10.1 </entry> 786 <entry> <code>__cpp_lib_to_array >= 201907L</code> </entry> 787 </row> 788 789 <row> 790 <entry> Checking for Existence of an Element in Associative Containers </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/2018/p0458r2.html"> 793 P0458R2 </link> 794 </entry> 795 <entry align="center"> 9.1 </entry> 796 <entry /> 797 </row> 798 799 <row> 800 <?dbhtml bgcolor="#C8B0B0" ?> 801 <entry> Comparing Unordered Containers </entry> 802 <entry> 803 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0809r0.pdf"> 804 P0809R0 </link> 805 </entry> 806 <entry align="center"> </entry> 807 <entry /> 808 </row> 809 810 <row> 811 <entry> Heterogeneous lookup for unordered containers </entry> 812 <entry> 813 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0919r3.html"> 814 P0919R3 </link> 815 </entry> 816 <entry align="center"> 11.1 </entry> 817 <entry> <code>__cpp_lib_generic_unordered_lookup >= 201811</code> </entry> 818 </row> 819 820 <row> 821 <entry> Refinement Proposal for P0919 </entry> 822 <entry> 823 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1690r1.html"> 824 P1690R1 </link> 825 </entry> 826 <entry align="center"> 11.1 </entry> 827 <entry/> 828 </row> 829 830 <row> 831 <entry> Adopt Consistent Container Erasure from Library Fundamentals 2 for C++20 </entry> 832 <entry> 833 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1209r0.html"> 834 P1209R0 </link> 835 </entry> 836 <entry align="center"> 9.1 </entry> 837 <entry> <code>__cpp_lib_erase_if >= 201811L</code> </entry> 838 </row> 839 840 <row> 841 <entry> Improving the Return Value of Erase-Like Algorithms </entry> 842 <entry> 843 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0646r1.pdf"> 844 P0646R1 </link> 845 </entry> 846 <entry align="center"> 9.1 </entry> 847 <entry> <code>__cpp_lib_list_remove_return_type >= 201806L</code> </entry> 848 </row> 849 850 <row> 851 <entry> Improving the Return Value of Erase-Like Algorithms II: Free <code>erase</code>/<code>erase_if</code> </entry> 852 <entry> 853 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1115r3.pdf"> 854 P1115R3 </link> 855 </entry> 856 <entry align="center"> 9.1 </entry> 857 <entry> 858 <informaltable colsep="0" rowsep="0" rowheader="norowheader" frame="none"><tgroup cols="1"><tbody> 859 <row><entry> <code>__cpp_lib_erase_if >= 202002L</code> </entry></row> 860 <row><entry> (defined to <code>201900L</code> for GCC 9.1 and 9.2 so use <code>> 201811L</code>) </entry></row> 861 </tbody></tgroup></informaltable> 862 </entry> 863 </row> 864 865 <row> 866 <entry> Signed ssize() functions, unsigned size() functions </entry> 867 <entry> 868 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1227r2.html"> 869 P1227R2 </link> 870 </entry> 871 <entry align="center"> 10.1 </entry> 872 <entry> <code>__cpp_lib_ssize >= 201902L</code> </entry> 873 </row> 874 875 876 <row> 877 <entry namest="c1" nameend="c4" align="left"> 878 <emphasis role="bold">Memory management</emphasis> 879 </entry> 880 </row> 881 882 <row> 883 <entry> Utility to convert a pointer to a raw pointer </entry> 884 <entry> 885 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0653r2.html"> 886 P0653R2 </link> 887 </entry> 888 <entry align="center"> 8.1 </entry> 889 <entry> <code>__cpp_lib_to_address >= 201711L</code> (since 9.4, see Note 1) </entry> 890 </row> 891 892 <row> 893 <entry> Extending <code>make_shared</code> to Support Arrays </entry> 894 <entry> 895 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0674r1.html"> 896 P0674R1 </link> 897 </entry> 898 <entry align="center"> 12.1 </entry> 899 <entry> <code>__cpp_lib_shared_ptr_arrays >= 201707L</code> </entry> 900 </row> 901 902 <row> 903 <entry> Efficient sized delete for variable sized classes </entry> 904 <entry> 905 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0722r3.html"> 906 P0722R3 </link> 907 </entry> 908 <entry align="center"> 9.1 </entry> 909 <entry> <code>__cpp_lib_destroying_delete >= 201806L</code> </entry> 910 </row> 911 912 <row> 913 <entry> Utility functions to implement uses-allocator construction </entry> 914 <entry> 915 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0591r4.pdf"> 916 P0591R4 </link> 917 </entry> 918 <entry align="center"> 9.1 </entry> 919 <entry> 920 <code>std::scoped_allocator_adaptor</code> changes missing in 9.1.0 921 </entry> 922 </row> 923 924 <row> 925 <entry> <code>std::assume_aligned</code> </entry> 926 <entry> 927 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1007r3.pdf"> 928 P1007R3 </link> 929 </entry> 930 <entry align="center"> 9.1 </entry> 931 <entry> <code>__cpp_lib_assume_aligned >= 201811L</code> (since 9.4, see Note 1) </entry> 932 </row> 933 934 <row> 935 <entry> Smart pointer creation with default initialization </entry> 936 <entry> 937 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1020r1.html"> 938 P1020R1 </link> 939 </entry> 940 <entry align="center"> 12.1 </entry> 941 <entry> <code>__cpp_lib_smart_ptr_for_overwrite >= 201811L</code> </entry> 942 </row> 943 944 <row> 945 <entry> Make stateful allocator propagation more consistent for <code>operator+(basic_string)</code> </entry> 946 <entry> 947 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1165r1.html"> 948 P1165R1 </link> 949 </entry> 950 <entry align="center"> 10.1 </entry> 951 <entry /> 952 </row> 953 954 <row> 955 <entry> 956 <classname>polymorphic_allocator<></classname> as a vocabulary type 957 </entry> 958 <entry> 959 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0339r6.pdf"> 960 P0339R6 </link> 961 </entry> 962 <entry align="center"> 9.1 </entry> 963 <entry> 964 <code>__cpp_lib_polymorphic_allocator >= 201902L</code> (since 9.4, see Note 1) 965 </entry> 966 </row> 967 968 <row> 969 <entry> LWG 2511: guaranteed copy elision for piecewise construction </entry> 970 <entry> 971 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0475r1.html"> 972 P0475R1 </link> 973 </entry> 974 <entry align="center"> 7.1 </entry> 975 <entry /> 976 </row> 977 978 979 <row> 980 <entry namest="c1" nameend="c4" align="left"> 981 <emphasis role="bold">Miscellaneous</emphasis> 982 </entry> 983 </row> 984 985 <row> 986 <entry> <code>nodiscard</code> in the Library </entry> 987 <entry> 988 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0600r1.pdf"> 989 P0600R1 </link> 990 </entry> 991 <entry align="center"> 9.1 </entry> 992 <entry /> 993 </row> 994 995 <row> 996 <entry> de-pessimize legacy algorithms with <code>std::move</code> </entry> 997 <entry> 998 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0616r0.pdf"> 999 P0616R0 </link> 1000 </entry> 1001 <entry align="center"> 9.1 </entry> 1002 <entry /> 1003 </row> 1004 1005 <row> 1006 <entry> Deprecate POD </entry> 1007 <entry> 1008 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0767r1.html"> 1009 P0767R1 </link> 1010 </entry> 1011 <entry align="center"> 10.1 </entry> 1012 <entry /> 1013 </row> 1014 1015 <row> 1016 <entry> Treating Unnecessary <code>decay</code> </entry> 1017 <entry> 1018 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0777r1.pdf"> 1019 P0777R1 </link> 1020 </entry> 1021 <entry align="center"> 9.1 </entry> 1022 <entry /> 1023 </row> 1024 1025 <row> 1026 <?dbhtml bgcolor="#C8B0B0" ?> 1027 <entry> Thou Shalt Not Specialize std Function Templates! </entry> 1028 <entry> 1029 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0551r3.pdf"> 1030 P0551R3 </link> 1031 </entry> 1032 <entry align="center"> </entry> 1033 <entry /> 1034 </row> 1035 1036 <row> 1037 <entry> Bit-casting object representations </entry> 1038 <entry> 1039 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0476r2.html"> 1040 P0476R2 </link> 1041 </entry> 1042 <entry align="center"> 11.1 </entry> 1043 <entry> <code>__cpp_lib_bit_cast >= 201806L</code> </entry> 1044 </row> 1045 1046 <row> 1047 <entry> Integral power-of-2 operations </entry> 1048 <entry> 1049 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0556r3.html"> 1050 P0556R3 </link> 1051 </entry> 1052 <entry align="center"> 9.1 </entry> 1053 <entry> <code>__cpp_lib_int_pow2 >= 201806L</code> (since 9.4, see Note 1) </entry> 1054 </row> 1055 1056 <row> 1057 <entry> On the names of low-level bit manipulation functions </entry> 1058 <entry> 1059 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p1956r1.pdf"> 1060 P1956R1 </link> 1061 </entry> 1062 <entry align="center"> 10.1 </entry> 1063 <entry> <code>__cpp_lib_int_pow2 >= 202002L</code> </entry> 1064 </row> 1065 1066 <row> 1067 <entry> Safe integral comparisons </entry> 1068 <entry> 1069 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/p0586r2.html"> 1070 P0586R2 </link> 1071 </entry> 1072 <entry align="center"> 10.1 </entry> 1073 <entry> <code>__cpp_lib_integer_comparison_functions >= 202002L</code> </entry> 1074 </row> 1075 1076 <row> 1077 <entry> Reviewing Deprecated Facilities of C++17 for C++20 </entry> 1078 <entry> 1079 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0619r4.html"> 1080 P0619R4 </link> 1081 </entry> 1082 <entry align="center"> 12.1 </entry> 1083 <entry /> 1084 </row> 1085 1086 <row> 1087 <entry> <code>fpos</code> Requirements </entry> 1088 <entry> 1089 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0759r1.html"> 1090 P0759R1 </link> 1091 </entry> 1092 <entry align="center"> — </entry> 1093 <entry /> 1094 </row> 1095 1096 <row> 1097 <entry> Add <code>shift</code> to <code><algorithm></code> </entry> 1098 <entry> 1099 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0769r2.pdf"> 1100 P0769R2 </link> 1101 </entry> 1102 <entry align="center"> 10.1 </entry> 1103 <entry> <code>__cpp_lib_shift >= 201806L</code> </entry> 1104 </row> 1105 1106 <row> 1107 <?dbhtml bgcolor="#C8B0B0" ?> 1108 <entry> Standard Library Specification in a Concepts and Contracts World </entry> 1109 <entry> 1110 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0788r3.pdf"> 1111 P0788R3 </link> 1112 </entry> 1113 <entry align="center"> </entry> 1114 <entry /> 1115 </row> 1116 1117 <row> 1118 <entry> <code>explicit(bool)</code> </entry> 1119 <entry> 1120 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0892r2.html"> 1121 P0892R2 </link> 1122 </entry> 1123 <entry align="center"> — </entry> 1124 <entry /> 1125 </row> 1126 1127 <row> 1128 <entry> Eradicating unnecessarily explicit default constructors from the standard library </entry> 1129 <entry> 1130 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0935r0.html"> 1131 P0935R0 </link> 1132 </entry> 1133 <entry align="center"> 9.1 </entry> 1134 <entry /> 1135 </row> 1136 1137 <row> 1138 <entry> <code>std::function</code> move constructor should be <code>noexcept</code> </entry> 1139 <entry> 1140 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0771r1.pdf"> 1141 P0771R1 </link> 1142 </entry> 1143 <entry align="center"> 7.2 </entry> 1144 <entry /> 1145 </row> 1146 1147 <row> 1148 <entry> Simplified partial function application </entry> 1149 <entry> 1150 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0356r5.html"> 1151 P0356R5 </link> 1152 </entry> 1153 <entry align="center"> 9.1 </entry> 1154 <entry> <code>__cpp_lib_bind_front >= 201811L</code> </entry> 1155 </row> 1156 1157 <row> 1158 <entry> <code>bind_front</code> should not unwrap <code>reference_wrapper</code> </entry> 1159 <entry> 1160 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1651r0.html"> 1161 P1651R0 </link> 1162 </entry> 1163 <entry align="center"> 9.3 </entry> 1164 <entry> <code>__cpp_lib_bind_front >= 201907L</code> </entry> 1165 </row> 1166 1167 <row> 1168 <entry> <code>reference_wrapper</code> for incomplete types </entry> 1169 <entry> 1170 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html"> 1171 P0357R3 </link> 1172 </entry> 1173 <entry align="center"> 9.1 </entry> 1174 <entry /> 1175 </row> 1176 1177 <row> 1178 <entry> Fixing <code>operator>>(basic_istream&, CharT*)</code> (LWG 2499) </entry> 1179 <entry> 1180 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0487r1.html"> 1181 P0487R1 </link> 1182 </entry> 1183 <entry align="center"> 11.1 </entry> 1184 <entry /> 1185 </row> 1186 1187 <row> 1188 <entry> <code>variant</code> and <code>optional</code> should propagate copy/move triviality </entry> 1189 <entry> 1190 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0602r4.html"> 1191 P0602R4 </link> 1192 </entry> 1193 <entry align="center"> 8.3 </entry> 1194 <entry /> 1195 </row> 1196 1197 <row> 1198 <entry> A sane <code>variant</code> converting constructor </entry> 1199 <entry> 1200 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0608r3.html"> 1201 P0608R3 </link> 1202 </entry> 1203 <entry align="center"> 10.1 </entry> 1204 <entry /> 1205 </row> 1206 1207 <row> 1208 <entry> <code>visit<R></code>: Explicit Return Type for <code>visit</code> </entry> 1209 <entry> 1210 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0655r1.pdf"> 1211 P0655R1 </link> 1212 </entry> 1213 <entry align="center"> 9.1 </entry> 1214 <entry /> 1215 </row> 1216 1217 <row> 1218 <entry> P0899R1 - LWG 3016 is not a defect </entry> 1219 <entry> 1220 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0899r1.html"> 1221 P0899R1 </link> 1222 </entry> 1223 <entry align="center"> 7.1 </entry> 1224 <entry /> 1225 </row> 1226 1227 <row> 1228 <entry> Editorial Guidance for merging P0019r8 and P0528r3 </entry> 1229 <entry> 1230 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1123r0.html"> 1231 P1123R0 </link> 1232 </entry> 1233 <entry align="center"> — </entry> 1234 <entry /> 1235 </row> 1236 1237 <row> 1238 <?dbhtml bgcolor="#C8B0B0" ?> 1239 <entry> Cleaning up Clause 20 </entry> 1240 <entry> 1241 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1148r0.pdf"> 1242 P1148R0 </link> 1243 </entry> 1244 <entry align="center"> </entry> 1245 <entry /> 1246 </row> 1247 1248 <row> 1249 <?dbhtml bgcolor="#C8B0B0" ?> 1250 <entry> Completing the Rebase of Library Fundamentals, Version 3, Working Draft </entry> 1251 <entry> 1252 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1210r0.html"> 1253 P1210R0 </link> 1254 </entry> 1255 <entry align="center"> </entry> 1256 <entry /> 1257 </row> 1258 1259 <row> 1260 <entry> Alternative Wording for P0907R4 Signed Integers are Two's Complement </entry> 1261 <entry> 1262 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p1236r1.html"> 1263 P1236R1 </link> 1264 </entry> 1265 <entry align="center"> — </entry> 1266 <entry/> 1267 </row> 1268 1269 <row> 1270 <entry> 1271 I Stream, You Stream, We All Stream for 1272 <classname>istream_iterator</classname> 1273 </entry> 1274 <entry> 1275 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0738r2.html"> 1276 P0738R2 </link> 1277 </entry> 1278 <entry align="center"> 10.1 </entry> 1279 <entry /> 1280 </row> 1281 1282 <row> 1283 <entry> 1284 Mandating the Standard Library: 1285 Clause 16 - Language support library 1286 </entry> 1287 <entry> 1288 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1458r1.pdf"> 1289 P1458R1 </link> 1290 </entry> 1291 <entry align="center"> — </entry> 1292 <entry/> 1293 </row> 1294 1295 <row> 1296 <entry> 1297 Mandating the Standard Library: 1298 Clause 18 - Diagnostics library 1299 </entry> 1300 <entry> 1301 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1458r1.pdf"> 1302 P1459R1 </link> 1303 </entry> 1304 <entry align="center"> — </entry> 1305 <entry/> 1306 </row> 1307 1308 <row> 1309 <entry> 1310 Mandating the Standard Library: 1311 Clause 20 - Strings library 1312 </entry> 1313 <entry> 1314 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1462r1.html"> 1315 P1462R1 </link> 1316 </entry> 1317 <entry align="center"> — </entry> 1318 <entry/> 1319 </row> 1320 1321 <row> 1322 <entry> 1323 Mandating the Standard Library: 1324 Clause 21 - Containers library 1325 </entry> 1326 <entry> 1327 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1463r1.pdf"> 1328 P1463R1 </link> 1329 </entry> 1330 <entry align="center"> 10.1 </entry> 1331 <entry/> 1332 </row> 1333 1334 <row> 1335 <?dbhtml bgcolor="#C8B0B0" ?> 1336 <entry> 1337 Mandating the Standard Library: 1338 Clause 22 - Iterators library 1339 </entry> 1340 <entry> 1341 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1464r1.pdf"> 1342 P1464R1 </link> 1343 </entry> 1344 <entry align="center"> </entry> 1345 <entry /> 1346 </row> 1347 1348 <row> 1349 <entry> Make <code>create_directory()</code> Intuitive </entry> 1350 <entry> 1351 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1164r1.pdf"> 1352 P1164R1 1353 </link> 1354 </entry> 1355 <entry align="center"> 8.3 </entry> 1356 <entry> Treated as a DR for C++17 </entry> 1357 </row> 1358 1359 <row> 1360 <entry> 1361 Target Vectorization Policies from Parallelism V2 TS to C++20 1362 </entry> 1363 <entry> 1364 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1001r2.html"> 1365 P1001R2 </link> 1366 </entry> 1367 <entry align="center"> 9.1 </entry> 1368 <entry> <code>__cpp_lib_execution >= 201902L</code> (since 9.4, see Note 1)</entry> 1369 </row> 1370 1371 <row> 1372 <entry> Merge Coroutines TS into C++20 working draft </entry> 1373 <entry> 1374 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0912r5.html"> 1375 P0912R5 </link> 1376 </entry> 1377 <entry align="center"> 10.1 </entry> 1378 <entry> <code>__cpp_lib_coroutines >= 201902L</code> </entry> 1379 </row> 1380 1381 <row> 1382 <entry> Endian just Endian </entry> 1383 <entry> 1384 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0463r1.html"> 1385 P0463R1 </link> 1386 </entry> 1387 <entry align="center"> 8.1 </entry> 1388 <entry> <code>__cpp_lib_endian >= 201907L</code> </entry> 1389 </row> 1390 1391 <row> 1392 <entry> Bit operations </entry> 1393 <entry> 1394 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0553r4.html"> 1395 P0553R4 </link> 1396 </entry> 1397 <entry align="center"> 9.1 </entry> 1398 <entry> <code>__cpp_lib_bitops >= 201907L</code> (since 9.4, see Note 1) </entry> 1399 </row> 1400 1401 <row> 1402 <entry> Well-behaved interpolation for numbers and pointers </entry> 1403 <entry> 1404 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0811r3.html"> 1405 P0811R3 </link> 1406 </entry> 1407 <entry align="center"> 9.1 </entry> 1408 <entry> <code>__cpp_lib_interpolate >= 201902L</code> </entry> 1409 </row> 1410 1411 <row> 1412 <entry> Mathematical constants </entry> 1413 <entry> 1414 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0631r8.pdf"> 1415 P0631R8 </link> 1416 </entry> 1417 <entry align="center"> 10.1 </entry> 1418 <entry> <code>__cpp_lib_math_constants >= 201907L</code> </entry> 1419 </row> 1420 1421 <row> 1422 <entry> std::source_location </entry> 1423 <entry> 1424 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p1208r6.pdf"> 1425 P1208R6 </link> 1426 </entry> 1427 <entry align="center"> 11.1 </entry> 1428 <entry> 1429 <code>__cpp_lib_source_location >= 201907L</code> 1430 </entry> 1431 </row> 1432 1433 <row> 1434 <entry> Efficient access to std::basic_stringbuf's Buffer </entry> 1435 <entry> 1436 <link xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2019/p0408r7.pdf"> 1437 P0408R7 </link> 1438 </entry> 1439 <entry align="center"> 11.1 </entry> 1440 <entry /> 1441 </row> 1442 1443 </tbody> 1444</tgroup> 1445</table> 1446 1447<para> 1448Note 1: This feature is supported in older releases but the 1449<code>__cpp_lib</code> macro is not defined to the right value 1450(or not defined at all) until the version shown in parentheses. 1451</para> 1452 1453</section> 1454