Standard for Programming Language C++

This document was uploaded by one of our users. The uploader already confirmed that they had the permission to publish it. If you are author/publisher or own the copyright of this documents, please report to us by using this DMCA report form.

Simply click on the Download Book button.

Yes, Book downloads on Ebookily are 100% Free.

Sometimes the book is free on Amazon As well, so go ahead and hit "Search on Amazon"

Year: 2017

Language: English

Contents
List of Tables
List of Figures
1 General
1.1 Scope
1.2 Normative references
1.3 Terms and definitions
1.3.1 access
1.3.2 argument
1.3.3 argument
1.3.4 argument
1.3.5 argument
1.3.6 block
1.3.7 conditionally-supported
1.3.8 diagnostic message
1.3.9 dynamic type
1.3.10 dynamic type
1.3.11 ill-formed program
1.3.12 implementation-defined behavior
1.3.13 implementation limits
1.3.14 locale-specific behavior
1.3.15 multibyte character
1.3.16 parameter
1.3.17 parameter
1.3.18 parameter
1.3.19 signature
1.3.20 signature
1.3.21 signature
1.3.22 signature
1.3.23 signature
1.3.24 signature
1.3.25 static type
1.3.26 unblock
1.3.27 undefined behavior
1.3.28 unspecified behavior
1.3.29 well-formed program
1.4 Implementation compliance
1.5 Structure of this International Standard
1.6 Syntax notation
1.7 The C++ memory model
1.8 The C++ object model
1.9 Program execution
1.10 Multi-threaded executions and data races
1.10.1 Data races
1.10.2 Forward progress
1.11 Acknowledgments
2 Lexical conventions
2.1 Separate translation
2.2 Phases of translation
2.3 Character sets
2.4 Preprocessing tokens
2.5 Alternative tokens
2.6 Tokens
2.7 Comments
2.8 Header names
2.9 Preprocessing numbers
2.10 Identifiers
2.11 Keywords
2.12 Operators and punctuators
2.13 Literals
2.13.1 Kinds of literals
2.13.2 Integer literals
2.13.3 Character literals
2.13.4 Floating literals
2.13.5 String literals
2.13.6 Boolean literals
2.13.7 Pointer literals
2.13.8 User-defined literals
3 Basic concepts
3.1 Declarations and definitions
3.2 One-definition rule
3.3 Scope
3.3.1 Declarative regions and scopes
3.3.2 Point of declaration
3.3.3 Block scope
3.3.4 Function prototype scope
3.3.5 Function scope
3.3.6 Namespace scope
3.3.7 Class scope
3.3.8 Enumeration scope
3.3.9 Template parameter scope
3.3.10 Name hiding
3.4 Name lookup
3.4.1 Unqualified name lookup
3.4.2 Argument-dependent name lookup
3.4.3 Qualified name lookup
3.4.3.1 Class members
3.4.3.2 Namespace members
3.4.4 Elaborated type specifiers
3.4.5 Class member access
3.4.6 Using-directives and namespace aliases
3.5 Program and linkage
3.6 Start and termination
3.6.1 main function
3.6.2 Static initialization
3.6.3 Dynamic initialization of non-local variables
3.6.4 Termination
3.7 Storage duration
3.7.1 Static storage duration
3.7.2 Thread storage duration
3.7.3 Automatic storage duration
3.7.4 Dynamic storage duration
3.7.4.1 Allocation functions
3.7.4.2 Deallocation functions
3.7.4.3 Safely-derived pointers
3.7.5 Duration of subobjects
3.8 Object lifetime
3.9 Types
3.9.1 Fundamental types
3.9.2 Compound types
3.9.3 CV-qualifiers
3.10 Lvalues and rvalues
3.11 Alignment
4 Standard conversions
4.1 Lvalue-to-rvalue conversion
4.2 Array-to-pointer conversion
4.3 Function-to-pointer conversion
4.4 Temporary materialization conversion
4.5 Qualification conversions
4.6 Integral promotions
4.7 Floating-point promotion
4.8 Integral conversions
4.9 Floating-point conversions
4.10 Floating-integral conversions
4.11 Pointer conversions
4.12 Pointer to member conversions
4.13 Function pointer conversions
4.14 Boolean conversions
4.15 Integer conversion rank
5 Expressions
5.1 Primary expressions
5.1.1 Literals
5.1.2 This
5.1.3 Parentheses
5.1.4 Names
5.1.4.1 Unqualified names
5.1.4.2 Qualified names
5.1.5 Lambda expressions
5.1.6 Fold expressions
5.2 Postfix expressions
5.2.1 Subscripting
5.2.2 Function call
5.2.3 Explicit type conversion (functional notation)
5.2.4 Pseudo destructor call
5.2.5 Class member access
5.2.6 Increment and decrement
5.2.7 Dynamic cast
5.2.8 Type identification
5.2.9 Static cast
5.2.10 Reinterpret cast
5.2.11 Const cast
5.3 Unary expressions
5.3.1 Unary operators
5.3.2 Increment and decrement
5.3.3 Sizeof
5.3.4 New
5.3.5 Delete
5.3.6 Alignof
5.3.7 noexcept operator
5.4 Explicit type conversion (cast notation)
5.5 Pointer-to-member operators
5.6 Multiplicative operators
5.7 Additive operators
5.8 Shift operators
5.9 Relational operators
5.10 Equality operators
5.11 Bitwise AND operator
5.12 Bitwise exclusive OR operator
5.13 Bitwise inclusive OR operator
5.14 Logical AND operator
5.15 Logical OR operator
5.16 Conditional operator
5.17 Throwing an exception
5.18 Assignment and compound assignment operators
5.19 Comma operator
5.20 Constant expressions
6 Statements
6.1 Labeled statement
6.2 Expression statement
6.3 Compound statement or block
6.4 Selection statements
6.4.1 The if statement
6.4.2 The switch statement
6.5 Iteration statements
6.5.1 The while statement
6.5.2 The do statement
6.5.3 The for statement
6.5.4 The range-based for statement
6.6 Jump statements
6.6.1 The break statement
6.6.2 The continue statement
6.6.3 The return statement
6.6.4 The goto statement
6.7 Declaration statement
6.8 Ambiguity resolution
7 Declarations
7.1 Specifiers
7.1.1 Storage class specifiers
7.1.2 Function specifiers
7.1.3 The typedef specifier
7.1.4 The friend specifier
7.1.5 The constexpr specifier
7.1.6 The inline specifier
7.1.7 Type specifiers
7.1.7.1 The cv-qualifiers
7.1.7.2 Simple type specifiers
7.1.7.3 Elaborated type specifiers
7.1.7.4 The auto specifier
7.1.7.4.1 Placeholder type deduction
7.1.7.5 Deduced class template specialization types
7.2 Enumeration declarations
7.3 Namespaces
7.3.1 Namespace definition
7.3.1.1 Unnamed namespaces
7.3.1.2 Namespace member definitions
7.3.2 Namespace alias
7.3.3 The using declaration
7.3.4 Using directive
7.4 The asm declaration
7.5 Linkage specifications
7.6 Attributes
7.6.1 Attribute syntax and semantics
7.6.2 Alignment specifier
7.6.3 Carries dependency attribute
7.6.4 Deprecated attribute
7.6.5 Fallthrough attribute
7.6.6 Maybe unused attribute
7.6.7 Nodiscard attribute
7.6.8 Noreturn attribute
8 Declarators
8.1 Type names
8.2 Ambiguity resolution
8.3 Meaning of declarators
8.3.1 Pointers
8.3.2 References
8.3.3 Pointers to members
8.3.4 Arrays
8.3.5 Functions
8.3.6 Default arguments
8.4 Function definitions
8.4.1 In general
8.4.2 Explicitly-defaulted functions
8.4.3 Deleted definitions
8.5 Decomposition declarations
8.6 Initializers
8.6.1 Aggregates
8.6.2 Character arrays
8.6.3 References
8.6.4 List-initialization
9 Classes
9.1 Class names
9.2 Class members
9.2.1 Member functions
9.2.2 Non-static member functions
9.2.2.1 The this pointer
9.2.3 Static members
9.2.3.1 Static member functions
9.2.3.2 Static data members
9.2.4 Bit-fields
9.2.5 Nested class declarations
9.2.6 Nested type names
9.3 Unions
9.3.1 Anonymous unions
9.4 Local class declarations
10 Derived classes
10.1 Multiple base classes
10.2 Member name lookup
10.3 Virtual functions
10.4 Abstract classes
11 Member access control
11.1 Access specifiers
11.2 Accessibility of base classes and base class members
11.3 Friends
11.4 Protected member access
11.5 Access to virtual functions
11.6 Multiple access
11.7 Nested classes
12 Special member functions
12.1 Constructors
12.2 Temporary objects
12.3 Conversions
12.3.1 Conversion by constructor
12.3.2 Conversion functions
12.4 Destructors
12.5 Free store
12.6 Initialization
12.6.1 Explicit initialization
12.6.2 Initializing bases and members
12.6.3 Initialization by inherited constructor
12.7 Construction and destruction
12.8 Copying and moving class objects
12.8.1 Copy/move constructors
12.8.2 Copy/move assignment operator
12.8.3 Copy/move elision
13 Overloading
13.1 Overloadable declarations
13.2 Declaration matching
13.3 Overload resolution
13.3.1 Candidate functions and argument lists
13.3.1.1 Function call syntax
13.3.1.1.1 Call to named function
13.3.1.1.2 Call to object of class type
13.3.1.2 Operators in expressions
13.3.1.3 Initialization by constructor
13.3.1.4 Copy-initialization of class by user-defined conversion
13.3.1.5 Initialization by conversion function
13.3.1.6 Initialization by conversion function for direct reference binding
13.3.1.7 Initialization by list-initialization
13.3.1.8 Class template argument deduction
13.3.2 Viable functions
13.3.3 Best viable function
13.3.3.1 Implicit conversion sequences
13.3.3.1.1 Standard conversion sequences
13.3.3.1.2 User-defined conversion sequences
13.3.3.1.3 Ellipsis conversion sequences
13.3.3.1.4 Reference binding
13.3.3.1.5 List-initialization sequence
13.3.3.2 Ranking implicit conversion sequences
13.4 Address of overloaded function
13.5 Overloaded operators
13.5.1 Unary operators
13.5.2 Binary operators
13.5.3 Assignment
13.5.4 Function call
13.5.5 Subscripting
13.5.6 Class member access
13.5.7 Increment and decrement
13.5.8 User-defined literals
13.6 Built-in operators
14 Templates
14.1 Template parameters
14.2 Names of template specializations
14.3 Template arguments
14.3.1 Template type arguments
14.3.2 Template non-type arguments
14.3.3 Template template arguments
14.4 Type equivalence
14.5 Template declarations
14.5.1 Class templates
14.5.1.1 Member functions of class templates
14.5.1.2 Member classes of class templates
14.5.1.3 Static data members of class templates
14.5.1.4 Enumeration members of class templates
14.5.2 Member templates
14.5.3 Variadic templates
14.5.4 Friends
14.5.5 Class template partial specializations
14.5.5.1 Matching of class template partial specializations
14.5.5.2 Partial ordering of class template specializations
14.5.5.3 Members of class template specializations
14.5.6 Function templates
14.5.6.1 Function template overloading
14.5.6.2 Partial ordering of function templates
14.5.7 Alias templates
14.6 Name resolution
14.6.1 Locally declared names
14.6.2 Dependent names
14.6.2.1 Dependent types
14.6.2.2 Type-dependent expressions
14.6.2.3 Value-dependent expressions
14.6.2.4 Dependent template arguments
14.6.3 Non-dependent names
14.6.4 Dependent name resolution
14.6.4.1 Point of instantiation
14.6.4.2 Candidate functions
14.6.5 Friend names declared within a class template
14.7 Template instantiation and specialization
14.7.1 Implicit instantiation
14.7.2 Explicit instantiation
14.7.3 Explicit specialization
14.8 Function template specializations
14.8.1 Explicit template argument specification
14.8.2 Template argument deduction
14.8.2.1 Deducing template arguments from a function call
14.8.2.2 Deducing template arguments taking the address of a function template
14.8.2.3 Deducing conversion function template arguments
14.8.2.4 Deducing template arguments during partial ordering
14.8.2.5 Deducing template arguments from a type
14.8.2.6 Deducing template arguments from a function declaration
14.8.3 Overload resolution
14.9 Deduction guides
15 Exception handling
15.1 Throwing an exception
15.2 Constructors and destructors
15.3 Handling an exception
15.4 Exception specifications
15.5 Special functions
15.5.1 The std::terminate() function
15.5.2 The std::uncaught_exceptions() function
16 Preprocessing directives
16.1 Conditional inclusion
16.2 Source file inclusion
16.3 Macro replacement
16.3.1 Argument substitution
16.3.2 The # operator
16.3.3 The ## operator
16.3.4 Rescanning and further replacement
16.3.5 Scope of macro definitions
16.4 Line control
16.5 Error directive
16.6 Pragma directive
16.7 Null directive
16.8 Predefined macro names
16.9 Pragma operator
17 Library introduction
17.1 General
17.2 The C standard library
17.3 Definitions
17.3.1 arbitrary-positional stream
17.3.2 character
17.3.3 character container type
17.3.4 comparison function
17.3.5 component
17.3.6 constant subexpression
17.3.7 deadlock
17.3.8 default behavior
17.3.9 default behavior
17.3.10 handler function
17.3.11 iostream class templates
17.3.12 modifier function
17.3.13 move assignment
17.3.14 move construction
17.3.15 NTCTS
17.3.16 object state
17.3.17 observer function
17.3.18 referenceable type
17.3.19 replacement function
17.3.20 repositional stream
17.3.21 required behavior
17.3.22 reserved function
17.3.23 stable algorithm
17.3.24 traits class
17.3.25 valid but unspecified state
17.4 Method of description (Informative)
17.4.1 Structure of each clause
17.4.1.1 Elements
17.4.1.2 Summary
17.4.1.3 Requirements
17.4.1.4 Detailed specifications
17.4.1.5 C library
17.4.2 Other conventions
17.4.2.1 Type descriptions
17.4.2.1.1 General
17.4.2.1.2 Exposition-only types
17.4.2.1.3 Enumerated types
17.4.2.1.4 Bitmask types
17.4.2.1.5 Character sequences
17.4.2.1.5.1 Byte strings
17.4.2.1.5.2 Multibyte strings
17.4.2.2 Functions within classes
17.4.2.3 Private members
17.5 Library-wide requirements
17.5.1 Library contents and organization
17.5.1.1 Library contents
17.5.1.2 Headers
17.5.1.3 Freestanding implementations
17.5.2 Using the library
17.5.2.1 Overview
17.5.2.2 Headers
17.5.2.3 Linkage
17.5.3 Requirements on types and expressions
17.5.3.1 Template argument requirements
17.5.3.2 Swappable requirements
17.5.3.3 NullablePointer requirements
17.5.3.4 Hash requirements
17.5.3.5 Allocator requirements
17.5.3.5.1 Allocator completeness requirements
17.5.4 Constraints on programs
17.5.4.1 Overview
17.5.4.2 Namespace use
17.5.4.2.1 Namespace std
17.5.4.2.2 Namespace posix
17.5.4.2.3 Namespaces for future standardization
17.5.4.3 Reserved names
17.5.4.3.1 Zombie names
17.5.4.3.2 Macro names
17.5.4.3.3 External linkage
17.5.4.3.4 Types
17.5.4.3.5 User-defined literal suffixes
17.5.4.4 Headers
17.5.4.5 Derived classes
17.5.4.6 Replacement functions
17.5.4.7 Handler functions
17.5.4.8 Other functions
17.5.4.9 Function arguments
17.5.4.10 Library object access
17.5.4.11 Requires paragraph
17.5.5 Conforming implementations
17.5.5.1 Overview
17.5.5.2 Headers
17.5.5.3 Restrictions on macro definitions
17.5.5.4 Non-member functions
17.5.5.5 Member functions
17.5.5.6 Constexpr functions and constructors
17.5.5.7 Requirements for stable algorithms
17.5.5.8 Reentrancy
17.5.5.9 Data race avoidance
17.5.5.10 Protection within classes
17.5.5.11 Derived classes
17.5.5.12 Restrictions on exception handling
17.5.5.13 Restrictions on storage of pointers
17.5.5.14 Value of error codes
17.5.5.15 Moved-from state of library types
18 Language support library
18.1 General
18.2 Common definitions
18.2.1 Header synopsis
18.2.2 Header synopsis
18.2.3 Null pointers
18.2.4 Sizes, alignments, and offsets
18.3 Implementation properties
18.3.1 General
18.3.2 Header synopsis
18.3.3 Floating-point type properties
18.3.3.1 Type float_round_style
18.3.3.2 Type float_denorm_style
18.3.4 Class template numeric_limits
18.3.4.1 numeric_limits members
18.3.4.2 numeric_limits specializations
18.3.5 Header synopsis
18.3.6 Header synopsis
18.4 Integer types
18.4.1 Header synopsis
18.5 Start and termination
18.6 Dynamic memory management
18.6.1 Header synopsis
18.6.2 Storage allocation and deallocation
18.6.2.1 Single-object forms
18.6.2.2 Array forms
18.6.2.3 Non-allocating forms
18.6.2.4 Data races
18.6.3 Storage allocation errors
18.6.3.1 Class bad_alloc
18.6.3.2 Class bad_array_new_length
18.6.3.3 Type new_handler
18.6.3.4 set_new_handler
18.6.3.5 get_new_handler
18.6.4 Pointer optimization barrier
18.6.5 Hardware interference size
18.7 Type identification
18.7.1 Header synopsis
18.7.2 Class type_info
18.7.3 Class bad_cast
18.7.4 Class bad_typeid
18.8 Exception handling
18.8.1 Header synopsis
18.8.2 Class exception
18.8.3 Class bad_exception
18.8.4 Abnormal termination
18.8.4.1 Type terminate_handler
18.8.4.2 set_terminate
18.8.4.3 get_terminate
18.8.4.4 terminate
18.8.5 uncaught_exceptions
18.8.6 Exception propagation
18.8.7 nested_exception
18.9 Initializer lists
18.9.1 Header synopsis
18.9.2 Initializer list constructors
18.9.3 Initializer list access
18.9.4 Initializer list range access
18.10 Other runtime support
18.10.1 Header synopsis
18.10.2 Header synopsis
18.10.3 Header synopsis
18.10.4 Header synopsis
18.10.5 Header synopsis
19 Diagnostics library
19.1 General
19.2 Exception classes
19.2.1 Header synopsis
19.2.2 Class logic_error
19.2.3 Class domain_error
19.2.4 Class invalid_argument
19.2.5 Class length_error
19.2.6 Class out_of_range
19.2.7 Class runtime_error
19.2.8 Class range_error
19.2.9 Class overflow_error
19.2.10 Class underflow_error
19.3 Assertions
19.3.1 Header synopsis
19.3.2 The assert macro
19.4 Error numbers
19.4.1 Header synopsis
19.5 System error support
19.5.1 Header synopsis
19.5.2 Class error_category
19.5.2.1 Class error_category overview
19.5.2.2 Class error_category virtual members
19.5.2.3 Class error_category non-virtual members
19.5.2.4 Program defined classes derived from error_category
19.5.2.5 Error category objects
19.5.3 Class error_code
19.5.3.1 Class error_code overview
19.5.3.2 Class error_code constructors
19.5.3.3 Class error_code modifiers
19.5.3.4 Class error_code observers
19.5.3.5 Class error_code non-member functions
19.5.4 Class error_condition
19.5.4.1 Class error_condition overview
19.5.4.2 Class error_condition constructors
19.5.4.3 Class error_condition modifiers
19.5.4.4 Class error_condition observers
19.5.4.5 Class error_condition non-member functions
19.5.5 Comparison functions
19.5.6 System error hash support
19.5.7 Class system_error
19.5.7.1 Class system_error overview
19.5.7.2 Class system_error members
20 General utilities library
20.1 General
20.2 Utility components
20.2.1 Header synopsis
20.2.2 Operators
20.2.3 swap
20.2.4 exchange
20.2.5 Forward/move helpers
20.2.6 Function template as_const
20.2.7 Function template declval
20.2.8 Primitive numeric output conversion
20.2.9 Primitive numeric input conversion
20.3 Compile-time integer sequences
20.3.1 In general
20.3.2 Class template integer_sequence
20.3.3 Alias template make_integer_sequence
20.4 Pairs
20.4.1 In general
20.4.2 Class template pair
20.4.3 Specialized algorithms
20.4.4 Tuple-like access to pair
20.4.5 Piecewise construction
20.5 Tuples
20.5.1 In general
20.5.2 Header synopsis
20.5.3 Class template tuple
20.5.3.1 Construction
20.5.3.2 Assignment
20.5.3.3 swap
20.5.3.4 Tuple creation functions
20.5.3.5 Calling a function with a tuple of arguments
20.5.3.6 Tuple helper classes
20.5.3.7 Element access
20.5.3.8 Relational operators
20.5.3.9 Tuple traits
20.5.3.10 Tuple specialized algorithms
20.6 Optional objects
20.6.1 In general
20.6.2 Header synopsis
20.6.3 Class template optional
20.6.3.1 Constructors
20.6.3.2 Destructor
20.6.3.3 Assignment
20.6.3.4 Swap
20.6.3.5 Observers
20.6.3.6 Modifiers
20.6.4 No-value state indicator
20.6.5 Class bad_optional_access
20.6.6 Relational operators
20.6.7 Comparison with nullopt
20.6.8 Comparison with T
20.6.9 Specialized algorithms
20.6.10 Hash support
20.7 Variants
20.7.1 In general
20.7.2 Header synopsis
20.7.3 Class template variant
20.7.3.1 Constructors
20.7.3.2 Destructor
20.7.3.3 Assignment
20.7.3.4 Modifiers
20.7.3.5 Value status
20.7.3.6 Swap
20.7.4 variant helper classes
20.7.5 Value access
20.7.6 Relational operators
20.7.7 Visitation
20.7.8 Class monostate
20.7.9 monostate relational operators
20.7.10 Specialized algorithms
20.7.11 Class bad_variant_access
20.7.12 Hash support
20.7.13 Allocator-related traits
20.8 Storage for any type
20.8.1 Header synopsis
20.8.2 Class bad_any_cast
20.8.3 Class any
20.8.3.1 Construction and destruction
20.8.3.2 Assignment
20.8.3.3 Modifiers
20.8.3.4 Observers
20.8.4 Non-member functions
20.9 Bitsets
20.9.1 Header synopsis
20.9.2 Class template bitset
20.9.2.1 bitset constructors
20.9.2.2 bitset members
20.9.3 bitset hash support
20.9.4 bitset operators
20.10 Memory
20.10.1 In general
20.10.2 Header synopsis
20.10.3 Pointer traits
20.10.3.1 Pointer traits member types
20.10.3.2 Pointer traits member functions
20.10.4 Pointer safety
20.10.5 Align
20.10.6 Allocator argument tag
20.10.7 uses_allocator
20.10.7.1 uses_allocator trait
20.10.7.2 Uses-allocator construction
20.10.8 Allocator traits
20.10.8.1 Allocator traits member types
20.10.8.2 Allocator traits static member functions
20.10.9 The default allocator
20.10.9.1 allocator members
20.10.9.2 allocator globals
20.10.10 Specialized algorithms
20.10.10.1 addressof
20.10.10.2 uninitialized_default_construct
20.10.10.3 uninitialized_value_construct
20.10.10.4 uninitialized_copy
20.10.10.5 uninitialized_move
20.10.10.6 uninitialized_fill
20.10.10.7 destroy
20.10.11 C library memory allocation
20.11 Smart pointers
20.11.1 Class template unique_ptr
20.11.1.1 Default deleters
20.11.1.1.1 In general
20.11.1.1.2 default_delete
20.11.1.1.3 default_delete
20.11.1.2 unique_ptr for single objects
20.11.1.2.1 unique_ptr constructors
20.11.1.2.2 unique_ptr destructor
20.11.1.2.3 unique_ptr assignment
20.11.1.2.4 unique_ptr observers
20.11.1.2.5 unique_ptr modifiers
20.11.1.3 unique_ptr for array objects with a runtime length
20.11.1.3.1 unique_ptr constructors
20.11.1.3.2 unique_ptr assignment
20.11.1.3.3 unique_ptr observers
20.11.1.3.4 unique_ptr modifiers
20.11.1.4 unique_ptr creation
20.11.1.5 unique_ptr specialized algorithms
20.11.2 Shared-ownership pointers
20.11.2.1 Class bad_weak_ptr
20.11.2.2 Class template shared_ptr
20.11.2.2.1 shared_ptr constructors
20.11.2.2.2 shared_ptr destructor
20.11.2.2.3 shared_ptr assignment
20.11.2.2.4 shared_ptr modifiers
20.11.2.2.5 shared_ptr observers
20.11.2.2.6 shared_ptr creation
20.11.2.2.7 shared_ptr comparison
20.11.2.2.8 shared_ptr specialized algorithms
20.11.2.2.9 shared_ptr casts
20.11.2.2.10 get_deleter
20.11.2.2.11 shared_ptr I/O
20.11.2.3 Class template weak_ptr
20.11.2.3.1 weak_ptr constructors
20.11.2.3.2 weak_ptr destructor
20.11.2.3.3 weak_ptr assignment
20.11.2.3.4 weak_ptr modifiers
20.11.2.3.5 weak_ptr observers
20.11.2.3.6 weak_ptr specialized algorithms
20.11.2.4 Class template owner_less
20.11.2.5 Class template enable_shared_from_this
20.11.2.6 shared_ptr atomic access
20.11.2.7 Smart pointer hash support
20.12 Memory resources
20.12.1 Header synopsis
20.12.2 Class memory_resource
20.12.2.1 memory_resource public member functions
20.12.2.2 memory_resource private virtual member functions
20.12.2.3 memory_resource equality
20.12.3 Class template polymorphic_allocator
20.12.3.1 polymorphic_allocator constructors
20.12.3.2 polymorphic_allocator member functions
20.12.3.3 polymorphic_allocator equality
20.12.4 Access to program-wide memory_resource objects
20.12.5 Pool resource classes
20.12.5.1 Classes synchronized_pool_resource and unsynchronized_pool_resource
20.12.5.2 pool_options data members
20.12.5.3 Pool resource constructors and destructors
20.12.5.4 Pool resource members
20.12.6 Class monotonic_buffer_resource
20.12.6.1 monotonic_buffer_resource constructor and destructor
20.12.6.2 monotonic_buffer_resource members
20.13 Class template scoped_allocator_adaptor
20.13.1 Header synopsis
20.13.2 Scoped allocator adaptor member types
20.13.3 Scoped allocator adaptor constructors
20.13.4 Scoped allocator adaptor members
20.13.5 Scoped allocator operators
20.14 Function objects
20.14.1 Header synopsis
20.14.2 Definitions
20.14.3 Requirements
20.14.4 Function template invoke
20.14.5 Class template reference_wrapper
20.14.5.1 reference_wrapper construct/copy/destroy
20.14.5.2 reference_wrapper assignment
20.14.5.3 reference_wrapper access
20.14.5.4 reference_wrapper invocation
20.14.5.5 reference_wrapper helper functions
20.14.6 Arithmetic operations
20.14.6.1 Class template plus
20.14.6.2 Class template minus
20.14.6.3 Class template multiplies
20.14.6.4 Class template divides
20.14.6.5 Class template modulus
20.14.6.6 Class template negate
20.14.7 Comparisons
20.14.7.1 Class template equal_to
20.14.7.2 Class template not_equal_to
20.14.7.3 Class template greater
20.14.7.4 Class template less
20.14.7.5 Class template greater_equal
20.14.7.6 Class template less_equal
20.14.8 Logical operations
20.14.8.1 Class template logical_and
20.14.8.2 Class template logical_or
20.14.8.3 Class template logical_not
20.14.9 Bitwise operations
20.14.9.1 Class template bit_and
20.14.9.2 Class template bit_or
20.14.9.3 Class template bit_xor
20.14.9.4 Class template bit_not
20.14.10 Function template not_fn
20.14.11 Function object binders
20.14.11.1 Class template is_bind_expression
20.14.11.2 Class template is_placeholder
20.14.11.3 Function template bind
20.14.11.4 Placeholders
20.14.12 Function template mem_fn
20.14.13 Polymorphic function wrappers
20.14.13.1 Class bad_function_call
20.14.13.1.1 bad_function_call constructor
20.14.13.2 Class template function
20.14.13.2.1 function construct/copy/destroy
20.14.13.2.2 function modifiers
20.14.13.2.3 function capacity
20.14.13.2.4 function invocation
20.14.13.2.5 function target access
20.14.13.2.6 null pointer comparison functions
20.14.13.2.7 specialized algorithms
20.14.14 Searchers
20.14.14.1 Class template default_searcher
20.14.14.1.1 default_searcher creation functions
20.14.14.2 Class template boyer_moore_searcher
20.14.14.2.1 boyer_moore_searcher creation functions
20.14.14.3 Class template boyer_moore_horspool_searcher
20.14.14.3.1 boyer_moore_horspool_searcher creation functions
20.14.15 Class template hash
20.14.16 Default functor traits
20.15 Metaprogramming and type traits
20.15.1 Requirements
20.15.2 Header synopsis
20.15.3 Helper classes
20.15.4 Unary type traits
20.15.4.1 Primary type categories
20.15.4.2 Composite type traits
20.15.4.3 Type properties
20.15.5 Type property queries
20.15.6 Relationships between types
20.15.7 Transformations between types
20.15.7.1 Const-volatile modifications
20.15.7.2 Reference modifications
20.15.7.3 Sign modifications
20.15.7.4 Array modifications
20.15.7.5 Pointer modifications
20.15.7.6 Other transformations
20.15.8 Logical operator traits
20.16 Compile-time rational arithmetic
20.16.1 In general
20.16.2 Header synopsis
20.16.3 Class template ratio
20.16.4 Arithmetic on ratios
20.16.5 Comparison of ratios
20.16.6 SI types for ratio
20.17 Time utilities
20.17.1 In general
20.17.2 Header synopsis
20.17.3 Clock requirements
20.17.4 Time-related traits
20.17.4.1 treat_as_floating_point
20.17.4.2 duration_values
20.17.4.3 Specializations of common_type
20.17.5 Class template duration
20.17.5.1 duration constructors
20.17.5.2 duration observer
20.17.5.3 duration arithmetic
20.17.5.4 duration special values
20.17.5.5 duration non-member arithmetic
20.17.5.6 duration comparisons
20.17.5.7 duration_cast
20.17.5.8 Suffixes for duration literals
20.17.5.9 duration algorithms
20.17.6 Class template time_point
20.17.6.1 time_point constructors
20.17.6.2 time_point observer
20.17.6.3 time_point arithmetic
20.17.6.4 time_point special values
20.17.6.5 time_point non-member arithmetic
20.17.6.6 time_point comparisons
20.17.6.7 time_point_cast
20.17.7 Clocks
20.17.7.1 Class system_clock
20.17.7.2 Class steady_clock
20.17.7.3 Class high_resolution_clock
20.17.8 Header synopsis
20.18 Class type_index
20.18.1 Header synopsis
20.18.2 type_index overview
20.18.3 type_index members
20.18.4 Hash support
20.19 Execution policies
20.19.1 In general
20.19.2 Header synopsis
20.19.3 Execution policy type trait
20.19.4 Sequenced execution policy
20.19.5 Parallel execution policy
20.19.6 Parallel and unsequenced execution policy
20.19.7 Execution policy objects
21 Strings library
21.1 General
21.2 Character traits
21.2.1 Character traits requirements
21.2.2 Traits typedefs
21.2.3 char_traits specializations
21.2.3.1 struct char_traits
21.2.3.2 struct char_traits
21.2.3.3 struct char_traits
21.2.3.4 struct char_traits
21.3 String classes
21.3.1 Header synopsis
21.3.2 Class template basic_string
21.3.2.1 basic_string general requirements
21.3.2.2 basic_string constructors and assignment operators
21.3.2.3 basic_string iterator support
21.3.2.4 basic_string capacity
21.3.2.5 basic_string element access
21.3.2.6 basic_string modifiers
21.3.2.6.1 basic_string::operator+=
21.3.2.6.2 basic_string::append
21.3.2.6.3 basic_string::assign
21.3.2.6.4 basic_string::insert
21.3.2.6.5 basic_string::erase
21.3.2.6.6 basic_string::replace
21.3.2.6.7 basic_string::copy
21.3.2.6.8 basic_string::swap
21.3.2.7 basic_string string operations
21.3.2.7.1 basic_string accessors
21.3.2.7.2 basic_string::find
21.3.2.7.3 basic_string::rfind
21.3.2.7.4 basic_string::find_first_of
21.3.2.7.5 basic_string::find_last_of
21.3.2.7.6 basic_string::find_first_not_of
21.3.2.7.7 basic_string::find_last_not_of
21.3.2.7.8 basic_string::substr
21.3.2.7.9 basic_string::compare
21.3.3 basic_string non-member functions
21.3.3.1 operator+
21.3.3.2 operator==
21.3.3.3 operator!=
21.3.3.4 operator<
21.3.3.5 operator>
21.3.3.6 operator<=
21.3.3.7 operator>=
21.3.3.8 swap
21.3.3.9 Inserters and extractors
21.3.4 Numeric conversions
21.3.5 Hash support
21.3.6 Suffix for basic_string literals
21.4 String view classes
21.4.1 Header synopsis
21.4.2 Class template basic_string_view
21.4.2.1 Construction and assignment
21.4.2.2 Iterator support
21.4.2.3 Capacity
21.4.2.4 Element access
21.4.2.5 Modifiers
21.4.2.6 String operations
21.4.2.7 Searching
21.4.3 Non-member comparison functions
21.4.4 Inserters and extractors
21.4.5 Hash support
21.4.6 Suffix for basic_string_view literals
21.5 Null-terminated sequence utilities
21.5.1 Header synopsis
21.5.2 Header synopsis
21.5.3 Header synopsis
21.5.4 Header synopsis
21.5.5 Header synopsis
21.5.6 Multibyte / wide string and character conversion functions
22 Localization library
22.1 General
22.2 Header synopsis
22.3 Locales
22.3.1 Class locale
22.3.1.1 locale types
22.3.1.1.1 Type locale::category
22.3.1.1.2 Class locale::facet
22.3.1.1.3 Class locale::id
22.3.1.2 locale constructors and destructor
22.3.1.3 locale members
22.3.1.4 locale operators
22.3.1.5 locale static members
22.3.2 locale globals
22.3.3 Convenience interfaces
22.3.3.1 Character classification
22.3.3.2 Conversions
22.3.3.2.1 Character conversions
22.3.3.2.2 Class template wstring_convert
22.3.3.2.3 Class template wbuffer_convert
22.4 Standard locale categories
22.4.1 The ctype category
22.4.1.1 Class template ctype
22.4.1.1.1 ctype members
22.4.1.1.2 ctype virtual functions
22.4.1.2 Class template ctype_byname
22.4.1.3 ctype specializations
22.4.1.3.1 ctype destructor
22.4.1.3.2 ctype members
22.4.1.3.3 ctype static members
22.4.1.3.4 ctype virtual functions
22.4.1.4 Class template codecvt
22.4.1.4.1 codecvt members
22.4.1.4.2 codecvt virtual functions
22.4.1.5 Class template codecvt_byname
22.4.2 The numeric category
22.4.2.1 Class template num_get
22.4.2.1.1 num_get members
22.4.2.1.2 num_get virtual functions
22.4.2.2 Class template num_put
22.4.2.2.1 num_put members
22.4.2.2.2 num_put virtual functions
22.4.3 The numeric punctuation facet
22.4.3.1 Class template numpunct
22.4.3.1.1 numpunct members
22.4.3.1.2 numpunct virtual functions
22.4.3.2 Class template numpunct_byname
22.4.4 The collate category
22.4.4.1 Class template collate
22.4.4.1.1 collate members
22.4.4.1.2 collate virtual functions
22.4.4.2 Class template collate_byname
22.4.5 The time category
22.4.5.1 Class template time_get
22.4.5.1.1 time_get members
22.4.5.1.2 time_get virtual functions
22.4.5.2 Class template time_get_byname
22.4.5.3 Class template time_put
22.4.5.3.1 time_put members
22.4.5.3.2 time_put virtual functions
22.4.5.4 Class template time_put_byname
22.4.6 The monetary category
22.4.6.1 Class template money_get
22.4.6.1.1 money_get members
22.4.6.1.2 money_get virtual functions
22.4.6.2 Class template money_put
22.4.6.2.1 money_put members
22.4.6.2.2 money_put virtual functions
22.4.6.3 Class template moneypunct
22.4.6.3.1 moneypunct members
22.4.6.3.2 moneypunct virtual functions
22.4.6.4 Class template moneypunct_byname
22.4.7 The message retrieval category
22.4.7.1 Class template messages
22.4.7.1.1 messages members
22.4.7.1.2 messages virtual functions
22.4.7.2 Class template messages_byname
22.4.8 Program-defined facets
22.5 Standard code conversion facets
22.5.1 Header synopsis
22.5.2 Requirements
22.6 C library locales
22.6.1 Header synopsis
23 Containers library
23.1 General
23.2 Container requirements
23.2.1 General container requirements
23.2.2 Container data races
23.2.3 Sequence containers
23.2.4 Node handles
23.2.4.1 node_handle overview
23.2.4.2 node_handle constructors, copy, and assignment
23.2.4.3 node_handle destructor
23.2.4.4 node_handle observers
23.2.4.5 node_handle modifiers
23.2.5 Insert return type
23.2.6 Associative containers
23.2.6.1 Exception safety guarantees
23.2.7 Unordered associative containers
23.2.7.1 Exception safety guarantees
23.3 Sequence containers
23.3.1 In general
23.3.2 Header synopsis
23.3.3 Header synopsis
23.3.4 Header synopsis
23.3.5 Header synopsis
23.3.6 Header synopsis
23.3.7 Class template array
23.3.7.1 Class template array overview
23.3.7.2 array constructors, copy, and assignment
23.3.7.3 array specialized algorithms
23.3.7.4 array::size
23.3.7.5 array::data
23.3.7.6 array::fill
23.3.7.7 array::swap
23.3.7.8 Zero sized arrays
23.3.7.9 Tuple interface to class template array
23.3.8 Class template deque
23.3.8.1 Class template deque overview
23.3.8.2 deque constructors, copy, and assignment
23.3.8.3 deque capacity
23.3.8.4 deque modifiers
23.3.8.5 deque specialized algorithms
23.3.9 Class template forward_list
23.3.9.1 Class template forward_list overview
23.3.9.2 forward_list constructors, copy, assignment
23.3.9.3 forward_list iterators
23.3.9.4 forward_list element access
23.3.9.5 forward_list modifiers
23.3.9.6 forward_list operations
23.3.9.7 forward_list specialized algorithms
23.3.10 Class template list
23.3.10.1 Class template list overview
23.3.10.2 list constructors, copy, and assignment
23.3.10.3 list capacity
23.3.10.4 list modifiers
23.3.10.5 list operations
23.3.10.6 list specialized algorithms
23.3.11 Class template vector
23.3.11.1 Class template vector overview
23.3.11.2 vector constructors, copy, and assignment
23.3.11.3 vector capacity
23.3.11.4 vector data
23.3.11.5 vector modifiers
23.3.11.6 vector specialized algorithms
23.3.12 Class vector
23.4 Associative containers
23.4.1 In general
23.4.2 Header synopsis
23.4.3 Header synopsis
23.4.4 Class template map
23.4.4.1 Class template map overview
23.4.4.2 map constructors, copy, and assignment
23.4.4.3 map element access
23.4.4.4 map modifiers
23.4.4.5 map specialized algorithms
23.4.5 Class template multimap
23.4.5.1 Class template multimap overview
23.4.5.2 multimap constructors
23.4.5.3 multimap modifiers
23.4.5.4 multimap specialized algorithms
23.4.6 Class template set
23.4.6.1 Class template set overview
23.4.6.2 set constructors, copy, and assignment
23.4.6.3 set specialized algorithms
23.4.7 Class template multiset
23.4.7.1 Class template multiset overview
23.4.7.2 multiset constructors
23.4.7.3 multiset specialized algorithms
23.5 Unordered associative containers
23.5.1 In general
23.5.2 Header synopsis
23.5.3 Header synopsis
23.5.4 Class template unordered_map
23.5.4.1 Class template unordered_map overview
23.5.4.2 unordered_map constructors
23.5.4.3 unordered_map element access
23.5.4.4 unordered_map modifiers
23.5.4.5 unordered_map swap
23.5.5 Class template unordered_multimap
23.5.5.1 Class template unordered_multimap overview
23.5.5.2 unordered_multimap constructors
23.5.5.3 unordered_multimap modifiers
23.5.5.4 unordered_multimap swap
23.5.6 Class template unordered_set
23.5.6.1 Class template unordered_set overview
23.5.6.2 unordered_set constructors
23.5.6.3 unordered_set swap
23.5.7 Class template unordered_multiset
23.5.7.1 Class template unordered_multiset overview
23.5.7.2 unordered_multiset constructors
23.5.7.3 unordered_multiset swap
23.6 Container adaptors
23.6.1 In general
23.6.2 Header synopsis
23.6.3 Header synopsis
23.6.4 Class template queue
23.6.4.1 queue definition
23.6.4.2 queue constructors
23.6.4.3 queue constructors with allocators
23.6.4.4 queue operators
23.6.4.5 queue specialized algorithms
23.6.5 Class template priority_queue
23.6.5.1 priority_queue constructors
23.6.5.2 priority_queue constructors with allocators
23.6.5.3 priority_queue members
23.6.5.4 priority_queue specialized algorithms
23.6.6 Class template stack
23.6.6.1 stack definition
23.6.6.2 stack constructors
23.6.6.3 stack constructors with allocators
23.6.6.4 stack operators
23.6.6.5 stack specialized algorithms
24 Iterators library
24.1 General
24.2 Iterator requirements
24.2.1 In general
24.2.2 Iterator
24.2.3 Input iterators
24.2.4 Output iterators
24.2.5 Forward iterators
24.2.6 Bidirectional iterators
24.2.7 Random access iterators
24.3 Header synopsis
24.4 Iterator primitives
24.4.1 Iterator traits
24.4.2 Standard iterator tags
24.4.3 Iterator operations
24.5 Iterator adaptors
24.5.1 Reverse iterators
24.5.1.1 Class template reverse_iterator
24.5.1.2 reverse_iterator requirements
24.5.1.3 reverse_iterator operations
24.5.1.3.1 reverse_iterator constructor
24.5.1.3.2 reverse_iterator::operator=
24.5.1.3.3 Conversion
24.5.1.3.4 operator*
24.5.1.3.5 operator->
24.5.1.3.6 operator++
24.5.1.3.7 operator--
24.5.1.3.8 operator+
24.5.1.3.9 operator+=
24.5.1.3.10 operator-
24.5.1.3.11 operator-=
24.5.1.3.12 operator[]
24.5.1.3.13 operator==
24.5.1.3.14 operator<
24.5.1.3.15 operator!=
24.5.1.3.16 operator>
24.5.1.3.17 operator>=
24.5.1.3.18 operator<=
24.5.1.3.19 operator-
24.5.1.3.20 operator+
24.5.1.3.21 Non-member function make_reverse_iterator()
24.5.2 Insert iterators
24.5.2.1 Class template back_insert_iterator
24.5.2.2 back_insert_iterator operations
24.5.2.2.1 back_insert_iterator constructor
24.5.2.2.2 back_insert_iterator::operator=
24.5.2.2.3 back_insert_iterator::operator*
24.5.2.2.4 back_insert_iterator::operator++
24.5.2.2.5 back_inserter
24.5.2.3 Class template front_insert_iterator
24.5.2.4 front_insert_iterator operations
24.5.2.4.1 front_insert_iterator constructor
24.5.2.4.2 front_insert_iterator::operator=
24.5.2.4.3 front_insert_iterator::operator*
24.5.2.4.4 front_insert_iterator::operator++
24.5.2.4.5 front_inserter
24.5.2.5 Class template insert_iterator
24.5.2.6 insert_iterator operations
24.5.2.6.1 insert_iterator constructor
24.5.2.6.2 insert_iterator::operator=
24.5.2.6.3 insert_iterator::operator*
24.5.2.6.4 insert_iterator::operator++
24.5.2.6.5 inserter
24.5.3 Move iterators
24.5.3.1 Class template move_iterator
24.5.3.2 move_iterator requirements
24.5.3.3 move_iterator operations
24.5.3.3.1 move_iterator constructors
24.5.3.3.2 move_iterator::operator=
24.5.3.3.3 move_iterator conversion
24.5.3.3.4 move_iterator::operator*
24.5.3.3.5 move_iterator::operator->
24.5.3.3.6 move_iterator::operator++
24.5.3.3.7 move_iterator::operator--
24.5.3.3.8 move_iterator::operator+
24.5.3.3.9 move_iterator::operator+=
24.5.3.3.10 move_iterator::operator-
24.5.3.3.11 move_iterator::operator-=
24.5.3.3.12 move_iterator::operator[]
24.5.3.3.13 move_iterator comparisons
24.5.3.3.14 move_iterator non-member functions
24.6 Stream iterators
24.6.1 Class template istream_iterator
24.6.1.1 istream_iterator constructors and destructor
24.6.1.2 istream_iterator operations
24.6.2 Class template ostream_iterator
24.6.2.1 ostream_iterator constructors and destructor
24.6.2.2 ostream_iterator operations
24.6.3 Class template istreambuf_iterator
24.6.3.1 Class template istreambuf_iterator::proxy
24.6.3.2 istreambuf_iterator constructors
24.6.3.3 istreambuf_iterator::operator*
24.6.3.4 istreambuf_iterator::operator++
24.6.3.5 istreambuf_iterator::equal
24.6.3.6 operator==
24.6.3.7 operator!=
24.6.4 Class template ostreambuf_iterator
24.6.4.1 ostreambuf_iterator constructors
24.6.4.2 ostreambuf_iterator operations
24.7 Range access
24.8 Container access
25 Algorithms library
25.1 General
25.2 Header synopsis
25.3 Algorithms requirements
25.4 Parallel algorithms
25.4.1 Terms and definitions
25.4.2 Requirements on user-provided function objects
25.4.3 Effect of execution policies on algorithm execution
25.4.4 Parallel algorithm exceptions
25.4.5 ExecutionPolicy algorithm overloads
25.5 Non-modifying sequence operations
25.5.1 All of
25.5.2 Any of
25.5.3 None of
25.5.4 For each
25.5.5 Find
25.5.6 Find end
25.5.7 Find first
25.5.8 Adjacent find
25.5.9 Count
25.5.10 Mismatch
25.5.11 Equal
25.5.12 Is permutation
25.5.13 Search
25.6 Mutating sequence operations
25.6.1 Copy
25.6.2 Move
25.6.3 Swap
25.6.4 Transform
25.6.5 Replace
25.6.6 Fill
25.6.7 Generate
25.6.8 Remove
25.6.9 Unique
25.6.10 Reverse
25.6.11 Rotate
25.6.12 Sample
25.6.13 Shuffle
25.7 Sorting and related operations
25.7.1 Sorting
25.7.1.1 sort
25.7.1.2 stable_sort
25.7.1.3 partial_sort
25.7.1.4 partial_sort_copy
25.7.1.5 is_sorted
25.7.2 Nth element
25.7.3 Binary search
25.7.3.1 lower_bound
25.7.3.2 upper_bound
25.7.3.3 equal_range
25.7.3.4 binary_search
25.7.4 Partitions
25.7.5 Merge
25.7.6 Set operations on sorted structures
25.7.6.1 includes
25.7.6.2 set_union
25.7.6.3 set_intersection
25.7.6.4 set_difference
25.7.6.5 set_symmetric_difference
25.7.7 Heap operations
25.7.7.1 push_heap
25.7.7.2 pop_heap
25.7.7.3 make_heap
25.7.7.4 sort_heap
25.7.7.5 is_heap
25.7.8 Minimum and maximum
25.7.9 Bounded value
25.7.10 Lexicographical comparison
25.7.11 Permutation generators
25.8 C library algorithms
26 Numerics library
26.1 General
26.2 Definitions
26.3 Numeric type requirements
26.4 The floating-point environment
26.4.1 Header synopsis
26.5 Complex numbers
26.5.1 Header synopsis
26.5.2 Class template complex
26.5.3 complex specializations
26.5.4 complex member functions
26.5.5 complex member operators
26.5.6 complex non-member operations
26.5.7 complex value operations
26.5.8 complex transcendentals
26.5.9 Additional overloads
26.5.10 Suffixes for complex number literals
26.5.11 Header synopsis
26.6 Random number generation
26.6.1 Requirements
26.6.1.1 General requirements
26.6.1.2 Seed sequence requirements
26.6.1.3 Uniform random bit generator requirements
26.6.1.4 Random number engine requirements
26.6.1.5 Random number engine adaptor requirements
26.6.1.6 Random number distribution requirements
26.6.2 Header synopsis
26.6.3 Random number engine class templates
26.6.3.1 Class template linear_congruential_engine
26.6.3.2 Class template mersenne_twister_engine
26.6.3.3 Class template subtract_with_carry_engine
26.6.4 Random number engine adaptor class templates
26.6.4.1 In general
26.6.4.2 Class template discard_block_engine
26.6.4.3 Class template independent_bits_engine
26.6.4.4 Class template shuffle_order_engine
26.6.5 Engines and engine adaptors with predefined parameters
26.6.6 Class random_device
26.6.7 Utilities
26.6.7.1 Class seed_seq
26.6.7.2 Function template generate_canonical
26.6.8 Random number distribution class templates
26.6.8.1 In general
26.6.8.2 Uniform distributions
26.6.8.2.1 Class template uniform_int_distribution
26.6.8.2.2 Class template uniform_real_distribution
26.6.8.3 Bernoulli distributions
26.6.8.3.1 Class bernoulli_distribution
26.6.8.3.2 Class template binomial_distribution
26.6.8.3.3 Class template geometric_distribution
26.6.8.3.4 Class template negative_binomial_distribution
26.6.8.4 Poisson distributions
26.6.8.4.1 Class template poisson_distribution
26.6.8.4.2 Class template exponential_distribution
26.6.8.4.3 Class template gamma_distribution
26.6.8.4.4 Class template weibull_distribution
26.6.8.4.5 Class template extreme_value_distribution
26.6.8.5 Normal distributions
26.6.8.5.1 Class template normal_distribution
26.6.8.5.2 Class template lognormal_distribution
26.6.8.5.3 Class template chi_squared_distribution
26.6.8.5.4 Class template cauchy_distribution
26.6.8.5.5 Class template fisher_f_distribution
26.6.8.5.6 Class template student_t_distribution
26.6.8.6 Sampling distributions
26.6.8.6.1 Class template discrete_distribution
26.6.8.6.2 Class template piecewise_constant_distribution
26.6.8.6.3 Class template piecewise_linear_distribution
26.6.9 Low-quality random number generation
26.7 Numeric arrays
26.7.1 Header synopsis
26.7.2 Class template valarray
26.7.2.1 Class template valarray overview
26.7.2.2 valarray constructors
26.7.2.3 valarray assignment
26.7.2.4 valarray element access
26.7.2.5 valarray subset operations
26.7.2.6 valarray unary operators
26.7.2.7 valarray compound assignment
26.7.2.8 valarray member functions
26.7.3 valarray non-member operations
26.7.3.1 valarray binary operators
26.7.3.2 valarray logical operators
26.7.3.3 valarray transcendentals
26.7.3.4 valarray specialized algorithms
26.7.4 Class slice
26.7.4.1 Class slice overview
26.7.4.2 slice constructors
26.7.4.3 slice access functions
26.7.5 Class template slice_array
26.7.5.1 Class template slice_array overview
26.7.5.2 slice_array assignment
26.7.5.3 slice_array compound assignment
26.7.5.4 slice_array fill function
26.7.6 The gslice class
26.7.6.1 The gslice class overview
26.7.6.2 gslice constructors
26.7.6.3 gslice access functions
26.7.7 Class template gslice_array
26.7.7.1 Class template gslice_array overview
26.7.7.2 gslice_array assignment
26.7.7.3 gslice_array compound assignment
26.7.7.4 gslice_array fill function
26.7.8 Class template mask_array
26.7.8.1 Class template mask_array overview
26.7.8.2 mask_array assignment
26.7.8.3 mask_array compound assignment
26.7.8.4 mask_array fill function
26.7.9 Class template indirect_array
26.7.9.1 Class template indirect_array overview
26.7.9.2 indirect_array assignment
26.7.9.3 indirect_array compound assignment
26.7.9.4 indirect_array fill function
26.7.10 valarray range access
26.8 Generalized numeric operations
26.8.1 Header synopsis
26.8.2 Accumulate
26.8.3 Reduce
26.8.4 Transform reduce
26.8.5 Inner product
26.8.6 Partial sum
26.8.7 Exclusive scan
26.8.8 Inclusive scan
26.8.9 Transform exclusive scan
26.8.10 Transform inclusive scan
26.8.11 Adjacent difference
26.8.12 Iota
26.8.13 Greatest common divisor
26.8.14 Least common multiple
26.9 Mathematical functions for floating-point types
26.9.1 Header synopsis
26.9.2 Absolute values
26.9.3 Three-dimensional hypotenuse
26.9.4 Classification / comparison functions
26.9.5 Mathematical special functions
26.9.5.1 Associated Laguerre polynomials
26.9.5.2 Associated Legendre functions
26.9.5.3 Beta function
26.9.5.4 Complete elliptic integral of the first kind
26.9.5.5 Complete elliptic integral of the second kind
26.9.5.6 Complete elliptic integral of the third kind
26.9.5.7 Regular modified cylindrical Bessel functions
26.9.5.8 Cylindrical Bessel functions of the first kind
26.9.5.9 Irregular modified cylindrical Bessel functions
26.9.5.10 Cylindrical Neumann functions
26.9.5.11 Incomplete elliptic integral of the first kind
26.9.5.12 Incomplete elliptic integral of the second kind
26.9.5.13 Incomplete elliptic integral of the third kind
26.9.5.14 Exponential integral
26.9.5.15 Hermite polynomials
26.9.5.16 Laguerre polynomials
26.9.5.17 Legendre polynomials
26.9.5.18 Riemann zeta function
26.9.5.19 Spherical Bessel functions of the first kind
26.9.5.20 Spherical associated Legendre functions
26.9.5.21 Spherical Neumann functions
26.9.6 Header synopsis
27 Input/output library
27.1 General
27.2 Iostreams requirements
27.2.1 Imbue limitations
27.2.2 Positioning type limitations
27.2.3 Thread safety
27.3 Forward declarations
27.3.1 Header synopsis
27.3.2 Overview
27.4 Standard iostream objects
27.4.1 Header synopsis
27.4.2 Overview
27.4.3 Narrow stream objects
27.4.4 Wide stream objects
27.5 Iostreams base classes
27.5.1 Header synopsis
27.5.2 Types
27.5.3 Class ios_base
27.5.3.1 Types
27.5.3.1.1 Class ios_base::failure
27.5.3.1.2 Type ios_base::fmtflags
27.5.3.1.3 Type ios_base::iostate
27.5.3.1.4 Type ios_base::openmode
27.5.3.1.5 Type ios_base::seekdir
27.5.3.1.6 Class ios_base::Init
27.5.3.2 ios_base state functions
27.5.3.3 ios_base functions
27.5.3.4 ios_base static members
27.5.3.5 ios_base storage functions
27.5.3.6 ios_base callbacks
27.5.3.7 ios_base constructors/destructor
27.5.4 Class template fpos
27.5.4.1 fpos members
27.5.4.2 fpos requirements
27.5.5 Class template basic_ios
27.5.5.1 Overview
27.5.5.2 basic_ios constructors
27.5.5.3 Member functions
27.5.5.4 basic_ios flags functions
27.5.6 ios_base manipulators
27.5.6.1 fmtflags manipulators
27.5.6.2 adjustfield manipulators
27.5.6.3 basefield manipulators
27.5.6.4 floatfield manipulators
27.5.6.5 Error reporting
27.6 Stream buffers
27.6.1 Header synopsis
27.6.2 Stream buffer requirements
27.6.3 Class template basic_streambuf
27.6.3.1 basic_streambuf constructors
27.6.3.2 basic_streambuf public member functions
27.6.3.2.1 Locales
27.6.3.2.2 Buffer management and positioning
27.6.3.2.3 Get area
27.6.3.2.4 Putback
27.6.3.2.5 Put area
27.6.3.3 basic_streambuf protected member functions
27.6.3.3.1 Assignment
27.6.3.3.2 Get area access
27.6.3.3.3 Put area access
27.6.3.4 basic_streambuf virtual functions
27.6.3.4.1 Locales
27.6.3.4.2 Buffer management and positioning
27.6.3.4.3 Get area
27.6.3.4.4 Putback
27.6.3.4.5 Put area
27.7 Formatting and manipulators
27.7.1 Header synopsis
27.7.2 Header synopsis
27.7.3 Header synopsis
27.7.4 Input streams
27.7.4.1 Class template basic_istream
27.7.4.1.1 basic_istream constructors
27.7.4.1.2 Class basic_istream assign and swap
27.7.4.1.3 Class basic_istream::sentry
27.7.4.2 Formatted input functions
27.7.4.2.1 Common requirements
27.7.4.2.2 Arithmetic extractors
27.7.4.2.3 basic_istream::operator>>
27.7.4.3 Unformatted input functions
27.7.4.4 Standard basic_istream manipulators
27.7.4.5 Rvalue stream extraction
27.7.4.6 Class template basic_iostream
27.7.4.6.1 basic_iostream constructors
27.7.4.6.2 basic_iostream destructor
27.7.4.6.3 basic_iostream assign and swap
27.7.5 Output streams
27.7.5.1 Class template basic_ostream
27.7.5.1.1 basic_ostream constructors
27.7.5.1.2 Class basic_ostream assign and swap
27.7.5.1.3 Class basic_ostream::sentry
27.7.5.1.4 basic_ostream seek members
27.7.5.2 Formatted output functions
27.7.5.2.1 Common requirements
27.7.5.2.2 Arithmetic inserters
27.7.5.2.3 basic_ostream::operator<<
27.7.5.2.4 Character inserter function templates
27.7.5.3 Unformatted output functions
27.7.5.4 Standard basic_ostream manipulators
27.7.5.5 Rvalue stream insertion
27.7.6 Standard manipulators
27.7.7 Extended manipulators
27.7.8 Quoted manipulators
27.8 String-based streams
27.8.1 Header synopsis
27.8.2 Class template basic_stringbuf
27.8.2.1 basic_stringbuf constructors
27.8.2.2 Assign and swap
27.8.2.3 Member functions
27.8.2.4 Overridden virtual functions
27.8.3 Class template basic_istringstream
27.8.3.1 basic_istringstream constructors
27.8.3.2 Assign and swap
27.8.3.3 Member functions
27.8.4 Class template basic_ostringstream
27.8.4.1 basic_ostringstream constructors
27.8.4.2 Assign and swap
27.8.4.3 Member functions
27.8.5 Class template basic_stringstream
27.8.5.1 basic_stringstream constructors
27.8.5.2 Assign and swap
27.8.5.3 Member functions
27.9 File-based streams
27.9.1 Header synopsis
27.9.2 Class template basic_filebuf
27.9.2.1 basic_filebuf constructors
27.9.2.2 Assign and swap
27.9.2.3 Member functions
27.9.2.4 Overridden virtual functions
27.9.3 Class template basic_ifstream
27.9.3.1 basic_ifstream constructors
27.9.3.2 Assign and swap
27.9.3.3 Member functions
27.9.4 Class template basic_ofstream
27.9.4.1 basic_ofstream constructors
27.9.4.2 Assign and swap
27.9.4.3 Member functions
27.9.5 Class template basic_fstream
27.9.5.1 basic_fstream constructors
27.9.5.2 Assign and swap
27.9.5.3 Member functions
27.10 File systems
27.10.1 General
27.10.2 Conformance
27.10.2.1 POSIX conformance
27.10.2.2 Operating system dependent behavior conformance
27.10.2.3 File system race behavior
27.10.3 Normative references
27.10.4 Terms and definitions
27.10.4.1 absolute path
27.10.4.2 canonical path
27.10.4.3 directory
27.10.4.4 file
27.10.4.5 file system
27.10.4.6 file system race
27.10.4.7 filename
27.10.4.8 hard link
27.10.4.9 link
27.10.4.10 native encoding
27.10.4.11 native pathname format
27.10.4.12 normal form
27.10.4.13 operating system dependent behavior
27.10.4.14 parent directory
27.10.4.15 parent directory
27.10.4.16 path
27.10.4.17 pathname
27.10.4.18 pathname resolution
27.10.4.19 relative path
27.10.4.20 symbolic link
27.10.5 Requirements
27.10.5.1 Namespaces and headers
27.10.6 Header synopsis
27.10.7 Error reporting
27.10.8 Class path
27.10.8.1 Generic pathname format
27.10.8.2 path conversions
27.10.8.2.1 path argument format conversions
27.10.8.2.2 path type and encoding conversions
27.10.8.3 path requirements
27.10.8.4 path members
27.10.8.4.1 path constructors
27.10.8.4.2 path assignments
27.10.8.4.3 path appends
27.10.8.4.4 path concatenation
27.10.8.4.5 path modifiers
27.10.8.4.6 path native format observers
27.10.8.4.7 path generic format observers
27.10.8.4.8 path compare
27.10.8.4.9 path decomposition
27.10.8.4.10 path query
27.10.8.4.11 path generation
27.10.8.5 path iterators
27.10.8.6 path non-member functions
27.10.8.6.1 path inserter and extractor
27.10.8.6.2 path factory functions
27.10.9 Class filesystem_error
27.10.9.1 filesystem_error members
27.10.10 Enumerations
27.10.10.1 Enum class file_type
27.10.10.2 Enum class copy_options
27.10.10.3 Enum class perms
27.10.10.4 Enum class directory_options
27.10.11 Class file_status
27.10.11.1 file_status constructors
27.10.11.2 file_status observers
27.10.11.3 file_status modifiers
27.10.12 Class directory_entry
27.10.12.1 directory_entry constructors
27.10.12.2 directory_entry modifiers
27.10.12.3 directory_entry observers
27.10.13 Class directory_iterator
27.10.13.1 directory_iterator members
27.10.13.2 directory_iterator non-member functions
27.10.14 Class recursive_directory_iterator
27.10.14.1 recursive_directory_iterator members
27.10.14.2 recursive_directory_iterator non-member functions
27.10.15 Filesystem operation functions
27.10.15.1 Absolute
27.10.15.2 Canonical
27.10.15.3 Copy
27.10.15.4 Copy file
27.10.15.5 Copy symlink
27.10.15.6 Create directories
27.10.15.7 Create directory
27.10.15.8 Create directory symlink
27.10.15.9 Create hard link
27.10.15.10 Create symlink
27.10.15.11 Current path
27.10.15.12 Equivalent
27.10.15.13 Exists
27.10.15.14 File size
27.10.15.15 Hard link count
27.10.15.16 Is block file
27.10.15.17 Is character file
27.10.15.18 Is directory
27.10.15.19 Is empty
27.10.15.20 Is fifo
27.10.15.21 Is other
27.10.15.22 Is regular file
27.10.15.23 Is socket
27.10.15.24 Is symlink
27.10.15.25 Last write time
27.10.15.26 Permissions
27.10.15.27 Proximate
27.10.15.28 Read symlink
27.10.15.29 Relative
27.10.15.30 Remove
27.10.15.31 Remove all
27.10.15.32 Rename
27.10.15.33 Resize file
27.10.15.34 Space
27.10.15.35 Status
27.10.15.36 Status known
27.10.15.37 Symlink status
27.10.15.38 System complete
27.10.15.39 Temporary directory path
27.10.15.40 Weakly canonical
27.11 C library files
27.11.1 Header synopsis
27.11.2 Header synopsis
28 Regular expressions library
28.1 General
28.2 Definitions
28.2.1 collating element
28.2.2 finite state machine
28.2.3 format specifier
28.2.4 matched
28.2.5 primary equivalence class
28.2.6 regular expression
28.2.7 sub-expression
28.3 Requirements
28.4 Header synopsis
28.5 Namespace std::regex_constants
28.5.1 Bitmask type syntax_option_type
28.5.2 Bitmask type match_flag_type
28.5.3 Implementation-defined error_type
28.6 Class regex_error
28.7 Class template regex_traits
28.8 Class template basic_regex
28.8.1 basic_regex constants
28.8.2 basic_regex constructors
28.8.3 basic_regex assign
28.8.4 basic_regex constant operations
28.8.5 basic_regex locale
28.8.6 basic_regex swap
28.8.7 basic_regex non-member functions
28.8.7.1 basic_regex non-member swap
28.9 Class template sub_match
28.9.1 sub_match members
28.9.2 sub_match non-member operators
28.10 Class template match_results
28.10.1 match_results constructors
28.10.2 match_results state
28.10.3 match_results size
28.10.4 match_results element access
28.10.5 match_results formatting
28.10.6 match_results allocator
28.10.7 match_results swap
28.10.8 match_results non-member functions
28.11 Regular expression algorithms
28.11.1 Exceptions
28.11.2 regex_match
28.11.3 regex_search
28.11.4 regex_replace
28.12 Regular expression iterators
28.12.1 Class template regex_iterator
28.12.1.1 regex_iterator constructors
28.12.1.2 regex_iterator comparisons
28.12.1.3 regex_iterator indirection
28.12.1.4 regex_iterator increment
28.12.2 Class template regex_token_iterator
28.12.2.1 regex_token_iterator constructors
28.12.2.2 regex_token_iterator comparisons
28.12.2.3 regex_token_iterator indirection
28.12.2.4 regex_token_iterator increment
28.13 Modified ECMAScript regular expression grammar
29 Atomic operations library
29.1 General
29.2 Header synopsis
29.3 Order and consistency
29.4 Lock-free property
29.5 Atomic types
29.6 Operations on atomic types
29.6.1 General operations on atomic types
29.6.2 Templated operations on atomic types
29.6.3 Arithmetic operations on atomic types
29.6.4 Operations on atomic pointer types
29.6.5 Requirements for operations on atomic types
29.7 Flag type and operations
29.8 Fences
30 Thread support library
30.1 General
30.2 Requirements
30.2.1 Template parameter names
30.2.2 Exceptions
30.2.3 Native handles
30.2.4 Timing specifications
30.2.5 Requirements for Lockable types
30.2.5.1 In general
30.2.5.2 BasicLockable requirements
30.2.5.3 Lockable requirements
30.2.5.4 TimedLockable requirements
30.2.6 decay_copy
30.3 Threads
30.3.1 Header synopsis
30.3.2 Class thread
30.3.2.1 Class thread::id
30.3.2.2 thread constructors
30.3.2.3 thread destructor
30.3.2.4 thread assignment
30.3.2.5 thread members
30.3.2.6 thread static members
30.3.2.7 thread specialized algorithms
30.3.3 Namespace this_thread
30.4 Mutual exclusion
30.4.1 Header synopsis
30.4.2 Header synopsis
30.4.3 Mutex requirements
30.4.3.1 In general
30.4.3.2 Mutex types
30.4.3.2.1 Class mutex
30.4.3.2.2 Class recursive_mutex
30.4.3.3 Timed mutex types
30.4.3.3.1 Class timed_mutex
30.4.3.3.2 Class recursive_timed_mutex
30.4.3.4 Shared mutex types
30.4.3.4.1 Class shared_mutex
30.4.3.5 Shared timed mutex types
30.4.3.5.1 Class shared_timed_mutex
30.4.4 Locks
30.4.4.1 Class template lock_guard
30.4.4.2 Class template unique_lock
30.4.4.2.1 unique_lock constructors, destructor, and assignment
30.4.4.2.2 unique_lock locking
30.4.4.2.3 unique_lock modifiers
30.4.4.2.4 unique_lock observers
30.4.4.3 Class template shared_lock
30.4.4.3.1 shared_lock constructors, destructor, and assignment
30.4.4.3.2 shared_lock locking
30.4.4.3.3 shared_lock modifiers
30.4.4.3.4 shared_lock observers
30.4.5 Generic locking algorithms
30.4.6 Call once
30.4.6.1 Struct once_flag
30.4.6.2 Function call_once
30.5 Condition variables
30.5.1 Header synopsis
30.5.2 Non-member functions
30.5.3 Class condition_variable
30.5.4 Class condition_variable_any
30.6 Futures
30.6.1 Overview
30.6.2 Header synopsis
30.6.3 Error handling
30.6.4 Class future_error
30.6.5 Shared state
30.6.6 Class template promise
30.6.7 Class template future
30.6.8 Class template shared_future
30.6.9 Function template async
30.6.10 Class template packaged_task
30.6.10.1 packaged_task member functions
30.6.10.2 packaged_task globals
A Grammar summary
A.1 Keywords
A.2 Lexical conventions
A.3 Basic concepts
A.4 Expressions
A.5 Statements
A.6 Declarations
A.7 Declarators
A.8 Classes
A.9 Derived classes
A.10 Special member functions
A.11 Overloading
A.12 Templates
A.13 Exception handling
A.14 Preprocessing directives
B Implementation quantities
C Compatibility
C.1 C++ and ISO C
C.1.1 Clause 2: lexical conventions
C.1.2 Clause 3: basic concepts
C.1.3 Clause 4: standard conversions
C.1.4 Clause 5: expressions
C.1.5 Clause 6: statements
C.1.6 Clause 7: declarations
C.1.7 Clause 8: declarators
C.1.8 Clause 9: classes
C.1.9 Clause 12: special member functions
C.1.10 Clause 16: preprocessing directives
C.2 C++ and ISO C++ 2003
C.2.1 Clause 2: lexical conventions
C.2.2 Clause 4: standard conversions
C.2.3 Clause 5: expressions
C.2.4 Clause 7: declarations
C.2.5 Clause 8: declarators
C.2.6 Clause 12: special member functions
C.2.7 Clause 14: templates
C.2.8 Clause 17: library introduction
C.2.9 Clause 18: language support library
C.2.10 Clause 19: diagnostics library
C.2.11 Clause 20: general utilities library
C.2.12 Clause 21: strings library
C.2.13 Clause 23: containers library
C.2.14 Clause 25: algorithms library
C.2.15 Clause 26: numerics library
C.2.16 Clause 27: input/output library
C.3 C++ and ISO C++ 2011
C.3.1 Clause 2: lexical conventions
C.3.2 Clause 3: basic concepts
C.3.3 Clause 5: expressions
C.3.4 Clause 7: declarations
C.3.5 Clause 8: declarators
C.3.6 Clause 17: library introduction
C.3.7 Clause 27: input/output library
C.4 C++ and ISO C++ 2014
C.4.1 Clause 2: lexical conventions
C.4.2 Clause 5: expressions
C.4.3 Clause 7: declarations
C.4.4 Clause 8: declarators
C.4.5 Clause 12: special member functions
C.4.6 Clause 14: templates
C.4.7 Clause 15: exception handling
C.4.8 Clause 17: library introduction
C.4.9 Clause 20: general utilities library
C.4.10 Clause 21: strings library
C.4.11 Clause 23: containers library
C.4.12 Annex D: compatibility features
C.5 C standard library
C.5.1 Modifications to headers
C.5.2 Modifications to definitions
C.5.2.1 Types char16_t and char32_t
C.5.2.2 Type wchar_t
C.5.2.3 Header
C.5.2.4 Header
C.5.2.5 Header
C.5.2.6 Header
C.5.2.7 Macro NULL
C.5.3 Modifications to declarations
C.5.4 Modifications to behavior
C.5.4.1 Macro offsetof(type, member-designator)
C.5.4.2 Memory allocation functions
D Compatibility features
D.1 Redeclaration of static constexpr data members
D.2 Implicit declaration of copy functions
D.3 Deprecated exception specifications
D.4 C standard library headers
D.5 char* streams
D.5.1 Class strstreambuf
D.5.1.1 strstreambuf constructors
D.5.1.2 Member functions
D.5.1.3 strstreambuf overridden virtual functions
D.5.2 Class istrstream
D.5.2.1 istrstream constructors
D.5.2.2 Member functions
D.5.3 Class ostrstream
D.5.3.1 ostrstream constructors
D.5.3.2 Member functions
D.5.4 Class strstream
D.5.4.1 strstream constructors
D.5.4.2 strstream destructor
D.5.4.3 strstream operations
D.6 uncaught_exception
D.7 Old adaptable function bindings
D.7.1 Weak result types
D.7.2 Typedefs to support function binders
D.7.3 Negators
D.8 The default allocator
D.9 Raw storage iterator
D.10 Temporary buffers
D.11 Deprecated type traits
D.12 Deprecated iterator primitives
D.12.1 Basic iterator
D.13 Deprecated shared_ptr observers
Cross references
Index
Index of grammar productions
Index of library names
Index of implementation-defined behavior