Contents......Page 2
1 Scope......Page 9
2 Normative references......Page 10
3 Terms and definitions......Page 11
4.1.1 Abstract machine......Page 14
4.3 Syntax notation......Page 15
4.4 Acknowledgments......Page 16
5.2 Phases of translation......Page 17
5.3 Character sets......Page 18
5.4 Preprocessing tokens......Page 19
5.8 Header names......Page 20
5.10 Identifiers......Page 21
5.12 Operators and punctuators......Page 22
5.13.2 Integer literals......Page 23
5.13.3 Character literals......Page 25
5.13.4 Floating literals......Page 26
5.13.5 String literals......Page 27
5.13.7 Pointer literals......Page 29
5.13.8 User-defined literals......Page 30
6.1 Declarations and definitions......Page 32
6.2 One-definition rule......Page 34
6.3.1 Declarative regions and scopes......Page 37
6.3.2 Point of declaration......Page 38
6.3.4 Function parameter scope......Page 39
6.3.7 Class scope......Page 40
6.3.9 Template parameter scope......Page 41
6.4 Name lookup......Page 42
6.4.1 Unqualified name lookup......Page 43
6.4.2 Argument-dependent name lookup......Page 46
6.4.3 Qualified name lookup......Page 47
6.4.3.1 Class members......Page 48
6.4.3.2 Namespace members......Page 49
6.4.4 Elaborated type specifiers......Page 52
6.4.5 Class member access......Page 53
6.5 Program and linkage......Page 54
6.6.1 Memory model......Page 56
6.6.2 Object model......Page 57
6.6.3 Object lifetime......Page 58
6.6.4 Storage duration......Page 61
6.6.4.4 Dynamic storage duration......Page 62
6.6.4.4.2 Deallocation functions......Page 63
6.6.4.4.3 Safely-derived pointers......Page 64
6.6.6 Temporary objects......Page 65
6.7 Types......Page 68
6.7.1 Fundamental types......Page 70
6.7.2 Compound types......Page 72
6.7.3 CV-qualifiers......Page 73
6.8.1 Sequential execution......Page 74
6.8.2.1 Data races......Page 77
6.8.2.2 Forward progress......Page 80
6.8.3.2 Static initialization......Page 82
6.8.3.3 Dynamic initialization of non-local variables......Page 83
6.8.3.4 Termination......Page 84
7.1 Preamble......Page 86
7.2.1 Value category......Page 87
7.2.2 Type......Page 88
7.2.3 Context dependence......Page 89
7.3 Standard conversions......Page 90
7.3.4 Temporary materialization conversion......Page 91
7.3.6 Integral promotions......Page 92
7.3.11 Pointer conversions......Page 93
7.4 Usual arithmetic conversions......Page 94
7.5.2 This......Page 95
7.5.4 Names......Page 96
7.5.4.2 Qualified names......Page 97
7.5.5 Lambda expressions......Page 98
7.5.5.1 Closure types......Page 99
7.5.5.2 Captures......Page 102
7.5.7 Requires expressions......Page 107
7.5.7.3 Compound requirements......Page 109
7.6.1 Postfix expressions......Page 110
7.6.1.2 Function call......Page 111
7.6.1.4 Class member access......Page 113
7.6.1.6 Dynamic cast......Page 114
7.6.1.8 Static cast......Page 116
7.6.1.9 Reinterpret cast......Page 118
7.6.1.10 Const cast......Page 119
7.6.2.1 Unary operators......Page 120
7.6.2.3 Sizeof......Page 121
7.6.2.4 New......Page 122
7.6.2.5 Delete......Page 126
7.6.3 Explicit type conversion (cast notation)......Page 128
7.6.4 Pointer-to-member operators......Page 129
7.6.6 Additive operators......Page 130
7.6.8 Three-way comparison operator......Page 131
7.6.9 Relational operators......Page 132
7.6.10 Equality operators......Page 133
7.6.13 Bitwise inclusive OR operator......Page 134
7.6.16 Conditional operator......Page 135
7.6.17 Throwing an exception......Page 136
7.6.19 Comma operator......Page 137
7.7 Constant expressions......Page 138
8.1 Labeled statement......Page 143
8.4.1 The if statement......Page 144
8.4.2 The switch statement......Page 145
8.5 Iteration statements......Page 146
8.5.3 The for statement......Page 147
8.6 Jump statements......Page 148
8.6.4 The goto statement......Page 149
8.8 Ambiguity resolution......Page 150
9 Declarations......Page 152
9.1 Specifiers......Page 153
9.1.1 Storage class specifiers......Page 154
9.1.3 The typedef specifier......Page 156
9.1.5 The constexpr specifier......Page 158
9.1.6 The inline specifier......Page 160
9.1.7.1 The cv-qualifiers......Page 161
9.1.7.2 Simple type specifiers......Page 162
9.1.7.3 Elaborated type specifiers......Page 163
9.1.7.4 Decltype specifiers......Page 165
9.1.7.5 Placeholder type specifiers......Page 166
9.1.7.5.1 Placeholder type deduction......Page 168
9.2 Declarators......Page 169
9.2.2 Ambiguity resolution......Page 171
9.2.3 Meaning of declarators......Page 172
9.2.3.1 Pointers......Page 173
9.2.3.2 References......Page 174
9.2.3.3 Pointers to members......Page 175
9.2.3.4 Arrays......Page 176
9.2.3.5 Functions......Page 177
9.2.3.6 Default arguments......Page 181
9.3 Initializers......Page 183
9.3.1 Aggregates......Page 187
9.3.2 Character arrays......Page 191
9.3.3 References......Page 192
9.3.4 List-initialization......Page 194
9.4.2 Explicitly-defaulted functions......Page 199
9.4.3 Deleted definitions......Page 200
9.5 Structured binding declarations......Page 201
9.6 Enumeration declarations......Page 202
9.7.1 Namespace definition......Page 205
9.7.1.2 Namespace member definitions......Page 207
9.7.2 Namespace alias......Page 208
9.7.3 Using directive......Page 209
9.8 The using declaration......Page 211
9.10 Linkage specifications......Page 217
9.11.1 Attribute syntax and semantics......Page 219
9.11.2 Alignment specifier......Page 221
9.11.4.1 Syntax......Page 222
9.11.4.2 Contract conditions......Page 224
9.11.4.3 Checking contracts......Page 225
9.11.6 Fallthrough attribute......Page 226
9.11.8 Maybe unused attribute......Page 227
9.11.11 No unique address attribute......Page 228
10 Classes......Page 230
10.1 Properties of classes......Page 231
10.2 Class names......Page 232
10.3 Class members......Page 233
10.3.1 Member functions......Page 237
10.3.2 Non-static member functions......Page 238
10.3.3 Special member functions......Page 239
10.3.4 Constructors......Page 240
10.3.4.1 Default constructors......Page 241
10.3.4.2 Copy/move constructors......Page 242
10.3.5 Copy/move assignment operator......Page 244
10.3.6 Destructors......Page 246
10.3.7 Conversions......Page 248
10.3.7.1 Conversion by constructor......Page 249
10.3.7.2 Conversion functions......Page 250
10.3.8 Static members......Page 251
10.3.8.2 Static data members......Page 252
10.3.10 Nested class declarations......Page 253
10.3.11 Nested type names......Page 254
10.4 Unions......Page 255
10.4.1 Anonymous unions......Page 256
10.6 Derived classes......Page 257
10.6.1 Multiple base classes......Page 259
10.6.2 Virtual functions......Page 260
10.6.3 Abstract classes......Page 265
10.7 Member name lookup......Page 266
10.8 Member access control......Page 268
10.8.1 Access specifiers......Page 270
10.8.2 Accessibility of base classes and base class members......Page 271
10.8.3 Friends......Page 273
10.8.4 Protected member access......Page 275
10.8.5 Access to virtual functions......Page 276
10.9.1 Explicit initialization......Page 277
10.9.2 Initializing bases and members......Page 278
10.9.3 Initialization by inherited constructor......Page 282
10.9.4 Construction and destruction......Page 284
10.9.5 Copy/move elision......Page 286
10.10.2 Three-way comparison......Page 288
10.11 Free store......Page 289
11.1 Overloadable declarations......Page 292
11.2 Declaration matching......Page 294
11.3.1 Candidate functions and argument lists......Page 295
11.3.1.1.1 Call to named function......Page 297
11.3.1.2 Operators in expressions......Page 298
11.3.1.5 Initialization by conversion function......Page 301
11.3.1.8 Class template argument deduction......Page 302
11.3.2 Viable functions......Page 303
11.3.3 Best viable function......Page 304
11.3.3.1 Implicit conversion sequences......Page 306
11.3.3.1.2 User-defined conversion sequences......Page 308
11.3.3.1.5 List-initialization sequence......Page 309
11.3.3.2 Ranking implicit conversion sequences......Page 312
11.4 Address of overloaded function......Page 314
11.5.1 Unary operators......Page 316
11.5.5 Subscripting......Page 317
11.5.8 User-defined literals......Page 318
11.6 Built-in operators......Page 319
12 Templates......Page 323
12.1 Template parameters......Page 325
12.2 Names of template specializations......Page 328
12.3 Template arguments......Page 330
12.3.1 Template type arguments......Page 332
12.3.2 Template non-type arguments......Page 333
12.3.3 Template template arguments......Page 334
12.4.1.2 Atomic constraints......Page 336
12.4.2 Constrained declarations......Page 337
12.4.4 Partial ordering by constraints......Page 338
12.5 Type equivalence......Page 339
12.6.1 Class templates......Page 340
12.6.1.1 Member functions of class templates......Page 341
12.6.1.4 Enumeration members of class templates......Page 342
12.6.2 Member templates......Page 343
12.6.3 Variadic templates......Page 344
12.6.4 Friends......Page 347
12.6.5 Class template partial specializations......Page 349
12.6.5.1 Matching of class template partial specializations......Page 350
12.6.5.2 Partial ordering of class template specializations......Page 351
12.6.5.3 Members of class template specializations......Page 352
12.6.6.1 Function template overloading......Page 353
12.6.6.2 Partial ordering of function templates......Page 355
12.6.7 Alias templates......Page 357
12.7 Name resolution......Page 358
12.7.1 Locally declared names......Page 362
12.7.2 Dependent names......Page 364
12.7.2.1 Dependent types......Page 365
12.7.2.2 Type-dependent expressions......Page 368
12.7.2.3 Value-dependent expressions......Page 369
12.7.4 Dependent name resolution......Page 370
12.7.4.2 Candidate functions......Page 371
12.8 Template instantiation and specialization......Page 372
12.8.1 Implicit instantiation......Page 373
12.8.2 Explicit instantiation......Page 377
12.8.3 Explicit specialization......Page 380
12.9 Function template specializations......Page 384
12.9.1 Explicit template argument specification......Page 385
12.9.2 Template argument deduction......Page 386
12.9.2.1 Deducing template arguments from a function call......Page 390
12.9.2.3 Deducing conversion function template arguments......Page 393
12.9.2.4 Deducing template arguments during partial ordering......Page 394
12.9.2.5 Deducing template arguments from a type......Page 395
12.9.2.6 Deducing template arguments from a function declaration......Page 401
12.9.3 Overload resolution......Page 402
12.10 Deduction guides......Page 403
13 Exception handling......Page 404
13.1 Throwing an exception......Page 405
13.2 Constructors and destructors......Page 406
13.3 Handling an exception......Page 407
13.4 Exception specifications......Page 408
13.5.1 The std::terminate function......Page 411
13.5.2 The std::uncaught_exceptions() function......Page 412
14 Preprocessing directives......Page 413
14.1 Conditional inclusion......Page 414
14.2 Source file inclusion......Page 416
14.3 Macro replacement......Page 417
14.3.1 Argument substitution......Page 418
14.3.4 Rescanning and further replacement......Page 420
14.3.5 Scope of macro definitions......Page 421
14.8 Predefined macro names......Page 423
14.9 Pragma operator......Page 426
15.1 General......Page 427
15.3 Definitions......Page 428
15.4.1.3 Requirements......Page 431
15.4.1.4 Detailed specifications......Page 432
15.4.2.1.1 General......Page 433
15.4.2.1.4 Bitmask types......Page 434
15.4.2.1.5.2 Multibyte strings......Page 435
15.4.2.4 Private members......Page 436
15.5.1.2 Headers......Page 437
15.5.2.3 Linkage......Page 439
15.5.3.1 Template argument requirements......Page 440
15.5.3.2 Swappable requirements......Page 441
15.5.3.3 Cpp17NullablePointer requirements......Page 442
15.5.3.5 Cpp17Allocator requirements......Page 443
15.5.4.2.1 Namespace std......Page 448
15.5.4.3.1 Zombie names......Page 449
15.5.4.3.3 External linkage......Page 450
15.5.4.6 Replacement functions......Page 451
15.5.4.9 Function arguments......Page 452
15.5.5.4 Non-member functions......Page 453
15.5.5.9 Data race avoidance......Page 454
15.5.5.14 Value of error codes......Page 455
15.5.5.15 Moved-from state of library types......Page 456
16.2.1 Header
synopsis......Page 457
16.2.2 Header synopsis......Page 458
16.2.3 Null pointers......Page 459
16.2.5 byte type operations......Page 460
16.3.1 General......Page 461
16.3.2 Header synopsis......Page 463
16.3.4 Class template numeric_limits......Page 464
16.3.4.1 numeric_limits members......Page 465
16.3.4.2 numeric_limits specializations......Page 469
16.3.5 Header synopsis......Page 470
16.4.1 Header synopsis......Page 471
16.5 Start and termination......Page 472
16.6.1 Header synopsis......Page 474
16.6.2.1 Single-object forms......Page 475
16.6.2.2 Array forms......Page 476
16.6.2.4 Data races......Page 478
16.6.3.3 Type new_handler......Page 479
16.6.5 Hardware interference size......Page 480
16.7.2 Class type_info......Page 481
16.7.4 Class bad_typeid......Page 482
16.9.1 Header synopsis......Page 483
16.9.3 Class bad_exception......Page 484
16.9.6 Exception propagation......Page 485
16.9.7 nested_exception......Page 486
16.10.1 Header synopsis......Page 487
16.11.1 Header synopsis......Page 488
16.11.2.2 Class weak_equality......Page 489
16.11.2.3 Class strong_equality......Page 490
16.11.2.4 Class partial_ordering......Page 491
16.11.2.5 Class weak_ordering......Page 492
16.11.2.6 Class strong_ordering......Page 493
16.11.4 Comparison algorithms......Page 495
16.12.2 Header synopsis......Page 496
16.12.4 Signal handlers......Page 497
17.2 Equality preservation......Page 499
17.3 Header synopsis......Page 500
17.4.4 Concept ConvertibleTo......Page 502
17.4.6 Concept Common......Page 503
17.4.9 Concept Swappable......Page 504
17.4.14 Concept CopyConstructible......Page 506
17.5.3 Concept EqualityComparable......Page 507
17.5.4 Concept StrictTotallyOrdered......Page 508
17.7.2 Concept Invocable......Page 509
17.7.6 Concept StrictWeakOrder......Page 510
18.2.2 Class logic_error......Page 511
18.2.5 Class length_error......Page 512
18.2.8 Class range_error......Page 513
18.3.2 The assert macro......Page 514
18.4.1 Header synopsis......Page 515
18.5.1 Header synopsis......Page 516
18.5.2.1 Overview......Page 518
18.5.2.4 Program-defined classes derived from error_category......Page 519
18.5.3.1 Overview......Page 520
18.5.3.4 Observers......Page 521
18.5.4.2 Constructors......Page 522
18.5.5 Comparison functions......Page 523
18.5.7.2 Members......Page 524
19.2.1 Header synopsis......Page 526
19.2.2 swap......Page 528
19.2.4 Forward/move helpers......Page 529
19.4.1 In general......Page 530
19.4.2 Class template pair......Page 531
19.4.3 Specialized algorithms......Page 533
19.4.5 Piecewise construction......Page 534
19.5.2 Header synopsis......Page 535
19.5.3 Class template tuple......Page 536
19.5.3.1 Construction......Page 537
19.5.3.2 Assignment......Page 539
19.5.3.4 Tuple creation functions......Page 540
19.5.3.5 Calling a function with a tuple of arguments......Page 541
19.5.3.6 Tuple helper classes......Page 542
19.5.3.8 Relational operators......Page 543
19.6.1 In general......Page 544
19.6.2 Header synopsis......Page 545
19.6.3 Class template optional......Page 546
19.6.3.1 Constructors......Page 547
19.6.3.3 Assignment......Page 549
19.6.3.4 Swap......Page 552
19.6.3.5 Observers......Page 553
19.6.6 Relational operators......Page 554
19.6.8 Comparison with T......Page 555
19.6.9 Specialized algorithms......Page 556
19.7.2 Header synopsis......Page 557
19.7.3 Class template variant......Page 559
19.7.3.1 Constructors......Page 560
19.7.3.2 Destructor......Page 561
19.7.3.3 Assignment......Page 562
19.7.3.4 Modifiers......Page 563
19.7.4 variant helper classes......Page 564
19.7.5 Value access......Page 565
19.7.6 Relational operators......Page 566
19.7.11 Class bad_variant_access......Page 567
19.8.2 Class bad_any_cast......Page 568
19.8.3.1 Construction and destruction......Page 569
19.8.3.2 Assignment......Page 570
19.8.3.3 Modifiers......Page 571
19.8.4 Non-member functions......Page 572
19.9.2 Class template bitset......Page 573
19.9.2.2 Members......Page 575
19.9.4 bitset operators......Page 578
19.10.2 Header synopsis......Page 579
19.10.3.1 Member types......Page 586
19.10.5 Pointer safety......Page 587
19.10.7 Allocator argument tag......Page 588
19.10.8.2 Uses-allocator construction......Page 589
19.10.9.1 Member types......Page 591
19.10.9.2 Static member functions......Page 592
19.10.10.2 Operators......Page 593
19.10.11.1 Special memory concepts......Page 594
19.10.11.3 uninitialized_default_construct......Page 595
19.10.11.5 uninitialized_copy......Page 596
19.10.11.6 uninitialized_move......Page 597
19.10.11.7 uninitialized_fill......Page 598
19.10.11.8 destroy......Page 599
19.11.1.1.2 default_delete......Page 600
19.11.1.2 unique_ptr for single objects......Page 601
19.11.1.2.1 Constructors......Page 602
19.11.1.2.2 Destructor......Page 603
19.11.1.2.4 Observers......Page 604
19.11.1.3 unique_ptr for array objects with a runtime length......Page 605
19.11.1.3.2 Assignment......Page 606
19.11.1.5 Specialized algorithms......Page 607
19.11.3 Class template shared_ptr......Page 609
19.11.3.1 Constructors......Page 611
19.11.3.2 Destructor......Page 612
19.11.3.5 Observers......Page 613
19.11.3.6 Creation......Page 614
19.11.3.7 Comparison......Page 617
19.11.3.9 Casts......Page 618
19.11.3.11 I/O......Page 619
19.11.4.1 Constructors......Page 620
19.11.4.5 Observers......Page 621
19.11.6 Class template enable_shared_from_this......Page 622
19.11.8 Atomic specializations for smart pointers......Page 623
19.11.8.1 Atomic specialization for shared_ptr......Page 624
19.11.8.2 Atomic specialization for weak_ptr......Page 625
19.12.1 Header synopsis......Page 627
19.12.2.2 Private virtual member functions......Page 628
19.12.3 Class template polymorphic_allocator......Page 629
19.12.3.3 Equality......Page 630
19.12.5.1 Classes synchronized_pool_resource and unsynchronized_pool_resource......Page 631
19.12.5.2 pool_options data members......Page 632
19.12.5.4 Members......Page 633
19.12.6.1 Constructors and destructor......Page 634
19.13.1 Header synopsis......Page 635
19.13.3 Constructors......Page 637
19.13.4 Members......Page 638
19.14.1 Header synopsis......Page 639
19.14.3 Requirements......Page 642
19.14.5 Class template reference_wrapper......Page 643
19.14.5.5 Helper functions......Page 644
19.14.6.2 Class template minus......Page 645
19.14.6.6 Class template negate......Page 646
19.14.7.2 Class template not_equal_to......Page 647
19.14.7.5 Class template greater_equal......Page 648
19.14.8 Range comparisons......Page 649
19.14.9.1 Class template logical_and......Page 651
19.14.10.1 Class template bit_and......Page 652
19.14.11 Class identity......Page 653
19.14.14.1 Class template is_bind_expression......Page 654
19.14.14.3 Function template bind......Page 655
19.14.16 Polymorphic function wrappers......Page 656
19.14.16.2 Class template function......Page 657
19.14.16.2.1 Constructors and destructor......Page 658
19.14.16.2.3 Capacity......Page 659
19.14.17 Searchers......Page 660
19.14.17.2 Class template boyer_moore_searcher......Page 661
19.14.17.3 Class template boyer_moore_horspool_searcher......Page 662
19.15.1 Requirements......Page 663
19.15.2 Header synopsis......Page 664
19.15.3 Helper classes......Page 670
19.15.4.2 Composite type traits......Page 671
19.15.4.3 Type properties......Page 672
19.15.5 Type property queries......Page 678
19.15.6 Relationships between types......Page 679
19.15.7.1 Const-volatile modifications......Page 680
19.15.7.3 Sign modifications......Page 681
19.15.7.6 Other transformations......Page 682
19.15.8 Logical operator traits......Page 686
19.16.1 In general......Page 687
19.16.3 Class template ratio......Page 688
19.16.5 Comparison of ratios......Page 689
19.17.3 type_index members......Page 690
19.18.2 Header synopsis......Page 691
19.18.7 Execution policy objects......Page 692
19.19.2 Primitive numeric output conversion......Page 693
19.19.3 Primitive numeric input conversion......Page 694
20.2.1 Character traits requirements......Page 696
20.2.3.1 struct char_traits......Page 698
20.2.3.3 struct char_traits......Page 699
20.2.3.5 struct char_traits......Page 700
20.3.1 Header synopsis......Page 701
20.3.2 Class template basic_string......Page 705
20.3.2.1 General requirements......Page 709
20.3.2.2 Constructors and assignment operators......Page 710
20.3.2.4 Capacity......Page 712
20.3.2.6.1 basic_string::operator+=......Page 713
20.3.2.6.2 basic_string::append......Page 714
20.3.2.6.3 basic_string::assign......Page 715
20.3.2.6.4 basic_string::insert......Page 716
20.3.2.6.5 basic_string::erase......Page 717
20.3.2.6.6 basic_string::replace......Page 718
20.3.2.6.8 basic_string::swap......Page 719
20.3.2.7.2 Searching......Page 720
20.3.2.7.4 basic_string::compare......Page 721
20.3.3.1 operator+......Page 722
20.3.3.2 Non-member comparison functions......Page 723
20.3.3.4 Inserters and extractors......Page 724
20.3.3.5 Erasure......Page 725
20.3.4 Numeric conversions......Page 726
20.3.6 Suffix for basic_string literals......Page 727
20.4.1 Header synopsis......Page 728
20.4.2 Class template basic_string_view......Page 729
20.4.2.2 Iterator support......Page 731
20.4.2.5 Modifiers......Page 732
20.4.2.6 String operations......Page 733
20.4.2.7 Searching......Page 734
20.4.3 Non-member comparison functions......Page 735
20.4.5 Hash support......Page 736
20.5.2 Header synopsis......Page 737
20.5.4 Header synopsis......Page 738
20.5.6 Multibyte / wide string and character conversion functions......Page 740
21.2.1 General container requirements......Page 742
21.2.3 Sequence containers......Page 748
21.2.4.1 Overview......Page 752
21.2.4.4 Observers......Page 754
21.2.6 Associative containers......Page 755
21.2.7 Unordered associative containers......Page 764
21.3.2 Header synopsis......Page 776
21.3.4 Header synopsis......Page 777
21.3.5 Header synopsis......Page 778
21.3.7.1 Overview......Page 779
21.3.7.2 Constructors, copy, and assignment......Page 780
21.3.7.6 Tuple interface......Page 781
21.3.8.1 Overview......Page 782
21.3.8.4 Modifiers......Page 784
21.3.9.1 Overview......Page 785
21.3.9.2 Constructors, copy, and assignment......Page 787
21.3.9.5 Modifiers......Page 788
21.3.9.6 Operations......Page 790
21.3.10.1 Overview......Page 791
21.3.10.4 Modifiers......Page 794
21.3.10.5 Operations......Page 795
21.3.11.1 Overview......Page 797
21.3.11.3 Capacity......Page 799
21.3.11.4 Data......Page 800
21.3.12 Class vector......Page 801
21.4.1 In general......Page 803
21.4.2 Header