From Jason Turner

[lib.types.movedfrom]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp21o_3hfh/{from.md → to.md} +66 -72
tmp/tmp21o_3hfh/{from.md → to.md} RENAMED
@@ -3,25 +3,29 @@
3
  Objects of types defined in the C++ standard library may be moved from
4
  [[class.copy.ctor]]. Move operations may be explicitly specified or
5
  implicitly generated. Unless otherwise specified, such moved-from
6
  objects shall be placed in a valid but unspecified state.
7
 
 
 
 
 
 
8
  <!-- Link reference definitions -->
9
  [alg.c.library]: algorithms.md#alg.c.library
10
  [alg.sorting]: algorithms.md#alg.sorting
11
  [algorithm.stable]: #algorithm.stable
12
  [algorithms]: algorithms.md#algorithms
13
  [algorithms.requirements]: algorithms.md#algorithms.requirements
14
  [alloc.errors]: support.md#alloc.errors
15
- [allocator.req.var]: #allocator.req.var
16
  [allocator.requirements]: #allocator.requirements
17
  [allocator.requirements.completeness]: #allocator.requirements.completeness
18
- [allocator.traits]: utilities.md#allocator.traits
 
19
  [alt.headers]: #alt.headers
20
- [atomics]: atomics.md#atomics
21
- [atomics.alias]: atomics.md#atomics.alias
22
- [atomics.lockfree]: atomics.md#atomics.lockfree
23
  [bad.alloc]: support.md#bad.alloc
24
  [basic.def.odr]: basic.md#basic.def.odr
25
  [basic.fundamental]: basic.md#basic.fundamental
26
  [basic.life]: basic.md#basic.life
27
  [basic.link]: basic.md#basic.link
@@ -29,24 +33,24 @@ objects shall be placed in a valid but unspecified state.
29
  [basic.lookup.qual]: basic.md#basic.lookup.qual
30
  [basic.lookup.unqual]: basic.md#basic.lookup.unqual
31
  [basic.scope.namespace]: basic.md#basic.scope.namespace
32
  [basic.start]: basic.md#basic.start
33
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
34
- [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
35
- [basic.types]: basic.md#basic.types
36
- [bit]: numerics.md#bit
37
  [bitmask.types]: #bitmask.types
38
  [byte.strings]: #byte.strings
39
  [c.annex.k.names]: #c.annex.k.names
 
 
40
  [character.seq]: #character.seq
 
41
  [class.copy.assign]: class.md#class.copy.assign
42
  [class.copy.ctor]: class.md#class.copy.ctor
43
  [class.dtor]: class.md#class.dtor
44
  [class.mem]: class.md#class.mem
45
- [class.mfct]: class.md#class.mfct
46
- [class.this]: class.md#class.this
47
  [class.virtual]: class.md#class.virtual
 
48
  [cmp]: support.md#cmp
49
  [compliance]: #compliance
50
  [concept.destructible]: concepts.md#concept.destructible
51
  [concept.invocable]: concepts.md#concept.invocable
52
  [concept.totallyordered]: concepts.md#concept.totallyordered
@@ -62,52 +66,48 @@ objects shall be placed in a valid but unspecified state.
62
  [containers]: containers.md#containers
63
  [contents]: #contents
64
  [conv]: expr.md#conv
65
  [conv.func]: expr.md#conv.func
66
  [conventions]: #conventions
 
67
  [cpp.include]: cpp.md#cpp.include
68
  [cpp.replace]: cpp.md#cpp.replace
69
- [cpp17.allocator]: #cpp17.allocator
70
  [cpp17.copyassignable]: #cpp17.copyassignable
71
  [cpp17.copyconstructible]: #cpp17.copyconstructible
72
  [cpp17.destructible]: #cpp17.destructible
73
  [cpp17.hash]: #cpp17.hash
74
  [cpp17.moveassignable]: #cpp17.moveassignable
75
  [cpp17.nullablepointer]: #cpp17.nullablepointer
76
- [cstdint]: support.md#cstdint
 
 
77
  [customization.point.object]: #customization.point.object
78
  [dcl.array]: dcl.md#dcl.array
79
  [dcl.attr]: dcl.md#dcl.attr
80
  [dcl.constexpr]: dcl.md#dcl.constexpr
81
  [dcl.fct.default]: dcl.md#dcl.fct.default
82
  [dcl.init]: dcl.md#dcl.init
83
- [dcl.init.list]: dcl.md#dcl.init.list
84
  [dcl.inline]: dcl.md#dcl.inline
85
  [dcl.link]: dcl.md#dcl.link
86
  [dcl.pre]: dcl.md#dcl.pre
87
- [definitions]: #definitions
 
88
  [depr]: future.md#depr
89
- [depr.c.headers]: future.md#depr.c.headers
90
  [derivation]: #derivation
91
  [derived.classes]: #derived.classes
92
  [description]: #description
 
93
  [diagnostics]: diagnostics.md#diagnostics
94
  [enumerated.types]: #enumerated.types
95
  [except]: except.md#except
96
- [except.spec]: except.md#except.spec
97
- [expos.only.func]: #expos.only.func
98
- [expos.only.types]: #expos.only.types
99
- [expr.cond]: expr.md#expr.cond
100
- [expr.const]: expr.md#expr.const
101
  [expr.delete]: expr.md#expr.delete
102
- [expr.eq]: expr.md#expr.eq
103
  [expr.new]: expr.md#expr.new
104
- [expr.rel]: expr.md#expr.rel
105
- [expr.spaceship]: expr.md#expr.spaceship
106
  [expr.unary.op]: expr.md#expr.unary.op
107
  [extern.names]: #extern.names
108
  [extern.types]: #extern.types
 
109
  [function.objects]: utilities.md#function.objects
110
  [functions.within.classes]: #functions.within.classes
111
  [global.functions]: #global.functions
112
  [handler.functions]: #handler.functions
113
  [hash.requirements]: #hash.requirements
@@ -116,16 +116,15 @@ objects shall be placed in a valid but unspecified state.
116
  [headers.cpp.c]: #headers.cpp.c
117
  [headers.cpp.fs]: #headers.cpp.fs
118
  [hidden.friends]: #hidden.friends
119
  [input.output]: input.md#input.output
120
  [intro.compliance]: intro.md#intro.compliance
121
- [intro.defs]: intro.md#intro.defs
122
- [intro.execution]: basic.md#intro.execution
123
  [intro.multithread]: basic.md#intro.multithread
124
  [intro.refs]: intro.md#intro.refs
125
  [iterator.requirements]: iterators.md#iterator.requirements
126
  [iterators]: iterators.md#iterators
 
127
  [lex.name]: lex.md#lex.name
128
  [lex.name.special]: #lex.name.special
129
  [lex.phases]: lex.md#lex.phases
130
  [lex.separate]: lex.md#lex.separate
131
  [lib.types.movedfrom]: #lib.types.movedfrom
@@ -134,12 +133,14 @@ objects shall be placed in a valid but unspecified state.
134
  [library.categories]: #library.categories
135
  [library.general]: #library.general
136
  [locales]: localization.md#locales
137
  [localization]: localization.md#localization
138
  [macro.names]: #macro.names
 
139
  [member.functions]: #member.functions
140
- [meta]: utilities.md#meta
 
141
  [module.import]: module.md#module.import
142
  [multibyte.strings]: #multibyte.strings
143
  [namespace.constraints]: #namespace.constraints
144
  [namespace.def]: dcl.md#namespace.def
145
  [namespace.future]: #namespace.future
@@ -152,44 +153,49 @@ objects shall be placed in a valid but unspecified state.
152
  [nullablepointer.requirements]: #nullablepointer.requirements
153
  [numeric.requirements]: numerics.md#numeric.requirements
154
  [numerics]: numerics.md#numerics
155
  [objects.within.classes]: #objects.within.classes
156
  [organization]: #organization
 
157
  [ostream.iterator.ops]: iterators.md#ostream.iterator.ops
158
  [over.literal]: over.md#over.literal
159
  [over.match]: over.md#over.match
160
- [over.oper]: over.md#over.oper
161
  [protection.within.classes]: #protection.within.classes
162
  [random.access.iterators]: iterators.md#random.access.iterators
163
  [ranges]: ranges.md#ranges
 
164
  [re]: re.md#re
165
  [reentrancy]: #reentrancy
166
  [replacement.functions]: #replacement.functions
167
  [requirements]: #requirements
 
168
  [res.on.arguments]: #res.on.arguments
169
  [res.on.data.races]: #res.on.data.races
170
  [res.on.exception.handling]: #res.on.exception.handling
171
- [res.on.expects]: #res.on.expects
172
  [res.on.functions]: #res.on.functions
173
  [res.on.headers]: #res.on.headers
174
  [res.on.macro.definitions]: #res.on.macro.definitions
175
  [res.on.objects]: #res.on.objects
176
- [res.on.pointer.storage]: #res.on.pointer.storage
177
  [res.on.requirements]: #res.on.requirements
178
  [reserved.names]: #reserved.names
179
- [specialized.addressof]: utilities.md#specialized.addressof
 
180
  [std.exceptions]: diagnostics.md#std.exceptions
 
181
  [stmt.return]: stmt.md#stmt.return
182
  [stream.types]: input.md#stream.types
183
  [strings]: strings.md#strings
184
  [structure]: #structure
185
  [structure.elements]: #structure.elements
186
  [structure.requirements]: #structure.requirements
187
  [structure.see.also]: #structure.see.also
188
  [structure.specifications]: #structure.specifications
189
  [structure.summary]: #structure.summary
190
  [support]: support.md#support
 
 
191
  [support.coroutine]: support.md#support.coroutine
192
  [support.dynamic]: support.md#support.dynamic
193
  [support.exception]: support.md#support.exception
194
  [support.initlist]: support.md#support.initlist
195
  [support.limits]: support.md#support.limits
@@ -199,90 +205,93 @@ objects shall be placed in a valid but unspecified state.
199
  [support.start.term]: support.md#support.start.term
200
  [support.types]: support.md#support.types
201
  [swappable.requirements]: #swappable.requirements
202
  [syserr]: diagnostics.md#syserr
203
  [syserr.errcode.overview]: diagnostics.md#syserr.errcode.overview
204
- [tab:allocator.req.var]: #tab:allocator.req.var
205
- [tab:cpp17.allocator]: #tab:cpp17.allocator
206
  [tab:cpp17.destructible]: #tab:cpp17.destructible
207
  [tab:cpp17.equalitycomparable]: #tab:cpp17.equalitycomparable
208
  [temp]: temp.md#temp
209
  [temp.concept]: temp.md#temp.concept
210
  [temp.constr.decl]: temp.md#temp.constr.decl
211
- [temp.constr.order]: temp.md#temp.constr.order
212
  [temp.deduct.call]: temp.md#temp.deduct.call
213
- [temp.func.order]: temp.md#temp.func.order
214
  [template.bitset]: utilities.md#template.bitset
 
 
215
  [terminate.handler]: support.md#terminate.handler
216
  [thread]: thread.md#thread
217
  [time]: time.md#time
 
218
  [type.descriptions]: #type.descriptions
219
  [type.descriptions.general]: #type.descriptions.general
 
220
  [using]: #using
221
  [using.headers]: #using.headers
222
  [using.linkage]: #using.linkage
223
  [using.overview]: #using.overview
224
  [usrlit.suffix]: #usrlit.suffix
225
  [utilities]: utilities.md#utilities
 
226
  [utility.arg.requirements]: #utility.arg.requirements
227
  [utility.requirements]: #utility.requirements
 
228
  [value.error.codes]: #value.error.codes
229
  [zombie.names]: #zombie.names
230
 
231
- [^1]: To save space, items that do not apply to a Clause are omitted.
 
 
232
  For example, if a Clause does not specify any requirements, there
233
  will be no “Requirements” subclause.
234
 
235
- [^2]: Although in some cases the code given is unambiguously the optimum
236
  implementation.
237
 
238
- [^3]: To save space, items that do not apply to a class are omitted. For
239
- example, if a class does not specify any comparison functions, there
240
- will be no “Comparison functions” subclause.
 
241
 
242
- [^4]: To save space, elements that do not apply to a function are
243
  omitted. For example, if a function specifies no preconditions,
244
  there will be no *Preconditions:* element.
245
 
246
- [^5]: This simplifies the presentation of complexity requirements in
247
  some cases.
248
 
249
- [^6]: Examples from  [[utility.requirements]] include:
250
  *Cpp17EqualityComparable*, *Cpp17LessThanComparable*,
251
  *Cpp17CopyConstructible*. Examples from  [[iterator.requirements]]
252
  include: *Cpp17InputIterator*, *Cpp17ForwardIterator*.
253
 
254
- [^7]: Such as an integer type, with constant integer values
255
  [[basic.fundamental]].
256
 
257
- [^8]: declared in `<clocale>`.
258
-
259
  [^9]: Many of the objects manipulated by function signatures declared in
260
  `<cstring>` are character sequences or NTBSs. The size of some of
261
  these character sequences is limited by a length value, maintained
262
  separately from the character sequence.
263
 
264
  [^10]: A *string-literal*, such as `"abc"`, is a static NTBS.
265
 
266
- [^11]: An NTBS that contains characters only from the basic execution
267
  character set is also an NTMBS. Each multibyte character then
268
  consists of a single byte.
269
 
270
- [^12]: The C standard library headers [[depr.c.headers]] also define
271
  names within the global namespace, while the C++ headers for C
272
- library facilities [[headers]] may also define names within the
273
  global namespace.
274
 
275
  [^13]: This gives implementers freedom to use inline namespaces to
276
  support multiple configurations of the library.
277
 
278
  [^14]: A header is not necessarily a source file, nor are the sequences
279
  delimited by `<` and `>` in header names necessarily valid source
280
  file names [[cpp.include]].
281
 
282
  [^15]: It is intentional that there is no C++ header for any of these C
283
- headers: `<stdatomic.h>`, `<stdnoreturn.h>`, `<threads.h>`.
284
 
285
  [^16]: This disallows the practice, allowed in C, of providing a masking
286
  macro in addition to the function prototype. The only way to achieve
287
  equivalent inline behavior in C++ is to provide a definition as an
288
  extern inline function.
@@ -304,48 +313,33 @@ objects shall be placed in a valid but unspecified state.
304
 
305
  [^21]: Any library code that instantiates other library templates must
306
  be prepared to work adequately with any user-supplied specialization
307
  that meets the minimum requirements of this document.
308
 
309
- [^22]: Any library customization point must be prepared to work
310
- adequately with any user-defined overload that meets the minimum
311
- requirements of this document. Therefore an implementation may
312
- elect, under the as-if rule [[intro.execution]], to provide any
313
- customization point in the form of an instantiated function object
314
- [[function.objects]] even though the customization point’s
315
- specification is in the form of a function template. The template
316
- parameters of each such function object and the function parameters
317
- and return type of the object’s `operator()` must match those of the
318
- corresponding customization point’s specification.
319
-
320
- [^23]: The list of such reserved names includes `errno`, declared or
321
  defined in `<cerrno>`.
322
 
323
- [^24]: The list of such reserved function signatures with external
324
  linkage includes `setjmp(jmp_buf)`, declared or defined in
325
  `<csetjmp>`, and `va_end(va_list)`, declared or defined in
326
  `<cstdarg>`.
327
 
328
- [^25]: The function signatures declared in `<cuchar>`, `<cwchar>`, and
329
  `<cwctype>` are always reserved, notwithstanding the restrictions
330
  imposed in subclause 4.5.1 of Amendment 1 to the C Standard for
331
  these headers.
332
 
333
- [^26]: A valid C++ program always calls the expected library non-member
334
- function. An implementation may also define additional non-member
335
  functions that would otherwise not be called by a valid C++ program.
336
 
337
- [^27]: There is an implicit exception to this rule for types that are
338
- described as synonyms for basic integral types, such as `size_t`
339
- [[support.types]] and `streamoff` [[stream.types]].
340
-
341
- [^28]: That is, the C library functions can all be treated as if they
342
  are marked `noexcept`. This allows implementations to make
343
  performance optimizations based on the absence of exceptions at
344
  runtime.
345
 
346
- [^29]: The functions `qsort()` and `bsearch()` [[alg.c.library]] meet
347
  this condition.
348
 
349
- [^30]: In particular, they can report a failure to allocate storage by
350
  throwing an exception of type `bad_alloc`, or a class derived from
351
  `bad_alloc` [[bad.alloc]].
 
3
  Objects of types defined in the C++ standard library may be moved from
4
  [[class.copy.ctor]]. Move operations may be explicitly specified or
5
  implicitly generated. Unless otherwise specified, such moved-from
6
  objects shall be placed in a valid but unspecified state.
7
 
8
+ An object of a type defined in the C++ standard library may be
9
+ move-assigned [[class.copy.assign]] to itself. Unless otherwise
10
+ specified, such an assignment places the object in a valid but
11
+ unspecified state.
12
+
13
  <!-- Link reference definitions -->
14
  [alg.c.library]: algorithms.md#alg.c.library
15
  [alg.sorting]: algorithms.md#alg.sorting
16
  [algorithm.stable]: #algorithm.stable
17
  [algorithms]: algorithms.md#algorithms
18
  [algorithms.requirements]: algorithms.md#algorithms.requirements
19
  [alloc.errors]: support.md#alloc.errors
 
20
  [allocator.requirements]: #allocator.requirements
21
  [allocator.requirements.completeness]: #allocator.requirements.completeness
22
+ [allocator.requirements.general]: #allocator.requirements.general
23
+ [allocator.traits]: mem.md#allocator.traits
24
  [alt.headers]: #alt.headers
25
+ [array.creation]: containers.md#array.creation
26
+ [atomics]: thread.md#atomics
 
27
  [bad.alloc]: support.md#bad.alloc
28
  [basic.def.odr]: basic.md#basic.def.odr
29
  [basic.fundamental]: basic.md#basic.fundamental
30
  [basic.life]: basic.md#basic.life
31
  [basic.link]: basic.md#basic.link
 
33
  [basic.lookup.qual]: basic.md#basic.lookup.qual
34
  [basic.lookup.unqual]: basic.md#basic.lookup.unqual
35
  [basic.scope.namespace]: basic.md#basic.scope.namespace
36
  [basic.start]: basic.md#basic.start
37
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
38
+ [bit]: utilities.md#bit
 
 
39
  [bitmask.types]: #bitmask.types
40
  [byte.strings]: #byte.strings
41
  [c.annex.k.names]: #c.annex.k.names
42
+ [cassert.syn]: diagnostics.md#cassert.syn
43
+ [cerrno.syn]: diagnostics.md#cerrno.syn
44
  [character.seq]: #character.seq
45
+ [character.seq.general]: #character.seq.general
46
  [class.copy.assign]: class.md#class.copy.assign
47
  [class.copy.ctor]: class.md#class.copy.ctor
48
  [class.dtor]: class.md#class.dtor
49
  [class.mem]: class.md#class.mem
 
 
50
  [class.virtual]: class.md#class.virtual
51
+ [clocale.syn]: localization.md#clocale.syn
52
  [cmp]: support.md#cmp
53
  [compliance]: #compliance
54
  [concept.destructible]: concepts.md#concept.destructible
55
  [concept.invocable]: concepts.md#concept.invocable
56
  [concept.totallyordered]: concepts.md#concept.totallyordered
 
66
  [containers]: containers.md#containers
67
  [contents]: #contents
68
  [conv]: expr.md#conv
69
  [conv.func]: expr.md#conv.func
70
  [conventions]: #conventions
71
+ [conventions.general]: #conventions.general
72
  [cpp.include]: cpp.md#cpp.include
73
  [cpp.replace]: cpp.md#cpp.replace
 
74
  [cpp17.copyassignable]: #cpp17.copyassignable
75
  [cpp17.copyconstructible]: #cpp17.copyconstructible
76
  [cpp17.destructible]: #cpp17.destructible
77
  [cpp17.hash]: #cpp17.hash
78
  [cpp17.moveassignable]: #cpp17.moveassignable
79
  [cpp17.nullablepointer]: #cpp17.nullablepointer
80
+ [cstdarg.syn]: support.md#cstdarg.syn
81
+ [cstddef.syn]: support.md#cstddef.syn
82
+ [cstdint.syn]: support.md#cstdint.syn
83
  [customization.point.object]: #customization.point.object
84
  [dcl.array]: dcl.md#dcl.array
85
  [dcl.attr]: dcl.md#dcl.attr
86
  [dcl.constexpr]: dcl.md#dcl.constexpr
87
  [dcl.fct.default]: dcl.md#dcl.fct.default
88
  [dcl.init]: dcl.md#dcl.init
 
89
  [dcl.inline]: dcl.md#dcl.inline
90
  [dcl.link]: dcl.md#dcl.link
91
  [dcl.pre]: dcl.md#dcl.pre
92
+ [dcl.typedef]: dcl.md#dcl.typedef
93
+ [defns.nonconst.libcall]: intro.md#defns.nonconst.libcall
94
  [depr]: future.md#depr
 
95
  [derivation]: #derivation
96
  [derived.classes]: #derived.classes
97
  [description]: #description
98
+ [description.general]: #description.general
99
  [diagnostics]: diagnostics.md#diagnostics
100
  [enumerated.types]: #enumerated.types
101
  [except]: except.md#except
102
+ [expos.only.entity]: #expos.only.entity
 
 
 
 
103
  [expr.delete]: expr.md#expr.delete
 
104
  [expr.new]: expr.md#expr.new
 
 
105
  [expr.unary.op]: expr.md#expr.unary.op
106
  [extern.names]: #extern.names
107
  [extern.types]: #extern.types
108
+ [freestanding.item]: #freestanding.item
109
  [function.objects]: utilities.md#function.objects
110
  [functions.within.classes]: #functions.within.classes
111
  [global.functions]: #global.functions
112
  [handler.functions]: #handler.functions
113
  [hash.requirements]: #hash.requirements
 
116
  [headers.cpp.c]: #headers.cpp.c
117
  [headers.cpp.fs]: #headers.cpp.fs
118
  [hidden.friends]: #hidden.friends
119
  [input.output]: input.md#input.output
120
  [intro.compliance]: intro.md#intro.compliance
 
 
121
  [intro.multithread]: basic.md#intro.multithread
122
  [intro.refs]: intro.md#intro.refs
123
  [iterator.requirements]: iterators.md#iterator.requirements
124
  [iterators]: iterators.md#iterators
125
+ [lex.charset]: lex.md#lex.charset
126
  [lex.name]: lex.md#lex.name
127
  [lex.name.special]: #lex.name.special
128
  [lex.phases]: lex.md#lex.phases
129
  [lex.separate]: lex.md#lex.separate
130
  [lib.types.movedfrom]: #lib.types.movedfrom
 
133
  [library.categories]: #library.categories
134
  [library.general]: #library.general
135
  [locales]: localization.md#locales
136
  [localization]: localization.md#localization
137
  [macro.names]: #macro.names
138
+ [mem]: mem.md#mem
139
  [member.functions]: #member.functions
140
+ [memory]: mem.md#memory
141
+ [meta]: meta.md#meta
142
  [module.import]: module.md#module.import
143
  [multibyte.strings]: #multibyte.strings
144
  [namespace.constraints]: #namespace.constraints
145
  [namespace.def]: dcl.md#namespace.def
146
  [namespace.future]: #namespace.future
 
153
  [nullablepointer.requirements]: #nullablepointer.requirements
154
  [numeric.requirements]: numerics.md#numeric.requirements
155
  [numerics]: numerics.md#numerics
156
  [objects.within.classes]: #objects.within.classes
157
  [organization]: #organization
158
+ [organization.general]: #organization.general
159
  [ostream.iterator.ops]: iterators.md#ostream.iterator.ops
160
  [over.literal]: over.md#over.literal
161
  [over.match]: over.md#over.match
162
+ [over.match.oper]: over.md#over.match.oper
163
  [protection.within.classes]: #protection.within.classes
164
  [random.access.iterators]: iterators.md#random.access.iterators
165
  [ranges]: ranges.md#ranges
166
+ [ratio]: meta.md#ratio
167
  [re]: re.md#re
168
  [reentrancy]: #reentrancy
169
  [replacement.functions]: #replacement.functions
170
  [requirements]: #requirements
171
+ [requirements.general]: #requirements.general
172
  [res.on.arguments]: #res.on.arguments
173
  [res.on.data.races]: #res.on.data.races
174
  [res.on.exception.handling]: #res.on.exception.handling
 
175
  [res.on.functions]: #res.on.functions
176
  [res.on.headers]: #res.on.headers
177
  [res.on.macro.definitions]: #res.on.macro.definitions
178
  [res.on.objects]: #res.on.objects
 
179
  [res.on.requirements]: #res.on.requirements
180
  [reserved.names]: #reserved.names
181
+ [reserved.names.general]: #reserved.names.general
182
+ [specialized.addressof]: mem.md#specialized.addressof
183
  [std.exceptions]: diagnostics.md#std.exceptions
184
+ [std.modules]: #std.modules
185
  [stmt.return]: stmt.md#stmt.return
186
  [stream.types]: input.md#stream.types
187
  [strings]: strings.md#strings
188
  [structure]: #structure
189
  [structure.elements]: #structure.elements
190
  [structure.requirements]: #structure.requirements
191
  [structure.see.also]: #structure.see.also
192
  [structure.specifications]: #structure.specifications
193
  [structure.summary]: #structure.summary
194
  [support]: support.md#support
195
+ [support.c.headers]: support.md#support.c.headers
196
+ [support.c.headers.other]: support.md#support.c.headers.other
197
  [support.coroutine]: support.md#support.coroutine
198
  [support.dynamic]: support.md#support.dynamic
199
  [support.exception]: support.md#support.exception
200
  [support.initlist]: support.md#support.initlist
201
  [support.limits]: support.md#support.limits
 
205
  [support.start.term]: support.md#support.start.term
206
  [support.types]: support.md#support.types
207
  [swappable.requirements]: #swappable.requirements
208
  [syserr]: diagnostics.md#syserr
209
  [syserr.errcode.overview]: diagnostics.md#syserr.errcode.overview
 
 
210
  [tab:cpp17.destructible]: #tab:cpp17.destructible
211
  [tab:cpp17.equalitycomparable]: #tab:cpp17.equalitycomparable
212
  [temp]: temp.md#temp
213
  [temp.concept]: temp.md#temp.concept
214
  [temp.constr.decl]: temp.md#temp.constr.decl
 
215
  [temp.deduct.call]: temp.md#temp.deduct.call
 
216
  [template.bitset]: utilities.md#template.bitset
217
+ [term.incomplete.type]: basic.md#term.incomplete.type
218
+ [term.object.type]: basic.md#term.object.type
219
  [terminate.handler]: support.md#terminate.handler
220
  [thread]: thread.md#thread
221
  [time]: time.md#time
222
+ [tuple]: utilities.md#tuple
223
  [type.descriptions]: #type.descriptions
224
  [type.descriptions.general]: #type.descriptions.general
225
+ [type.traits]: meta.md#type.traits
226
  [using]: #using
227
  [using.headers]: #using.headers
228
  [using.linkage]: #using.linkage
229
  [using.overview]: #using.overview
230
  [usrlit.suffix]: #usrlit.suffix
231
  [utilities]: utilities.md#utilities
232
+ [utility]: utilities.md#utility
233
  [utility.arg.requirements]: #utility.arg.requirements
234
  [utility.requirements]: #utility.requirements
235
+ [utility.requirements.general]: #utility.requirements.general
236
  [value.error.codes]: #value.error.codes
237
  [zombie.names]: #zombie.names
238
 
239
+ [^1]: See also ISO/IEC 9899:2018 section 7.6.
240
+
241
+ [^2]: To save space, items that do not apply to a Clause are omitted.
242
  For example, if a Clause does not specify any requirements, there
243
  will be no “Requirements” subclause.
244
 
245
+ [^3]: Although in some cases the code given is unambiguously the optimum
246
  implementation.
247
 
248
+ [^4]: To save space, items that do not apply to a class are omitted. For
249
+ example, if a class does not specify any comparison operator
250
+ functions, there will be no “Comparison operator functions”
251
+ subclause.
252
 
253
+ [^5]: To save space, elements that do not apply to a function are
254
  omitted. For example, if a function specifies no preconditions,
255
  there will be no *Preconditions:* element.
256
 
257
+ [^6]: This simplifies the presentation of complexity requirements in
258
  some cases.
259
 
260
+ [^7]: Examples from  [[utility.requirements]] include:
261
  *Cpp17EqualityComparable*, *Cpp17LessThanComparable*,
262
  *Cpp17CopyConstructible*. Examples from  [[iterator.requirements]]
263
  include: *Cpp17InputIterator*, *Cpp17ForwardIterator*.
264
 
265
+ [^8]: Such as an integer type, with constant integer values
266
  [[basic.fundamental]].
267
 
 
 
268
  [^9]: Many of the objects manipulated by function signatures declared in
269
  `<cstring>` are character sequences or NTBSs. The size of some of
270
  these character sequences is limited by a length value, maintained
271
  separately from the character sequence.
272
 
273
  [^10]: A *string-literal*, such as `"abc"`, is a static NTBS.
274
 
275
+ [^11]: An NTBS that contains characters only from the basic literal
276
  character set is also an NTMBS. Each multibyte character then
277
  consists of a single byte.
278
 
279
+ [^12]: The C standard library headers [[support.c.headers]] also define
280
  names within the global namespace, while the C++ headers for C
281
+ library facilities [[headers]] can also define names within the
282
  global namespace.
283
 
284
  [^13]: This gives implementers freedom to use inline namespaces to
285
  support multiple configurations of the library.
286
 
287
  [^14]: A header is not necessarily a source file, nor are the sequences
288
  delimited by `<` and `>` in header names necessarily valid source
289
  file names [[cpp.include]].
290
 
291
  [^15]: It is intentional that there is no C++ header for any of these C
292
+ headers: `<stdnoreturn.h>`, `<threads.h>`.
293
 
294
  [^16]: This disallows the practice, allowed in C, of providing a masking
295
  macro in addition to the function prototype. The only way to achieve
296
  equivalent inline behavior in C++ is to provide a definition as an
297
  extern inline function.
 
313
 
314
  [^21]: Any library code that instantiates other library templates must
315
  be prepared to work adequately with any user-supplied specialization
316
  that meets the minimum requirements of this document.
317
 
318
+ [^22]: The list of such reserved names includes `errno`, declared or
 
 
 
 
 
 
 
 
 
 
 
319
  defined in `<cerrno>`.
320
 
321
+ [^23]: The list of such reserved function signatures with external
322
  linkage includes `setjmp(jmp_buf)`, declared or defined in
323
  `<csetjmp>`, and `va_end(va_list)`, declared or defined in
324
  `<cstdarg>`.
325
 
326
+ [^24]: The function signatures declared in `<cuchar>`, `<cwchar>`, and
327
  `<cwctype>` are always reserved, notwithstanding the restrictions
328
  imposed in subclause 4.5.1 of Amendment 1 to the C Standard for
329
  these headers.
330
 
331
+ [^25]: A valid C++ program always calls the expected library non-member
332
+ function. An implementation can also define additional non-member
333
  functions that would otherwise not be called by a valid C++ program.
334
 
335
+ [^26]: That is, the C library functions can all be treated as if they
 
 
 
 
336
  are marked `noexcept`. This allows implementations to make
337
  performance optimizations based on the absence of exceptions at
338
  runtime.
339
 
340
+ [^27]: The functions `qsort()` and `bsearch()` [[alg.c.library]] meet
341
  this condition.
342
 
343
+ [^28]: In particular, they can report a failure to allocate storage by
344
  throwing an exception of type `bad_alloc`, or a class derived from
345
  `bad_alloc` [[bad.alloc]].