Working Draft
Programming Languages — C++

(Generated on 2024-07-21 from the LaTeX sources by cxxdraft-htmlgen. This is not an ISO publication.
For historical versions of the document, see Tim Song's cppwp page.)

Note: this is an early draft. It's known to be incomplet and incorrekt, and it has lots of bad formatting.


1 Scope [intro.scope][intro.scope]

2 Normative references [intro.refs][intro.refs]

3 Terms and definitions [intro.defs][intro.defs]

4 General principles [intro][intro]

4.1 Implementation compliance [intro.compliance]

4.1.2 Abstract machine [intro.abstract]

4.2 Structure of this document [intro.structure]

4.3 Syntax notation [syntax]

5 Lexical conventions [lex][lex]

5.1 Separate translation [lex.separate]

5.2 Phases of translation [lex.phases]

5.3 Character sets [lex.charset]

5.4 Preprocessing tokens [lex.pptoken]

5.5 Alternative tokens [lex.digraph]

5.8 Header names [lex.header]

5.9 Preprocessing numbers [lex.ppnumber]

5.10 Identifiers []

5.11 Keywords [lex.key]

5.12 Operators and punctuators [lex.operators]

5.13 Literals [lex.literal]

5.13.1 Kinds of literals [lex.literal.kinds]

5.13.2 Integer literals [lex.icon]

5.13.3 Character literals [lex.ccon]

5.13.4 Floating-point literals [lex.fcon]

5.13.5 String literals [lex.string]

5.13.6 Unevaluated strings [lex.string.uneval]

5.13.7 Boolean literals [lex.bool]

5.13.8 Pointer literals [lex.nullptr]

5.13.9 User-defined literals [lex.ext]

6 Basics [basic][basic]

6.1 Preamble [basic.pre]

6.2 Declarations and definitions [basic.def]

6.3 One-definition rule [basic.def.odr]

6.4 Scope [basic.scope]

6.4.2 Point of declaration [basic.scope.pdecl]

6.4.4 Function parameter scope [basic.scope.param]

6.4.8 Enumeration scope [basic.scope.enum]

6.4.9 Template parameter scope [basic.scope.temp]

6.5 Name lookup [basic.lookup]

6.5.2 Member name lookup [class.member.lookup]

6.5.3 Unqualified name lookup [basic.lookup.unqual]

6.5.4 Argument-dependent name lookup [basic.lookup.argdep]

6.5.6 Elaborated type specifiers [basic.lookup.elab]

6.5.7 Using-directives and namespace aliases [basic.lookup.udir]

6.7 Memory and objects [basic.memobj]

6.7.1 Memory model [intro.memory]

6.7.2 Object model [intro.object]

6.7.4 Indeterminate and erroneous values [basic.indet]

6.7.5 Storage duration [] Static storage duration [] Thread storage duration [] Automatic storage duration [] Duration of subobjects []

6.7.7 Temporary objects [class.temporary]

6.8 Types [basic.types]

6.8.2 Fundamental types [basic.fundamental]

6.8.3 Optional extended floating-point types [basic.extended.fp]

6.8.4 Compound types [basic.compound]

6.8.6 Conversion ranks [conv.rank]

6.9 Program execution [basic.exec]

6.9.1 Sequential execution [intro.execution]

6.9.2 Multi-threaded executions and data races [intro.multithread] Forward progress [intro.progress]

6.9.3 Start and termination [basic.start] Static initialization [basic.start.static] Dynamic initialization of non-block variables [basic.start.dynamic]

7 Expressions [expr][expr]

7.1 Preamble [expr.pre]

7.2 Properties of expressions [expr.prop]

7.2.1 Value category [basic.lval]

7.2.3 Context dependence [expr.context]

7.3 Standard conversions [conv]

7.3.2 Lvalue-to-rvalue conversion [conv.lval]

7.3.3 Array-to-pointer conversion [conv.array]

7.3.4 Function-to-pointer conversion [conv.func]

7.3.5 Temporary materialization conversion [conv.rval]

7.3.6 Qualification conversions [conv.qual]

7.3.7 Integral promotions [conv.prom]

7.3.8 Floating-point promotion [conv.fpprom]

7.3.9 Integral conversions [conv.integral]

7.3.10 Floating-point conversions [conv.double]

7.3.11 Floating-integral conversions [conv.fpint]

7.3.12 Pointer conversions [conv.ptr]

7.3.13 Pointer-to-member conversions [conv.mem]

7.3.14 Function pointer conversions [conv.fctptr]

7.3.15 Boolean conversions [conv.bool]

7.4 Usual arithmetic conversions [expr.arith.conv]

7.6 Compound expressions [expr.compound]

7.6.1 Postfix expressions [] Subscripting [expr.sub] Function call [] Explicit type conversion (functional notation) [expr.type.conv] Class member access [expr.ref] Increment and decrement [] Type identification [expr.typeid]

7.6.3 Explicit type conversion (cast notation) [expr.cast]

7.6.4 Pointer-to-member operators [expr.mptr.oper]

7.6.5 Multiplicative operators [expr.mul]

7.6.6 Additive operators [expr.add]

7.6.7 Shift operators [expr.shift]

7.6.8 Three-way comparison operator [expr.spaceship]

7.6.9 Relational operators [expr.rel]

7.6.10 Equality operators [expr.eq]

7.6.11 Bitwise AND operator [expr.bit.and]

7.6.12 Bitwise exclusive OR operator [expr.xor]

7.6.13 Bitwise inclusive OR operator [expr.or]

7.6.14 Logical AND operator [expr.log.and]

7.6.15 Logical OR operator [expr.log.or]

7.6.16 Conditional operator [expr.cond]

7.6.17 Yielding a value [expr.yield]

7.6.18 Throwing an exception [expr.throw]

7.6.19 Assignment and compound assignment operators [expr.ass]

7.6.20 Comma operator [expr.comma]

7.7 Constant expressions [expr.const]

8 Statements [stmt.stmt][stmt.stmt]

8.1 Preamble [stmt.pre]

8.3 Expression statement [stmt.expr]

8.4 Compound statement or block [stmt.block]

8.5 Selection statements []

8.5.2 The if statement [stmt.if]

8.5.3 The switch statement [stmt.switch]

8.6 Iteration statements [stmt.iter]

8.6.2 The while statement [stmt.while]

8.6.3 The do statement []

8.6.4 The for statement [stmt.for]

8.6.5 The range-based for statement [stmt.ranged]

8.7 Jump statements [stmt.jump]

8.7.2 The break statement [stmt.break]

8.7.3 The continue statement [stmt.cont]

8.7.4 The return statement [stmt.return]

8.7.5 The co_return statement [stmt.return.coroutine]

8.7.6 The goto statement [stmt.goto]

8.8 Declaration statement [stmt.dcl]

8.9 Ambiguity resolution [stmt.ambig]

9 Declarations [dcl.dcl][dcl.dcl]

9.1 Preamble [dcl.pre]

9.2 Specifiers [dcl.spec]

9.2.2 Storage class specifiers []

9.2.3 Function specifiers [dcl.fct.spec]

9.2.4 The typedef specifier [dcl.typedef]

9.2.5 The friend specifier [dcl.friend]

9.2.6 The constexpr and consteval specifiers [dcl.constexpr]

9.2.7 The constinit specifier [dcl.constinit]

9.2.8 The inline specifier [dcl.inline]

9.2.9 Type specifiers [dcl.type] The cv-qualifiers [] Simple type specifiers [dcl.type.simple] Pack indexing specifier [dcl.type.pack.index] Elaborated type specifiers [dcl.type.elab] Decltype specifiers [dcl.type.decltype] Placeholder type specifiers [] Placeholder type deduction [] Deduced class template specialization types [dcl.type.class.deduct]

9.3 Declarators [dcl.decl]

9.3.2 Type names []

9.3.3 Ambiguity resolution [dcl.ambig.res]

9.3.4 Meaning of declarators [dcl.meaning] References [dcl.ref] Pointers to members [dcl.mptr] Functions [dcl.fct] Default arguments [dcl.fct.default]

9.4 Initializers [dcl.init]

9.4.3 Character arrays [dcl.init.string]

9.4.5 List-initialization [dcl.init.list]

9.5 Function definitions [dcl.fct.def]

9.5.2 Explicitly-defaulted functions [dcl.fct.def.default]

9.5.3 Deleted definitions [dcl.fct.def.delete]

9.5.4 Coroutine definitions [dcl.fct.def.coroutine]

9.6 Structured binding declarations [dcl.struct.bind]

9.7 Enumerations [enum]

9.7.1 Enumeration declarations [dcl.enum]

9.7.2 The using enum declaration [enum.udecl]

9.8 Namespaces [basic.namespace]

9.8.2 Namespace definition [namespace.def] Unnamed namespaces [namespace.unnamed]

9.8.3 Namespace alias [namespace.alias]

9.8.4 Using namespace directive [namespace.udir]

9.9 The using declaration [namespace.udecl]

9.10 The asm declaration [dcl.asm]

9.12 Attributes [dcl.attr]

9.12.1 Attribute syntax and semantics [dcl.attr.grammar]

9.12.2 Alignment specifier [dcl.align]

9.12.3 Assumption attribute [dcl.attr.assume]

9.12.4 Carries dependency attribute [dcl.attr.depend]

9.12.5 Deprecated attribute [dcl.attr.deprecated]

9.12.6 Fallthrough attribute [dcl.attr.fallthrough]

9.12.7 Indeterminate storage [dcl.attr.indet]

9.12.8 Likelihood attributes [dcl.attr.likelihood]

9.12.9 Maybe unused attribute [dcl.attr.unused]

9.12.10 Nodiscard attribute [dcl.attr.nodiscard]

9.12.11 Noreturn attribute [dcl.attr.noreturn]

9.12.12 No unique address attribute [dcl.attr.nouniqueaddr]

10 Modules [module][module]

10.1 Module units and purviews [module.unit]

10.2 Export declaration [module.interface]

10.3 Import declaration [module.import]

10.4 Global module fragment []

10.5 Private module fragment [module.private.frag]

10.6 Instantiation context [module.context]

10.7 Reachability [module.reach]

11 Classes [class][class]

11.1 Preamble [class.pre]

11.2 Properties of classes [class.prop]

11.3 Class names []

11.4 Class members [class.mem]

11.4.2 Member functions [class.mfct]

11.4.3 Non-static member functions [class.mfct.non.static]

11.4.4 Special member functions [special]

11.4.5 Constructors [class.ctor] Default constructors [class.default.ctor] Copy/move constructors [class.copy.ctor]

11.4.6 Copy/move assignment operator [class.copy.assign]

11.4.7 Destructors [class.dtor]

11.4.8 Conversions [class.conv] Conversion by constructor [class.conv.ctor] Conversion functions [class.conv.fct]

11.4.9 Static members [class.static] Static member functions [class.static.mfct] Static data members []

11.4.10 Bit-fields [class.bit]

11.4.11 Allocation and deallocation functions []

11.4.12 Nested class declarations [class.nest]

11.6 Local class declarations [class.local]

11.7 Derived classes [class.derived]

11.7.2 Multiple base classes [class.mi]

11.7.3 Virtual functions [class.virtual]

11.7.4 Abstract classes [class.abstract]

11.8 Member access control [class.access]

11.8.2 Access specifiers [class.access.spec]

11.8.3 Accessibility of base classes and base class members [class.access.base]

11.8.5 Protected member access [class.protected]

11.8.6 Access to virtual functions [class.access.virt]

11.8.7 Multiple access [class.paths]

11.9 Initialization [class.init]

11.9.2 Explicit initialization [class.expl.init]

11.9.3 Initializing bases and members [class.base.init]

11.9.4 Initialization by inherited constructor [class.inhctor.init]

11.9.5 Construction and destruction [class.cdtor]

11.9.6 Copy/move elision [class.copy.elision]

11.10 Comparisons []

11.10.1 Defaulted comparison operator functions []

11.10.2 Equality operator [class.eq]

11.10.3 Three-way comparison [class.spaceship]

11.10.4 Secondary comparison operators []

12 Overloading [over][over]

12.1 Preamble [over.pre]

12.2 Overload resolution [over.match]

12.2.2 Candidate functions and argument lists [over.match.funcs] Function call syntax [] Call to named function [] Call to object of class type [] Operators in expressions [over.match.oper] Initialization by constructor [over.match.ctor] Copy-initialization of class by user-defined conversion [over.match.copy] Initialization by conversion function [over.match.conv] Initialization by conversion function for direct reference binding [over.match.ref] Initialization by list-initialization [over.match.list] Class template argument deduction [over.match.class.deduct]

12.2.3 Viable functions [over.match.viable]

12.2.4 Best viable function [] Implicit conversion sequences [] Standard conversion sequences [over.ics.scs] User-defined conversion sequences [over.ics.user] Ellipsis conversion sequences [over.ics.ellipsis] Reference binding [over.ics.ref] List-initialization sequence [over.ics.list] Ranking implicit conversion sequences [over.ics.rank]

12.3 Address of an overload set [over.over]

12.4 Overloaded operators [over.oper]

12.4.2 Unary operators [over.unary]

12.4.3 Binary operators [over.binary] Simple assignment [over.ass]

12.4.4 Function call []

12.4.5 Subscripting [over.sub]

12.4.6 Class member access [over.ref]

12.4.7 Increment and decrement []

12.5 Built-in operators [over.built]

12.6 User-defined literals [over.literal]

13 Templates [temp][temp]

13.1 Preamble [temp.pre]

13.2 Template parameters [temp.param]

13.3 Names of template specializations [temp.names]

13.4 Template arguments [temp.arg]

13.4.2 Template type arguments [temp.arg.type]

13.4.3 Template non-type arguments [temp.arg.nontype]

13.4.4 Template template arguments [temp.arg.template]

13.5 Template constraints [temp.constr]

13.5.3 Constrained declarations [temp.constr.decl]

13.5.4 Constraint normalization [temp.constr.normal]

13.5.5 Partial ordering by constraints [temp.constr.order]

13.6 Type equivalence [temp.type]

13.7 Template declarations [temp.decls]

13.7.2 Class templates [temp.class] Member functions of class templates [temp.mem.func] Deduction guides [] Member classes of class templates [temp.mem.class] Static data members of class templates [temp.static] Enumeration members of class templates [temp.mem.enum]

13.7.3 Member templates [temp.mem]

13.7.4 Variadic templates [temp.variadic]

13.7.6 Partial specialization [temp.spec.partial] Matching of partial specializations [temp.spec.partial.match] Partial ordering of partial specializations [temp.spec.partial.order] Members of class template partial specializations [temp.spec.partial.member]

13.7.7 Function templates [temp.fct] Partial ordering of function templates [temp.func.order]

13.7.8 Alias templates [temp.alias]

13.7.9 Concept definitions [temp.concept]

13.8 Name resolution [temp.res]

13.8.2 Locally declared names [temp.local]

13.8.3 Dependent names [temp.dep] Dependent types [temp.dep.type] Type-dependent expressions [temp.dep.expr] Value-dependent expressions [temp.dep.constexpr] Dependent template arguments [temp.dep.temp]

13.8.4 Dependent name resolution [temp.dep.res] Point of instantiation [temp.point] Candidate functions [temp.dep.candidate]

13.9 Template instantiation and specialization [temp.spec]

13.9.2 Implicit instantiation [temp.inst]

13.9.3 Explicit instantiation [temp.explicit]

13.9.4 Explicit specialization [temp.expl.spec]

13.10 Function template specializations [temp.fct.spec]

13.10.2 Explicit template argument specification [temp.arg.explicit]

13.10.3 Template argument deduction [temp.deduct] Deducing template arguments from a function call [] Deducing template arguments taking the address of a function template [temp.deduct.funcaddr] Deducing conversion function template arguments [temp.deduct.conv] Deducing template arguments during partial ordering [temp.deduct.partial] Deducing template arguments from a type [temp.deduct.type] Deducing template arguments from a function declaration [temp.deduct.decl]

13.10.4 Overload resolution [temp.over]

14 Exception handling [except][except]

14.2 Throwing an exception [except.throw]

14.3 Constructors and destructors [except.ctor]

14.4 Handling an exception [except.handle]

14.5 Exception specifications [except.spec]

14.6 Special functions [except.special]

14.6.2 The std​::​terminate function [except.terminate]

14.6.3 The std​::​uncaught_exceptions function [except.uncaught]

15 Preprocessing directives [cpp][cpp]

15.1 Preamble [cpp.pre]

15.2 Conditional inclusion [cpp.cond]

15.3 Source file inclusion [cpp.include]

15.4 Module directive [cpp.module]

15.5 Header unit importation [cpp.import]

15.6 Macro replacement [cpp.replace]

15.6.2 Argument substitution [cpp.subst]

15.6.3 The # operator [cpp.stringize]

15.6.4 The ## operator [cpp.concat]

15.6.5 Rescanning and further replacement [cpp.rescan]

15.6.6 Scope of macro definitions [cpp.scope]

15.7 Line control [cpp.line]

15.8 Diagnostic directives [cpp.error]

15.9 Pragma directive [cpp.pragma]

15.10 Null directive [cpp.null]

15.11 Predefined macro names [cpp.predefined]

15.12 Pragma operator [cpp.pragma.op]

16 Library introduction [library][library]

16.2 The C standard library [library.c]

16.4 Library-wide requirements [requirements]

16.4.2 Library contents and organization [organization] Library contents [contents] Freestanding implementations [compliance]

16.4.4 Requirements on types and expressions [utility.requirements] Template argument requirements [utility.arg.requirements] Swappable requirements [swappable.requirements] Cpp17NullablePointer requirements [nullablepointer.requirements] Cpp17Hash requirements [hash.requirements]

16.4.5 Constraints on programs [constraints] Namespace use [namespace.constraints] Namespaces for future standardization [namespace.future] Derived classes [derived.classes] Replacement functions [replacement.functions] Handler functions [handler.functions] Function arguments [res.on.arguments] Library object access [res.on.objects] Semantic requirements [res.on.requirements]

16.4.6 Conforming implementations [conforming] Restrictions on macro definitions [res.on.macro.definitions] Non-member functions [global.functions] Member functions [member.functions] Friend functions [hidden.friends] Constexpr functions and constructors [constexpr.functions] Requirements for stable algorithms [algorithm.stable] Data race avoidance [] Protection within classes [protection.within.classes] Derived classes [derivation] Restrictions on exception handling [res.on.exception.handling] Value of error codes [] Moved-from state of library types [lib.types.movedfrom]

17 Language support library [support][support]

17.2 Common definitions [support.types]

17.2.1 Header <cstddef> synopsis [cstddef.syn]

17.2.2 Header <cstdlib> synopsis [cstdlib.syn]

17.2.4 Sizes, alignments, and offsets [support.types.layout]

17.2.5 byte type operations [support.types.byteops]

17.3 Implementation properties [support.limits]

17.3.2 Header <version> synopsis [version.syn]

17.3.3 Header <limits> synopsis [limits.syn]

17.3.4 Enum float_round_style []

17.3.5 Class template numeric_limits [numeric.limits] numeric_limits members [numeric.limits.members] numeric_limits specializations [numeric.special]

17.3.6 Header <climits> synopsis [climits.syn]

17.3.7 Header <cfloat> synopsis [cfloat.syn]

17.4 Arithmetic types [support.arith.types]

17.4.1 Header <cstdint> synopsis [cstdint.syn]

17.4.2 Header <stdfloat> synopsis [stdfloat.syn]

17.5 Startup and termination [support.start.term]

17.6 Dynamic memory management [support.dynamic]

17.6.2 Header <new> synopsis [new.syn]

17.6.3 Storage allocation and deallocation [new.delete] Single-object forms [new.delete.single] Non-allocating forms [new.delete.placement]

17.6.4 Storage allocation errors [alloc.errors] Class bad_alloc [bad.alloc] Class bad_array_new_length [new.badlength] Type new_handler [new.handler] set_new_handler [] get_new_handler []

17.6.5 Pointer optimization barrier [ptr.launder]

17.6.6 Hardware interference size [hardware.interference]

17.7 Type identification [support.rtti]

17.7.2 Header <typeinfo> synopsis [typeinfo.syn]

17.7.3 Class type_info []

17.7.4 Class bad_cast [bad.cast]

17.7.5 Class bad_typeid [bad.typeid]

17.9 Exception handling [support.exception]

17.9.2 Header <exception> synopsis [exception.syn]

17.9.3 Class exception [exception]

17.9.4 Class bad_exception [bad.exception]

17.9.5 Abnormal termination [exception.terminate] Type terminate_handler [terminate.handler]

17.9.6 uncaught_exceptions [uncaught.exceptions]

17.9.7 Exception propagation [propagation]

17.9.8 nested_exception [except.nested]

17.10 Initializer lists [support.initlist]

17.10.2 Header <initializer_list> synopsis [initializer.list.syn]

17.10.3 Initializer list constructors [support.initlist.cons]

17.10.4 Initializer list access [support.initlist.access]

17.10.5 Initializer list range access [support.initlist.range]

17.11 Comparisons [cmp]

17.11.1 Header <compare> synopsis [compare.syn]

17.11.2 Comparison category types [cmp.categories] Class partial_ordering [cmp.partialord] Class weak_ordering [cmp.weakord] Class strong_ordering [cmp.strongord]

17.11.3 Class template common_comparison_category [cmp.common]

17.11.4 Concept three_way_comparable [cmp.concept]

17.11.5 Result of three-way comparison [cmp.result]

17.11.6 Comparison algorithms [cmp.alg]

17.13 Other runtime support [support.runtime]

17.13.2 Header <cstdarg> synopsis [cstdarg.syn]

17.13.3 Header <csetjmp> synopsis [csetjmp.syn]

17.13.4 Header <csignal> synopsis [csignal.syn]

17.13.5 Signal handlers [support.signal]

17.14 C headers [support.c.headers]

17.14.2 Header <complex.h> synopsis [complex.h.syn]

17.14.3 Header <iso646.h> synopsis [iso646.h.syn]

17.14.4 Header <stdalign.h> synopsis [stdalign.h.syn]

17.14.5 Header <stdbool.h> synopsis [stdbool.h.syn]

17.14.6 Header <tgmath.h> synopsis [tgmath.h.syn]

18 Concepts library [concepts][concepts]

18.2 Equality preservation [concepts.equality]

18.3 Header <concepts> synopsis [concepts.syn]

18.4 Language-related concepts [concepts.lang]

18.4.2 Concept same_as [concept.same]

18.4.3 Concept derived_from [concept.derived]

18.4.4 Concept convertible_to [concept.convertible]

18.4.5 Concept common_reference_with [concept.commonref]

18.4.6 Concept common_with [concept.common]

18.4.7 Arithmetic concepts [concepts.arithmetic]

18.4.8 Concept assignable_from [concept.assignable]

18.4.9 Concept swappable [concept.swappable]

18.4.10 Concept destructible [concept.destructible]

18.4.11 Concept constructible_from [concept.constructible]

18.4.12 Concept default_initializable [concept.default.init]

18.4.13 Concept move_constructible [concept.moveconstructible]

18.4.14 Concept copy_constructible [concept.copyconstructible]

18.5 Comparison concepts []

18.5.2 Boolean testability [concept.booleantestable]

18.5.3 Comparison common types [concept.comparisoncommontype]

18.5.4 Concept equality_comparable [concept.equalitycomparable]

18.5.5 Concept totally_ordered [concept.totallyordered]

18.6 Object concepts [concepts.object]

18.7 Callable concepts [concepts.callable]

18.7.2 Concept invocable [concept.invocable]

18.7.3 Concept regular_invocable [concept.regularinvocable]

18.7.4 Concept predicate [concept.predicate]

18.7.5 Concept relation [concept.relation]

18.7.6 Concept equivalence_relation [concept.equiv]

18.7.7 Concept strict_weak_order [concept.strictweakorder]

19 Diagnostics library [diagnostics][diagnostics]

19.2 Exception classes [std.exceptions]

19.2.2 Header <stdexcept> synopsis [stdexcept.syn]

19.2.3 Class logic_error [logic.error]

19.2.4 Class domain_error [domain.error]

19.2.5 Class invalid_argument [invalid.argument]

19.2.6 Class length_error [length.error]

19.2.7 Class out_of_range [out.of.range]

19.2.8 Class runtime_error [runtime.error]

19.2.9 Class range_error [range.error]

19.2.10 Class overflow_error [overflow.error]

19.2.11 Class underflow_error [underflow.error]

19.3 Assertions [assertions]

19.3.2 Header <cassert> synopsis [cassert.syn]

19.3.3 The assert macro [assertions.assert]

19.4 Error numbers [errno]

19.4.2 Header <cerrno> synopsis [cerrno.syn]

20 Memory management library [mem][mem]

20.3 Smart pointers [smartptr]

20.3.3 Smart pointer hash support [util.smartptr.hash]

20.3.4 Smart pointer adaptors [smartptr.adapt] Class template out_ptr_t [out.ptr.t] Function template out_ptr [out.ptr] Class template inout_ptr_t [inout.ptr.t] Function template inout_ptr [inout.ptr]

20.4 Memory resources [mem.res]

20.4.1 Header <memory_resource> synopsis [mem.res.syn]

20.4.2 Class memory_resource [mem.res.class] Public member functions [mem.res.public] Private virtual member functions [mem.res.private]

20.4.4 Access to program-wide memory_resource objects []

20.4.5 Pool resource classes [mem.res.pool] Classes synchronized_pool_resource and unsynchronized_pool_resource [mem.res.pool.overview] pool_options data members [mem.res.pool.options] Constructors and destructors [mem.res.pool.ctor]

20.5 Class template scoped_allocator_adaptor [allocator.adaptor]

20.5.1 Header <scoped_allocator> synopsis [allocator.adaptor.syn]

21 Metaprogramming library [meta][meta]

21.2 Compile-time integer sequences [intseq]

21.2.2 Class template integer_sequence [intseq.intseq]

21.2.3 Alias template make_integer_sequence [intseq.make]

21.3 Metaprogramming and type traits [type.traits]

21.3.2 Requirements [meta.rqmts]

21.3.3 Header <type_traits> synopsis [meta.type.synop]

21.3.4 Helper classes []

21.3.5 Unary type traits [meta.unary] Primary type categories [] Composite type traits [meta.unary.comp] Type properties [meta.unary.prop]

21.3.6 Type property queries [meta.unary.prop.query]

21.3.7 Relationships between types [meta.rel]

21.3.8 Transformations between types [meta.trans] Const-volatile modifications [] Reference modifications [meta.trans.ref] Sign modifications [meta.trans.sign] Array modifications [meta.trans.arr] Pointer modifications [meta.trans.ptr] Other transformations [meta.trans.other]

21.3.9 Logical operator traits [meta.logical]

21.3.10 Member relationships [meta.member]

21.3.11 Constant evaluation context [meta.const.eval]

21.4 Compile-time rational arithmetic [ratio]

21.4.2 Header <ratio> synopsis [ratio.syn]

21.4.3 Class template ratio [ratio.ratio]

21.4.4 Arithmetic on ratios [ratio.arithmetic]

21.4.5 Comparison of ratios [ratio.comparison]

21.4.6 SI types for ratio []

22 General utilities library [utilities][utilities]

22.2 Utility components [utility]

22.2.1 Header <utility> synopsis [utility.syn]

22.2.4 Forward/move helpers [forward]

22.2.5 Function template as_const []

22.2.6 Function template declval [declval]

22.2.7 Integer comparison functions [utility.intcmp]

22.2.8 Function template to_underlying [utility.underlying]

22.2.9 Function unreachable [utility.unreachable]

22.3 Pairs [pairs]

22.3.2 Class template pair [pairs.pair]

22.3.3 Specialized algorithms [pairs.spec]

22.3.4 Tuple-like access to pair [pair.astuple]

22.3.5 Piecewise construction [pair.piecewise]

22.4 Tuples [tuple]

22.4.2 Header <tuple> synopsis [tuple.syn]

22.4.3 Concept tuple-like []

22.4.5 Tuple creation functions [tuple.creation]

22.4.6 Calling a function with a tuple of arguments [tuple.apply]

22.4.7 Tuple helper classes [tuple.helper]

22.4.8 Element access [tuple.elem]

22.4.9 Relational operators [tuple.rel]

22.4.10 common_reference related specializations [tuple.common.ref]

22.4.11 Tuple traits [tuple.traits]

22.4.12 Tuple specialized algorithms [tuple.special]

22.5 Optional objects [optional]

22.5.2 Header <optional> synopsis [optional.syn]

22.5.4 No-value state indicator [optional.nullopt]

22.5.5 Class bad_optional_access [optional.bad.access]

22.5.6 Relational operators [optional.relops]

22.5.7 Comparison with nullopt [optional.nullops]

22.5.8 Comparison with T [optional.comp.with.t]

22.5.9 Specialized algorithms [optional.specalg]

22.6 Variants [variant]

22.6.2 Header <variant> synopsis [variant.syn]

22.6.4 variant helper classes [variant.helper]

22.6.5 Value access [variant.get]

22.6.6 Relational operators [variant.relops]

22.6.8 Class monostate [variant.monostate]

22.6.9 monostate relational operators [variant.monostate.relops]

22.6.10 Specialized algorithms [variant.specalg]

22.6.11 Class bad_variant_access [variant.bad.access]

22.6.12 Hash support [variant.hash]

22.7 Storage for any type [any]

22.7.2 Header <any> synopsis [any.synop]

22.7.3 Class bad_any_cast [any.bad.any.cast]

22.7.5 Non-member functions [any.nonmembers]

22.9 Bitsets [bitset]

22.9.1 Header <bitset> synopsis [bitset.syn]

22.9.3 bitset hash support [bitset.hash]

22.9.4 bitset operators [bitset.operators]

22.10 Function objects [function.objects]

22.10.2 Header <functional> synopsis [functional.syn]

22.10.3 Definitions [func.def]

22.10.4 Requirements [func.require]

22.10.5 invoke functions [func.invoke]

22.10.6 Class template reference_wrapper [refwrap] Helper functions [refwrap.helpers] common_reference related specializations [refwrap.common.ref]

22.10.8 Comparisons [comparisons] Class template equal_to [] Class template not_equal_to [] Class template greater [comparisons.greater] Class template less [comparisons.less] Class template greater_equal [comparisons.greater.equal] Class template less_equal [comparisons.less.equal] Class compare_three_way [comparisons.three.way]

22.10.9 Concept-constrained comparisons [range.cmp]

22.10.10 Logical operations [logical.operations] Class template logical_and [logical.operations.and] Class template logical_or [logical.operations.or] Class template logical_not [logical.operations.not]

22.10.12 Class identity [func.identity]

22.10.13 Function template not_fn [func.not.fn]

22.10.14 Function templates bind_front and bind_back [func.bind.partial]

22.10.15 Function object binders [func.bind] Class template is_bind_expression [func.bind.isbind] Class template is_placeholder [func.bind.isplace] Function template bind [func.bind.bind]

22.10.16 Function template mem_fn [func.memfn]

22.10.17 Polymorphic function wrappers [func.wrap] Class bad_function_call [func.wrap.badcall] Non-owning wrapper [func.wrap.ref] Class template function_ref [func.wrap.ref.class] Constructors and assignment operators [func.wrap.ref.ctor]

22.10.18 Searchers [] Class template default_searcher [] Class template boyer_moore_searcher [] Class template boyer_moore_horspool_searcher []

22.10.19 Class template hash [unord.hash]

22.11 Class type_index [type.index]

22.11.1 Header <typeindex> synopsis [type.index.synopsis]

22.11.2 type_index overview [type.index.overview]

22.11.3 type_index members [type.index.members]

22.12 Execution policies [execpol]

22.12.2 Header <execution> synopsis [execution.syn]

22.12.3 Execution policy type trait [execpol.type]

22.12.4 Sequenced execution policy [execpol.seq]

22.12.5 Parallel execution policy [execpol.par]

22.12.6 Parallel and unsequenced execution policy [execpol.parunseq]

22.12.7 Unsequenced execution policy [execpol.unseq]

22.12.8 Execution policy objects [execpol.objects]

22.13 Primitive numeric conversions [charconv]

22.13.1 Header <charconv> synopsis [charconv.syn]

22.13.2 Primitive numeric output conversion []

22.13.3 Primitive numeric input conversion [charconv.from.chars]

22.14 Formatting [format]

22.14.1 Header <format> synopsis [format.syn]

22.14.4 Class template basic_format_string [format.fmt.string]

22.14.5 Formatting functions [format.functions]

22.14.6 Formatter [format.formatter] Formatter requirements [formatter.requirements] Concept formattable [format.formattable] Formatter specializations [format.formatter.spec] Formatting escaped characters and strings [format.string.escaped] Class template basic_format_parse_context [format.parse.ctx] Class template basic_format_context [format.context]

22.14.7 Formatting of ranges [format.range] Variable template format_kind [format.range.fmtkind] Class template range_formatter [format.range.formatter] Class template range-default-formatter [format.range.fmtdef] Specialization of range-default-formatter for maps [format.range.fmtmap] Specialization of range-default-formatter for sets [format.range.fmtset] Specialization of range-default-formatter for strings [format.range.fmtstr]

22.14.8 Arguments [format.arguments] Class template basic_format_arg [format.arg] Class template format-arg-store [] Class template basic_format_args [format.args]

22.14.9 Tuple formatter [format.tuple]

22.14.10 Class format_error [format.error]

22.15 Bit manipulation [bit]

22.15.2 Header <bit> synopsis [bit.syn]

22.15.3 Function template bit_cast [bit.cast]

22.15.5 Integral powers of 2 [bit.pow.two]

23 Strings library [strings][strings]

23.3 String view classes [string.view]

23.3.2 Header <string_view> synopsis [string.view.synop]

23.3.4 Non-member comparison functions [string.view.comparison]

23.3.5 Inserters and extractors []

23.3.7 Suffix for basic_string_view literals [string.view.literals]

23.4 String classes [string.classes]

23.4.2 Header <string> synopsis [string.syn]

23.4.3 Class template basic_string [basic.string] General requirements [string.require] Constructors and assignment operators [string.cons] Iterator support [string.iterators] Element access [string.access] Modifiers [string.modifiers] basic_string​::​operator+= [string.op.append] basic_string​::​append [string.append] basic_string​::​assign [string.assign] basic_string​::​insert [string.insert] basic_string​::​erase [string.erase] basic_string​::​replace [string.replace] basic_string​::​copy [string.copy] basic_string​::​swap [string.swap] String operations [string.ops] basic_string​::​substr [string.substr] basic_string​::​compare [] basic_string​::​starts_with [string.starts.with] basic_string​::​ends_with [string.ends.with] basic_string​::​contains [string.contains]

23.4.4 Non-member functions [string.nonmembers] Non-member comparison operator functions [string.cmp] Inserters and extractors []

23.4.5 Numeric conversions [string.conversions]

23.4.7 Suffix for basic_string literals [basic.string.literals]

23.5 Null-terminated sequence utilities [c.strings]

23.5.1 Header <cctype> synopsis [cctype.syn]

23.5.2 Header <cwctype> synopsis [cwctype.syn]

23.5.3 Header <cstring> synopsis [cstring.syn]

23.5.4 Header <cwchar> synopsis [cwchar.syn]

23.5.5 Header <cuchar> synopsis [cuchar.syn]

23.5.6 Multibyte / wide string and character conversion functions [c.mb.wcs]

24 Containers library [containers][containers]

24.2 Requirements [container.requirements]

24.2.2 General containers [container.requirements.general] Container requirements [container.reqmts] Reversible container requirements [container.rev.reqmts] Optional container requirements [container.opt.reqmts] Allocator-aware containers [container.alloc.reqmts]

24.2.4 Sequence containers [sequence.reqmts]

24.2.8 Unordered associative containers [unord.req] Exception safety guarantees [unord.req.except]

24.3 Sequence containers [sequences]

24.3.2 Header <array> synopsis [array.syn]

24.3.3 Header <deque> synopsis [deque.syn]

24.3.4 Header <forward_list> synopsis [forward.list.syn]

24.3.5 Header <list> synopsis [list.syn]

24.3.6 Header <vector> synopsis [vector.syn]

24.3.7 Header <inplace_vector> synopsis [inplace.vector.syn]

24.3.8 Class template array [array] Constructors, copy, and assignment [array.cons] Member functions [array.members] Specialized algorithms [array.special] Zero-sized arrays [] Array creation functions [array.creation] Tuple interface [array.tuple]

24.3.9 Class template deque [deque] Constructors, copy, and assignment [deque.cons]

24.3.11 Class template list [list] Constructors, copy, and assignment [list.cons]

24.3.13 Specialization of vector for bool [vector.bool] Partial class template specialization vector<bool, Allocator> [vector.bool.pspc] Formatter specialization for vector<bool> [vector.bool.fmt]

24.4 Associative containers [associative]

24.4.2 Header <map> synopsis []

24.4.3 Header <set> synopsis [associative.set.syn]

24.4.4 Class template map [map] Constructors, copy, and assignment [map.cons] Element access [map.access]

24.4.6 Class template set [set] Constructors, copy, and assignment [set.cons]

24.5 Unordered associative containers [unord]

24.5.2 Header <unordered_map> synopsis []

24.5.3 Header <unordered_set> synopsis [unord.set.syn]

24.6 Container adaptors [container.adaptors]

24.6.2 Header <queue> synopsis [queue.syn]

24.6.3 Header <stack> synopsis [stack.syn]

24.6.4 Header <flat_map> synopsis []

24.6.5 Header <flat_set> synopsis [flat.set.syn]

24.6.6 Class template queue [queue] Constructors [queue.cons] Constructors with allocators [queue.cons.alloc] Specialized algorithms [queue.special]

24.6.7 Class template priority_queue [priority.queue] Constructors with allocators [priqueue.cons.alloc] Specialized algorithms [priqueue.special]

24.6.8 Class template stack [stack] Constructors [stack.cons] Constructors with allocators [stack.cons.alloc] Specialized algorithms [stack.special]

24.6.13 Container adaptors formatting [container.adaptors.format]

24.7 Views [views]

24.7.2 Contiguous access [views.contiguous] Header <span> synopsis [span.syn] Class template span [views.span] Constructors, copy, and assignment [span.cons] Deduction guides [span.deduct] Element access [span.elem] Iterator support [span.iterators] Views of object representation [span.objectrep]

24.7.3 Multidimensional access [views.multidim] Header <mdspan> synopsis [mdspan.syn] Class template extents [mdspan.extents] Exposition-only helpers [mdspan.extents.expo] Observers of the multidimensional index space [mdspan.extents.obs] Comparison operators [mdspan.extents.cmp] Alias template dextents [mdspan.extents.dextents] Alias template dims [mdspan.extents.dims] Layout mapping [mdspan.layout] Layout mapping policy requirements [mdspan.layout.policy.reqmts] submdspan [mdspan.sub] submdspan_mapping_result [] Exposition-only helpers [mdspan.sub.helpers] submdspan_extents function [mdspan.sub.extents] Specializations of submdspan_mapping [] layout_left specialization of submdspan_mapping [] layout_right specialization of submdspan_mapping [] layout_stride specialization of submdspan_mapping [] layout_left_padded specialization of submdspan_mapping [] layout_right_padded specialization of submdspan_mapping [] submdspan function template [mdspan.sub.sub]

25 Iterators library [iterators][iterators]

25.2 Header <iterator> synopsis [iterator.synopsis]

25.3 Iterator requirements [iterator.requirements]

25.3.2 Associated types [iterator.assoc.types] Incrementable traits [incrementable.traits] Indirectly readable traits [readable.traits] Iterator traits [iterator.traits]

25.3.3 Customization point objects [iterator.cust] ranges​::​iter_move [iterator.cust.move] ranges​::​iter_swap [iterator.cust.swap]

25.3.4 Iterator concepts [iterator.concepts] Concept indirectly_readable [iterator.concept.readable] Concept indirectly_writable [iterator.concept.writable] Concept weakly_incrementable [iterator.concept.winc] Concept incrementable [] Concept input_or_output_iterator [iterator.concept.iterator] Concept sized_sentinel_for [iterator.concept.sizedsentinel] Concept input_iterator [iterator.concept.input] Concept output_iterator [iterator.concept.output] Concept forward_iterator [iterator.concept.forward] Concept bidirectional_iterator [iterator.concept.bidir] Concept random_access_iterator [iterator.concept.random.access] Concept contiguous_iterator [iterator.concept.contiguous]

25.3.5 C++17 iterator requirements [iterator.cpp17] Input iterators [input.iterators] Output iterators [output.iterators] Forward iterators [forward.iterators] Bidirectional iterators [bidirectional.iterators] Random access iterators [random.access.iterators]

25.3.6 Indirect callable requirements [indirectcallable] Indirect callable traits [indirectcallable.traits] Class template projected [projected]

25.3.7 Common algorithm requirements [alg.req] Concept indirectly_movable [alg.req.ind.move] Concept indirectly_copyable [alg.req.ind.copy] Concept indirectly_swappable [alg.req.ind.swap] Concept indirectly_comparable [alg.req.ind.cmp] Concept permutable [alg.req.permutable] Concept mergeable [alg.req.mergeable] Concept sortable [alg.req.sortable]

25.4 Iterator primitives [iterator.primitives]

25.4.2 Standard iterator tags [std.iterator.tags]

25.4.3 Iterator operations [iterator.operations]

25.4.4 Range iterator operations [range.iter.ops] ranges​::​advance [range.iter.op.advance] ranges​::​distance [range.iter.op.distance] ranges​::​next [] ranges​::​prev [range.iter.op.prev]

25.5 Iterator adaptors [predef.iterators]

25.5.3 Constant iterators and sentinels [const.iterators] Class template basic_const_iterator [const.iterators.iterator]

25.5.4 Move iterators and sentinels [move.iterators] Class template move_iterator [move.iterator] Construction and assignment [move.iter.cons] Element access [move.iter.elem] Non-member functions [move.iter.nonmember] Class template move_sentinel [move.sentinel]

25.5.5 Common iterators [iterators.common] Class template common_iterator [common.iterator] Associated types [common.iter.types] Constructors and conversions [common.iter.const]

25.5.6 Default sentinel [default.sentinel]

25.5.7 Counted iterators [iterators.counted] Class template counted_iterator [counted.iterator] Constructors and conversions [counted.iter.const]

25.5.8 Unreachable sentinel [unreachable.sentinel]

25.7 Range access [iterator.range]

26 Ranges library [ranges][ranges]

26.2 Header <ranges> synopsis [ranges.syn]

26.3 Range access [range.access]

26.3.2 ranges​::​begin [range.access.begin]

26.3.3 ranges​::​end [range.access.end]

26.3.4 ranges​::​cbegin [range.access.cbegin]

26.3.5 ranges​::​cend [range.access.cend]

26.3.6 ranges​::​rbegin [range.access.rbegin]

26.3.7 ranges​::​rend [range.access.rend]

26.3.8 ranges​::​crbegin [range.access.crbegin]

26.3.9 ranges​::​crend [range.access.crend]

26.3.10 ranges​::​size [range.prim.size]

26.3.11 ranges​::​ssize [range.prim.ssize]

26.3.12 ranges​::​empty [range.prim.empty]

26.3.13 ranges​::​data []

26.3.14 ranges​::​cdata [range.prim.cdata]

26.4 Range requirements [range.req]

26.4.3 Sized ranges [range.sized]

26.4.5 Other range refinements [range.refinements]

26.6 Range factories [range.factories]

26.6.4 Iota view [range.iota] Class template iota_view [range.iota.view] Class iota_view​::​iterator [range.iota.iterator] Class iota_view​::​sentinel [range.iota.sentinel]

26.6.5 Repeat view [range.repeat] Class template repeat_view [range.repeat.view] Class repeat_view​::​iterator [range.repeat.iterator]

26.6.6 Istream view [range.istream] Class template basic_istream_view [range.istream.view] Class basic_istream_view​::​iterator [range.istream.iterator]

26.7 Range adaptors [range.adaptors]

26.7.2 Range adaptor objects [range.adaptor.object]

26.7.3 Movable wrapper [range.move.wrap]

26.7.4 Non-propagating cache [range.nonprop.cache]

26.7.5 Range adaptor helpers [range.adaptor.helpers]

26.7.6 All view [range.all] Class template ref_view [range.ref.view] Class template owning_view [range.owning.view]

26.7.8 Filter view [range.filter] Class template filter_view [range.filter.view] Class filter_view​::​iterator [range.filter.iterator] Class filter_view​::​sentinel [range.filter.sentinel]

26.7.9 Transform view [range.transform] Class template transform_view [range.transform.view] Class template transform_view​::​iterator [range.transform.iterator] Class template transform_view​::​sentinel [range.transform.sentinel]

26.7.10 Take view [range.take] Class template take_view [range.take.view] Class template take_view​::​sentinel [range.take.sentinel]

26.7.11 Take while view [range.take.while] Class template take_while_view [range.take.while.view] Class template take_while_view​::​sentinel [range.take.while.sentinel]

26.7.14 Join view [range.join] Class template join_view [range.join.view] Class template join_view​::​iterator [range.join.iterator] Class template join_view​::​sentinel [range.join.sentinel]

26.7.15 Join with view [range.join.with] Class template join_with_view [range.join.with.view] Class template join_with_view​::​iterator [range.join.with.iterator] Class template join_with_view​::​sentinel [range.join.with.sentinel]

26.7.16 Lazy split view [range.lazy.split] Class template lazy_split_view [range.lazy.split.view] Class template lazy_split_view​::​outer-iterator [range.lazy.split.outer] Class lazy_split_view​::​outer-iterator​::​value_type [range.lazy.split.outer.value] Class template lazy_split_view​::​inner-iterator [range.lazy.split.inner]

26.7.17 Split view [range.split] Class template split_view [range.split.view] Class split_view​::​iterator [range.split.iterator] Class split_view​::​sentinel [range.split.sentinel]

26.7.18 Concat view [range.concat] Class template concat_view [range.concat.view] Class concat_view​::​iterator [range.concat.iterator]

26.7.23 Elements view [range.elements] Class template elements_view [range.elements.view] Class template elements_view​::​iterator [range.elements.iterator] Class template elements_view​::​sentinel [range.elements.sentinel]

26.7.24 Enumerate view [range.enumerate] Class template enumerate_view [range.enumerate.view] Class template enumerate_view​::​iterator [range.enumerate.iterator] Class template enumerate_view​::​sentinel [range.enumerate.sentinel]

26.7.25 Zip view [] Class template zip_view [] Class template zip_view​::​iterator [] Class template zip_view​::​sentinel []

26.7.26 Zip transform view [] Class template zip_transform_view [] Class template zip_transform_view​::​iterator [] Class template zip_transform_view​::​sentinel []

26.7.27 Adjacent view [range.adjacent] Class template adjacent_view [range.adjacent.view] Class template adjacent_view​::​iterator [range.adjacent.iterator] Class template adjacent_view​::​sentinel [range.adjacent.sentinel]

26.7.28 Adjacent transform view [range.adjacent.transform] Class template adjacent_transform_view [range.adjacent.transform.view] Class template adjacent_transform_view​::​iterator [range.adjacent.transform.iterator] Class template adjacent_transform_view​::​sentinel [range.adjacent.transform.sentinel]

26.7.29 Chunk view [range.chunk] Class template chunk_view for input ranges [range.chunk.view.input] Class chunk_view​::​outer-iterator [range.chunk.outer.iter] Class chunk_view​::​outer-iterator​::​value_type [range.chunk.outer.value] Class chunk_view​::​inner-iterator [range.chunk.inner.iter] Class template chunk_view for forward ranges [range.chunk.view.fwd] Class template chunk_view​::​iterator for forward ranges [range.chunk.fwd.iter]

26.7.30 Slide view [range.slide] Class template slide_view [range.slide.view] Class template slide_view​::​iterator [range.slide.iterator] Class slide_view​::​sentinel [range.slide.sentinel]

26.7.31 Chunk by view [] Class template chunk_by_view [] Class chunk_by_view​::​iterator []

26.7.32 Stride view [range.stride] Class template stride_view [range.stride.view] Class template stride_view​::​iterator [range.stride.iterator]

26.7.33 Cartesian product view [range.cartesian] Class template cartesian_product_view [range.cartesian.view] Class template cartesian_product_view​::​iterator [range.cartesian.iterator]

26.8 Range generators [coro.generator]

26.8.2 Header <generator> synopsis [generator.syn]

26.8.3 Class template generator [coro.generator.class]

26.8.5 Class generator​::​promise_type [coro.generator.promise]

26.8.6 Class generator​::​iterator [coro.generator.iterator]

27 Algorithms library [algorithms][algorithms]

27.2 Algorithms requirements [algorithms.requirements]

27.3 Parallel algorithms [algorithms.parallel]

27.3.2 Requirements on user-provided function objects [algorithms.parallel.user]

27.3.3 Effect of execution policies on algorithm execution [algorithms.parallel.exec]

27.3.4 Parallel algorithm exceptions [algorithms.parallel.exceptions]

27.3.5 ExecutionPolicy algorithm overloads [algorithms.parallel.overloads]

27.4 Header <algorithm> synopsis [algorithm.syn]

27.5 Algorithm result types [algorithms.results]

27.9 Header <numeric> synopsis [numeric.ops.overview]

27.10 Generalized numeric operations [numeric.ops]

27.10.5 Inner product [inner.product]

27.10.6 Transform reduce [transform.reduce]

27.10.8 Exclusive scan [exclusive.scan]

27.10.9 Inclusive scan [inclusive.scan]

27.10.10 Transform exclusive scan [transform.exclusive.scan]

27.10.11 Transform inclusive scan [transform.inclusive.scan]

27.10.12 Adjacent difference [adjacent.difference]

27.10.14 Greatest common divisor [numeric.ops.gcd]

27.10.15 Least common multiple [numeric.ops.lcm]

27.10.17 Saturation arithmetic [numeric.sat] Arithmetic functions [numeric.sat.func]

27.11 Specialized <memory> algorithms [specialized.algorithms]

27.11.2 Special memory concepts [special.mem.concepts]

27.11.3 uninitialized_default_construct [uninitialized.construct.default]

27.11.4 uninitialized_value_construct [uninitialized.construct.value]

27.11.5 uninitialized_copy [uninitialized.copy]

27.11.6 uninitialized_move [uninitialized.move]

27.11.7 uninitialized_fill [uninitialized.fill]

27.12 Specialized <random> algorithms [alg.rand]

27.13 C library algorithms [alg.c.library]

28 Numerics library [numerics][numerics]

28.2 Numeric type requirements [numeric.requirements]

28.3 The floating-point environment [cfenv]

28.3.1 Header <cfenv> synopsis [cfenv.syn]

28.4 Complex numbers [complex.numbers]

28.4.2 Header <complex> synopsis [complex.syn]

28.4.3 Class template complex [complex]

28.4.4 Member functions [complex.members]

28.4.5 Member operators [complex.member.ops]

28.4.6 Non-member operations [complex.ops]

28.4.7 Value operations [complex.value.ops]

28.4.9 Tuple interface [complex.tuple]

28.4.10 Additional overloads [cmplx.over]

28.4.11 Suffixes for complex number literals [complex.literals]

28.5 Random number generation [rand]

28.5.2 Header <random> synopsis [rand.synopsis]

28.5.3 Requirements [rand.req] General requirements [rand.req.genl] Seed sequence requirements [rand.req.seedseq] Uniform random bit generator requirements [rand.req.urng] Random number engine requirements [rand.req.eng] Random number engine adaptor requirements [rand.req.adapt] Random number distribution requirements [rand.req.dist]

28.5.4 Random number engine class templates [rand.eng] Class template linear_congruential_engine [rand.eng.lcong] Class template mersenne_twister_engine [rand.eng.mers] Class template subtract_with_carry_engine [rand.eng.sub]

28.5.5 Random number engine adaptor class templates [rand.adapt] Class template discard_block_engine [rand.adapt.disc] Class template independent_bits_engine [rand.adapt.ibits] Class template shuffle_order_engine [rand.adapt.shuf]

28.5.6 Engines and engine adaptors with predefined parameters [rand.predef]

28.5.7 Class random_device [rand.device]

28.5.8 Utilities [rand.util] Function template generate_canonical [rand.util.canonical]

28.5.9 Random number distribution class templates [rand.dist] Uniform distributions [rand.dist.uni] Class template uniform_int_distribution [] Class template uniform_real_distribution [rand.dist.uni.real] Bernoulli distributions [rand.dist.bern] Class bernoulli_distribution [rand.dist.bern.bernoulli] Class template binomial_distribution [rand.dist.bern.bin] Class template geometric_distribution [rand.dist.bern.geo] Class template negative_binomial_distribution [rand.dist.bern.negbin] Poisson distributions [rand.dist.pois] Class template poisson_distribution [rand.dist.pois.poisson] Class template exponential_distribution [rand.dist.pois.exp] Class template gamma_distribution [rand.dist.pois.gamma] Class template weibull_distribution [rand.dist.pois.weibull] Class template extreme_value_distribution [rand.dist.pois.extreme] Normal distributions [rand.dist.norm] Class template normal_distribution [rand.dist.norm.normal] Class template lognormal_distribution [rand.dist.norm.lognormal] Class template chi_squared_distribution [rand.dist.norm.chisq] Class template cauchy_distribution [rand.dist.norm.cauchy] Class template fisher_f_distribution [rand.dist.norm.f] Class template student_t_distribution [rand.dist.norm.t] Sampling distributions [rand.dist.samp] Class template discrete_distribution [rand.dist.samp.discrete] Class template piecewise_constant_distribution [rand.dist.samp.pconst] Class template piecewise_linear_distribution [rand.dist.samp.plinear]

28.5.10 Low-quality random number generation [c.math.rand]

28.6 Numeric arrays [numarray]

28.6.1 Header <valarray> synopsis [valarray.syn]

28.6.3 valarray non-member operations [valarray.nonmembers] Binary operators [valarray.binary] Specialized algorithms [valarray.special]

28.6.10 valarray range access [valarray.range]

28.7 Mathematical functions for floating-point types [c.math]

28.7.1 Header <cmath> synopsis [cmath.syn]

28.7.2 Absolute values [c.math.abs]

28.7.3 Three-dimensional hypotenuse [c.math.hypot3]

28.7.4 Linear interpolation [c.math.lerp]

28.7.5 Classification / comparison functions [c.math.fpclass]

28.7.6 Mathematical special functions [sf.cmath] Associated Laguerre polynomials [sf.cmath.assoc.laguerre] Associated Legendre functions [sf.cmath.assoc.legendre] Complete elliptic integral of the first kind [sf.cmath.comp.ellint.1] Complete elliptic integral of the second kind [sf.cmath.comp.ellint.2] Complete elliptic integral of the third kind [sf.cmath.comp.ellint.3] Regular modified cylindrical Bessel functions [sf.cmath.cyl.bessel.i] Cylindrical Bessel functions of the first kind [sf.cmath.cyl.bessel.j] Irregular modified cylindrical Bessel functions [sf.cmath.cyl.bessel.k] Cylindrical Neumann functions [sf.cmath.cyl.neumann] Incomplete elliptic integral of the first kind [sf.cmath.ellint.1] Incomplete elliptic integral of the second kind [sf.cmath.ellint.2] Incomplete elliptic integral of the third kind [sf.cmath.ellint.3] Exponential integral [sf.cmath.expint] Hermite polynomials [sf.cmath.hermite] Laguerre polynomials [sf.cmath.laguerre] Legendre polynomials [sf.cmath.legendre] Riemann zeta function [sf.cmath.riemann.zeta] Spherical Bessel functions of the first kind [sf.cmath.sph.bessel] Spherical associated Legendre functions [sf.cmath.sph.legendre] Spherical Neumann functions [sf.cmath.sph.neumann]

28.8 Numbers [numbers]

28.8.1 Header <numbers> synopsis [numbers.syn]

28.8.2 Mathematical constants [math.constants]

28.9 Basic linear algebra algorithms [linalg]

28.9.2 Header <linalg> synopsis [linalg.syn]

28.9.4 Requirements [linalg.reqs] Linear algebra value types [linalg.reqs.val] Algorithm and class requirements [linalg.reqs.alg]

28.9.8 Scaled in-place transformation [linalg.scaled] Class template scaled_accessor [linalg.scaled.scaledaccessor] Function template scaled [linalg.scaled.scaled]

28.9.9 Conjugated in-place transformation [linalg.conj] Class template conjugated_accessor [linalg.conj.conjugatedaccessor] Function template conjugated [linalg.conj.conjugated]

28.9.10 Transpose in-place transformation [linalg.transp] Exposition-only helpers for layout_transpose and transposed [linalg.transp.helpers] Class template layout_transpose [linalg.transp.layout.transpose] Function template transposed [linalg.transp.transposed]

28.9.11 Conjugate transpose in-place transform [linalg.conjtransposed]

28.9.12 Algorithm requirements based on template parameter name [linalg.algs.reqs]

28.9.13 BLAS 1 algorithms [linalg.algs.blas1] Givens rotations [linalg.algs.blas1.givens] Apply a computed Givens rotation to vectors [linalg.algs.blas1.givens.rot] Swap matrix or vector elements [linalg.algs.blas1.swap] Multiply the elements of an object in place by a scalar [linalg.algs.blas1.scal] Copy elements of one matrix or vector into another [linalg.algs.blas1.copy] Add vectors or matrices elementwise [linalg.algs.blas1.add] Dot product of two vectors [] Scaled sum of squares of a vector's elements [linalg.algs.blas1.ssq] Euclidean norm of a vector [linalg.algs.blas1.nrm2] Sum of absolute values of vector elements [linalg.algs.blas1.asum] Index of maximum absolute value of vector elements [linalg.algs.blas1.iamax] Frobenius norm of a matrix [linalg.algs.blas1.matfrobnorm] Infinity norm of a matrix [linalg.algs.blas1.matinfnorm]

28.9.14 BLAS 2 algorithms [linalg.algs.blas2] General matrix-vector product [linalg.algs.blas2.gemv] Symmetric matrix-vector product [linalg.algs.blas2.symv] Hermitian matrix-vector product [linalg.algs.blas2.hemv] Triangular matrix-vector product [linalg.algs.blas2.trmv] Solve a triangular linear system [linalg.algs.blas2.trsv] Rank-1 (outer product) update of a matrix [linalg.algs.blas2.rank1] Symmetric or Hermitian Rank-1 (outer product) update of a matrix [linalg.algs.blas2.symherrank1] Symmetric and Hermitian rank-2 matrix updates [linalg.algs.blas2.rank2]

28.9.15 BLAS 3 algorithms [linalg.algs.blas3] General matrix-matrix product [linalg.algs.blas3.gemm] Symmetric, Hermitian, and triangular matrix-matrix product [linalg.algs.blas3.xxmm] In-place triangular matrix-matrix product [linalg.algs.blas3.trmm] Rank-k update of a symmetric or Hermitian matrix [linalg.algs.blas3.rankk] Rank-2k update of a symmetric or Hermitian matrix [linalg.algs.blas3.rank2k] Solve multiple triangular linear systems [linalg.algs.blas3.trsm] Solve multiple triangular linear systems in-place [linalg.algs.blas3.inplacetrsm]

29 Time library [time][time]

29.2 Header <chrono> synopsis [time.syn]

29.3 Cpp17Clock requirements [time.clock.req]

29.4 Time-related traits [time.traits]

29.4.1 treat_as_floating_point []

29.4.3 Specializations of common_type [time.traits.specializations]

29.4.4 Class template is_clock []

29.7 Clocks [time.clock]

29.7.7 Class steady_clock [time.clock.steady]

29.7.8 Class high_resolution_clock [time.clock.hires]

29.7.10 time_point conversions [time.clock.cast] Class template clock_time_conversion [time.clock.conv] Identity conversions [] Conversions between system_clock and utc_clock [time.clock.cast.sys.utc] Conversions between system_clock and other clocks [time.clock.cast.sys] Conversions between utc_clock and other clocks [time.clock.cast.utc] Function template clock_cast [time.clock.cast.fn]

29.8 The civil calendar []

29.8.2 Class last_spec []

29.8.10 Class month_day_last []

29.8.18 Conventional syntax operators []

29.10 12/24 hours functions [time.12]

29.11 Time zones []

29.11.2 Time zone database [] Time zone database access [] Remote time zone database support []

29.11.3 Exception classes [] Class nonexistent_local_time [] Class ambiguous_local_time []

29.11.6 Class template zoned_traits []

29.12 Formatting [time.format]

29.14 Hash support [time.hash]

29.15 Header <ctime> synopsis [ctime.syn]

30 Localization library [localization][localization]

30.2 Header <locale> synopsis [locale.syn]

30.3 Locales [locales]

30.3.1 Class locale [locale] Types [locale.types] Type locale​::​category [locale.category] Class locale​::​facet [locale.facet] Class locale​::​id [] Constructors and destructor [locale.cons] Static members [locale.statics]

30.3.3 Convenience interfaces [locale.convenience] Character classification [classification] Character conversions [conversions.character]

30.4 Standard locale categories [locale.categories]

30.4.4 The numeric punctuation facet [facet.numpunct] Class template numpunct_byname [locale.numpunct.byname]

30.5 C library locales [c.locales]

30.5.1 Header <clocale> synopsis [clocale.syn]

30.6 Text encodings identification [text.encoding]

30.6.1 Header <text_encoding> synopsis [text.encoding.syn]

30.6.2 Class text_encoding [text.encoding.class] Comparison functions [text.encoding.cmp] Class text_encoding​::​aliases_view [text.encoding.aliases] Enumeration text_encoding​::​id []

31 Input/output library [input.output][input.output]

31.2 Iostreams requirements [iostreams.requirements]

31.2.3 Positioning type limitations [iostreams.limits.pos]

31.3 Forward declarations [iostream.forward]

31.3.1 Header <iosfwd> synopsis [iosfwd.syn]

31.4 Standard iostream objects [iostream.objects]

31.4.1 Header <iostream> synopsis [iostream.syn]

31.4.3 Narrow stream objects []

31.4.4 Wide stream objects []

31.5 Iostreams base classes [iostreams.base]

31.5.1 Header <ios> synopsis [ios.syn]

31.5.2 Class ios_base [ios.base] Types [ios.types] Class ios_base​::​failure [ios.failure] Type ios_base​::​fmtflags [ios.fmtflags] Type ios_base​::​iostate [ios.iostate] Type ios_base​::​openmode [ios.openmode] Type ios_base​::​seekdir [ios.seekdir] Class ios_base​::​Init [ios.init] State functions [fmtflags.state] Storage functions [] Constructors and destructor [ios.base.cons]

31.5.4 Class template basic_ios [ios] Member functions [basic.ios.members] Flags functions [iostate.flags]

31.5.5 ios_base manipulators [std.ios.manip] fmtflags manipulators [fmtflags.manip] adjustfield manipulators [adjustfield.manip] basefield manipulators [basefield.manip] floatfield manipulators [floatfield.manip]

31.5.6 Error reporting [error.reporting]

31.7 Formatting and manipulators [iostream.format]

31.7.1 Header <istream> synopsis [istream.syn]

31.7.2 Header <ostream> synopsis [ostream.syn]

31.7.3 Header <iomanip> synopsis [iomanip.syn]

31.7.4 Header <print> synopsis [print.syn]

31.7.5 Input streams [input.streams] Class template basic_istream [istream] Assignment and swap [istream.assign] Class basic_istream​::​sentry [istream.sentry] Formatted input functions [istream.formatted] basic_istream​::​operator>> [istream.extractors] Unformatted input functions [istream.unformatted] Standard basic_istream manipulators [istream.manip] Rvalue stream extraction [istream.rvalue]

31.7.6 Output streams [output.streams] Class template basic_ostream [ostream] Assignment and swap [ostream.assign] Class basic_ostream​::​sentry [ostream.sentry] Formatted output functions [ostream.formatted] basic_ostream​::​operator<< [ostream.inserters] Character inserter function templates [ostream.inserters.character] Unformatted output functions [ostream.unformatted] Standard basic_ostream manipulators [ostream.manip] Rvalue stream insertion [ostream.rvalue]

31.7.7 Standard manipulators [std.manip]

31.7.8 Extended manipulators [ext.manip]

31.7.9 Quoted manipulators [quoted.manip]

31.7.10 Print functions []

31.8 String-based streams [string.streams]

31.8.1 Header <sstream> synopsis [sstream.syn]

31.8.2 Class template basic_stringbuf [stringbuf] Assignment and swap [stringbuf.assign] Member functions [stringbuf.members] Overridden virtual functions [stringbuf.virtuals]

31.9 Span-based streams [span.streams]

31.9.2 Header <spanstream> synopsis [spanstream.syn]

31.9.3 Class template basic_spanbuf [spanbuf] Assignment and swap [spanbuf.assign] Member functions [spanbuf.members] Overridden virtual functions [spanbuf.virtuals]

31.10 File-based streams [file.streams]

31.10.1 Header <fstream> synopsis [fstream.syn]

31.10.2 Native handles [file.native]

31.10.3 Class template basic_filebuf [filebuf] Assignment and swap [filebuf.assign] Member functions [filebuf.members] Overridden virtual functions [filebuf.virtuals]

31.10.6 Class template basic_fstream [fstream] Member functions [fstream.members]

31.11 Synchronized output streams [syncstream]

31.11.1 Header <syncstream> synopsis [syncstream.syn]

31.12 File systems [filesystems]

31.12.2 Conformance [fs.conformance] POSIX conformance [fs.conform.9945] Operating system dependent behavior conformance [fs.conform.os] File system race behavior [fs.race.behavior]

31.12.3 Requirements [fs.req]

31.12.4 Header <filesystem> synopsis [fs.filesystem.syn]

31.12.5 Error reporting []

31.12.8 Enumerations [fs.enum] Enum path​::​format [fs.enum.path.format] Enum class file_type [fs.enum.file.type] Enum class copy_options [fs.enum.copy.opts] Enum class perms [fs.enum.perms] Enum class perm_options [fs.enum.perm.opts] Enum class directory_options [fs.enum.dir.opts]

31.12.13 Filesystem operation functions [fs.op.funcs] Create directory symlink [fs.op.create.dir.symlk] Temporary directory path [fs.op.temp.dir.path]

31.13 C library files [c.files]

31.13.1 Header <cstdio> synopsis [cstdio.syn]

31.13.2 Header <cinttypes> synopsis [cinttypes.syn]

32 Regular expressions library [re][re]

32.2 Requirements [re.req]

32.3 Header <regex> synopsis [re.syn]

32.4 Namespace std​::​regex_constants [re.const]

32.4.2 Bitmask type syntax_option_type [re.synopt]

32.4.3 Bitmask type match_flag_type [re.matchflag]

32.4.4 Implementation-defined error_type [re.err]

32.5 Class regex_error [re.badexp]

32.6 Class template regex_traits [re.traits]

32.8 Class template sub_match [re.submatch]

32.8.3 Non-member operators [re.submatch.op]

32.10 Regular expression algorithms [re.alg]

32.10.1 Exceptions [re.except]

32.11 Regular expression iterators [re.iter]

32.12 Modified ECMAScript regular expression grammar [re.grammar]

33 Concurrency support library [thread][thread]

33.2 Requirements [thread.req]

33.2.1 Template parameter names [thread.req.paramname]

33.2.4 Timing specifications [thread.req.timing]

33.2.5 Requirements for Cpp17Lockable types [thread.req.lockable] Cpp17BasicLockable requirements [thread.req.lockable.basic] Cpp17Lockable requirements [thread.req.lockable.req] Cpp17TimedLockable requirements [thread.req.lockable.timed] Cpp17SharedLockable requirements [thread.req.lockable.shared] Cpp17SharedTimedLockable requirements [thread.req.lockable.shared.timed]

33.3 Stop tokens [thread.stoptoken]

33.3.2 Header <stop_token> synopsis [thread.stoptoken.syn]

33.3.3 Class stop_token [stoptoken] Constructors, copy, and assignment [stoptoken.cons] Non-member functions [stoptoken.nonmembers]

33.3.4 Class stop_source [stopsource] Constructors, copy, and assignment [stopsource.cons] Non-member functions [stopsource.nonmembers]

33.3.5 Class template stop_callback [stopcallback] Constructors and destructor [stopcallback.cons]

33.5 Atomic operations [atomics]

33.5.2 Header <atomic> synopsis [atomics.syn]

33.5.3 Type aliases [atomics.alias]

33.5.4 Order and consistency [atomics.order]

33.5.5 Lock-free property [atomics.lockfree]

33.5.6 Waiting and notifying [atomics.wait]

33.5.7 Class template atomic_ref [atomics.ref.generic] Specializations for integral types [] Specializations for floating-point types [atomics.ref.float] Partial specialization for pointers [atomics.ref.pointer] Member operators common to integers and pointers to objects [atomics.ref.memop]

33.5.8 Class template atomic [atomics.types.generic] Operations on atomic types [atomics.types.operations] Specializations for integers [] Specializations for floating-point types [atomics.types.float] Partial specialization for pointers [atomics.types.pointer] Member operators common to integers and pointers to objects [atomics.types.memop] Partial specializations for smart pointers [util.smartptr.atomic] Partial specialization for shared_ptr [util.smartptr.atomic.shared] Partial specialization for weak_ptr [util.smartptr.atomic.weak]

33.5.9 Non-member functions [atomics.nonmembers]

33.5.10 Flag type and operations [atomics.flag]

33.5.12 C compatibility [stdatomic.h.syn]

33.6 Mutual exclusion [thread.mutex]

33.6.2 Header <mutex> synopsis [mutex.syn]

33.6.3 Header <shared_mutex> synopsis [shared.mutex.syn]

33.6.6 Generic locking algorithms [thread.lock.algorithm]

33.7 Condition variables [thread.condition]

33.7.2 Header <condition_variable> synopsis [condition.variable.syn]

33.7.4 Class condition_variable [thread.condition.condvar]

33.8 Semaphore [thread.sema]

33.8.2 Header <semaphore> synopsis [semaphore.syn]

33.8.3 Class template counting_semaphore [thread.sema.cnt]

33.10 Futures [futures]

33.10.2 Header <future> synopsis [future.syn]

33.10.3 Error handling [futures.errors]

33.10.4 Class future_error [futures.future.error]

33.10.6 Class template promise [futures.promise]

33.10.7 Class template future [futures.unique.future]

33.10.8 Class template shared_future [futures.shared.future]

33.10.9 Function template async [futures.async]

33.11 Safe reclamation [saferecl]

33.11.3 Hazard pointers [saferecl.hp] Header <hazard_pointer> synopsis [hazard.pointer.syn] Class template hazard_pointer_obj_base [saferecl.hp.base]

Annex A (informative) Grammar summary [gram][gram]

A.2 Keywords [gram.key]

A.3 Lexical conventions [gram.lex]

A.5 Expressions [gram.expr]

A.6 Statements [gram.stmt]

A.7 Declarations [gram.dcl]

A.10 Overloading [gram.over]

A.11 Templates [gram.temp]

A.12 Exception handling [gram.except]

A.13 Preprocessing directives [gram.cpp]

Annex B (informative) Implementation quantities [implimits][implimits]

Annex C (informative) Compatibility [diff][diff]

C.7 C++ and C [diff.iso]

C.7.2 [lex]: lexical conventions [diff.lex]

C.7.4 [expr]: expressions [diff.expr]

C.7.6 [dcl.dcl]: declarations [diff.dcl]

C.7.8 [cpp]: preprocessing directives [diff.cpp]

C.8 C standard library [diff.library]

C.8.2 Modifications to headers []

C.8.3 Modifications to definitions []

C.8.3.1 Types char16_t and char32_t [diff.char16]

C.8.3.2 Type wchar_t [diff.wchar.t]

C.8.3.5 Header <stdalign.h> [diff.header.stdalign.h]

C.8.3.6 Header <stdbool.h> [diff.header.stdbool.h]

C.8.3.7 Macro NULL [diff.null]

C.8.4 Modifications to declarations []

C.8.5 Modifications to behavior []

C.8.5.2 Macro offsetof(type, member-designator) [diff.offsetof]

C.8.5.3 Memory allocation functions [diff.malloc]

Annex D (normative) Compatibility features [depr][depr]

D.2 Implicit capture of *this by reference [depr.capture.this]

D.3 Array comparisons [depr.array.comp]

D.4 Deprecated volatile types [depr.volatile.type]

D.5 Redeclaration of static constexpr data members [depr.static.constexpr]

D.6 Non-local use of TU-local entities [depr.local]

D.7 Implicit declaration of copy functions [depr.impldec]

D.8 Literal operator function declarations using an identifier [depr.lit]

D.9 template keyword before qualified names [depr.template.template]

D.10 has_denorm members in numeric_limits [depr.numeric.limits.has.denorm]

D.11 Deprecated C macros [depr.c.macros]

D.12 Relational operators [depr.relops]

D.13 Deprecated error numbers [depr.cerrno]

D.14 Deprecated type traits [depr.meta.types]

D.17 Deprecated iterator class template [depr.iterator]

D.18 Deprecated move_iterator access [depr.move.iter.elem]

D.19 Deprecated formatting [depr.format]

D.19.1 Header <format> synopsis [depr.format.syn]

D.19.2 Formatting arguments [depr.format.arg]

D.20 Deprecated locale category facets [depr.locale.category]

D.21 Deprecated filesystem path factory functions [depr.fs.path.factory]

D.22 Deprecated atomic operations [depr.atomics]

D.22.3 Non-member functions [depr.atomics.nonmembers]

D.22.4 Operations on atomic types [depr.atomics.types.operations]

Annex E (informative) Conformance with UAX #31 [uaxid][uaxid]

E.2 R1 Default identifiers [uaxid.def]

E.2.2 R1a Restricted format characters [uaxid.def.rfmt]

E.2.3 R1b Stable identifiers [uaxid.def.stable]

E.3 R2 Immutable identifiers [uaxid.immutable]

E.4 R3 Pattern_White_Space and Pattern_Syntax characters [uaxid.pattern]

E.5 R4 Equivalent normalized identifiers [uaxid.eqn]

E.6 R5 Equivalent case-insensitive identifiers [uaxid.eqci]

E.7 R6 Filtered normalized identifiers [uaxid.filter]

E.8 R7 Filtered case-insensitive identifiers [uaxid.filterci]

E.9 R8 Hashtag identifiers [uaxid.hashtag]



Index of grammar productions

Index of library headers

Index of library names

Index of library concepts

Index of implementation-defined behavior