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