From Jason Turner

[lib.types.movedfrom]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpqb2j8yl8/{from.md → to.md} +117 -76
tmp/tmpqb2j8yl8/{from.md → to.md} RENAMED
@@ -1,124 +1,156 @@
1
  #### Moved-from state of library types <a id="lib.types.movedfrom">[[lib.types.movedfrom]]</a>
2
 
3
- Objects of types defined in the C++standard library may be moved from (
4
- [[class.copy]]). 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]: language.md#alloc.errors
 
15
  [allocator.requirements]: #allocator.requirements
16
  [allocator.requirements.completeness]: #allocator.requirements.completeness
17
  [allocator.traits]: utilities.md#allocator.traits
18
  [alt.headers]: #alt.headers
19
  [atomics]: atomics.md#atomics
20
- [bad.alloc]: language.md#bad.alloc
 
 
21
  [basic.def.odr]: basic.md#basic.def.odr
22
  [basic.fundamental]: basic.md#basic.fundamental
23
  [basic.life]: basic.md#basic.life
24
  [basic.link]: basic.md#basic.link
25
  [basic.lookup.argdep]: basic.md#basic.lookup.argdep
 
 
26
  [basic.scope.namespace]: basic.md#basic.scope.namespace
27
  [basic.start]: basic.md#basic.start
28
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
29
  [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
30
  [basic.types]: basic.md#basic.types
 
31
  [bitmask.types]: #bitmask.types
32
  [byte.strings]: #byte.strings
33
- [c.locales]: localization.md#c.locales
34
- [c.strings]: strings.md#c.strings
35
  [character.seq]: #character.seq
36
- [class.conv.ctor]: special.md#class.conv.ctor
37
- [class.copy]: special.md#class.copy
38
- [class.ctor]: special.md#class.ctor
39
- [class.dtor]: special.md#class.dtor
40
  [class.mem]: class.md#class.mem
41
  [class.mfct]: class.md#class.mfct
42
  [class.this]: class.md#class.this
43
  [class.virtual]: class.md#class.virtual
 
44
  [compliance]: #compliance
 
 
 
 
 
 
45
  [conforming]: #conforming
46
  [conforming.overview]: #conforming.overview
47
  [constexpr.functions]: #constexpr.functions
48
  [constraints]: #constraints
49
  [constraints.overview]: #constraints.overview
50
  [container.requirements]: containers.md#container.requirements
51
  [containers]: containers.md#containers
52
  [contents]: #contents
53
- [conv]: conv.md#conv
 
54
  [conventions]: #conventions
55
  [cpp.include]: cpp.md#cpp.include
56
- [cstdint]: language.md#cstdint
 
 
 
 
 
 
 
 
 
57
  [dcl.array]: dcl.md#dcl.array
58
  [dcl.attr]: dcl.md#dcl.attr
59
  [dcl.constexpr]: dcl.md#dcl.constexpr
60
  [dcl.fct.default]: dcl.md#dcl.fct.default
61
  [dcl.init]: dcl.md#dcl.init
62
  [dcl.init.list]: dcl.md#dcl.init.list
63
  [dcl.inline]: dcl.md#dcl.inline
64
  [dcl.link]: dcl.md#dcl.link
 
65
  [definitions]: #definitions
66
  [depr]: future.md#depr
67
  [depr.c.headers]: future.md#depr.c.headers
68
- [depr.cstdalign.syn]: future.md#depr.cstdalign.syn
69
- [depr.cstdbool.syn]: future.md#depr.cstdbool.syn
70
  [derivation]: #derivation
71
  [derived.classes]: #derived.classes
72
  [description]: #description
73
  [diagnostics]: diagnostics.md#diagnostics
74
  [enumerated.types]: #enumerated.types
75
  [except]: except.md#except
 
 
76
  [expos.only.types]: #expos.only.types
77
  [expr.cond]: expr.md#expr.cond
78
  [expr.const]: expr.md#expr.const
79
  [expr.delete]: expr.md#expr.delete
80
  [expr.eq]: expr.md#expr.eq
81
  [expr.new]: expr.md#expr.new
82
  [expr.rel]: expr.md#expr.rel
 
 
83
  [extern.names]: #extern.names
84
  [extern.types]: #extern.types
85
  [function.objects]: utilities.md#function.objects
86
  [functions.within.classes]: #functions.within.classes
87
  [global.functions]: #global.functions
88
  [handler.functions]: #handler.functions
89
  [hash.requirements]: #hash.requirements
90
  [headers]: #headers
 
 
 
 
91
  [input.output]: input.md#input.output
92
  [intro.compliance]: intro.md#intro.compliance
93
  [intro.defs]: intro.md#intro.defs
94
- [intro.multithread]: intro.md#intro.multithread
 
95
  [intro.refs]: intro.md#intro.refs
96
  [iterator.requirements]: iterators.md#iterator.requirements
97
- [iterator.requirements.general]: iterators.md#iterator.requirements.general
98
  [iterators]: iterators.md#iterators
99
- [language.support]: language.md#language.support
100
- [lex]: lex.md#lex
101
  [lex.phases]: lex.md#lex.phases
 
102
  [lib.types.movedfrom]: #lib.types.movedfrom
103
  [library]: #library
104
  [library.c]: #library.c
 
105
  [library.general]: #library.general
106
  [locales]: localization.md#locales
107
  [localization]: localization.md#localization
108
  [macro.names]: #macro.names
109
  [member.functions]: #member.functions
110
  [meta]: utilities.md#meta
 
111
  [multibyte.strings]: #multibyte.strings
112
  [namespace.constraints]: #namespace.constraints
113
  [namespace.def]: dcl.md#namespace.def
114
  [namespace.future]: #namespace.future
115
  [namespace.posix]: #namespace.posix
116
  [namespace.std]: #namespace.std
117
  [namespace.udecl]: dcl.md#namespace.udecl
118
- [new.delete]: language.md#new.delete
119
- [new.handler]: language.md#new.handler
 
120
  [nullablepointer.requirements]: #nullablepointer.requirements
121
  [numeric.requirements]: numerics.md#numeric.requirements
122
  [numerics]: numerics.md#numerics
123
  [objects.within.classes]: #objects.within.classes
124
  [organization]: #organization
@@ -126,71 +158,73 @@ objects shall be placed in a valid but unspecified state.
126
  [over.literal]: over.md#over.literal
127
  [over.match]: over.md#over.match
128
  [over.oper]: over.md#over.oper
129
  [protection.within.classes]: #protection.within.classes
130
  [random.access.iterators]: iterators.md#random.access.iterators
 
131
  [re]: re.md#re
132
  [reentrancy]: #reentrancy
133
  [replacement.functions]: #replacement.functions
134
  [requirements]: #requirements
135
  [res.on.arguments]: #res.on.arguments
136
  [res.on.data.races]: #res.on.data.races
137
  [res.on.exception.handling]: #res.on.exception.handling
 
138
  [res.on.functions]: #res.on.functions
139
  [res.on.headers]: #res.on.headers
140
  [res.on.macro.definitions]: #res.on.macro.definitions
141
  [res.on.objects]: #res.on.objects
142
  [res.on.pointer.storage]: #res.on.pointer.storage
143
- [res.on.required]: #res.on.required
144
  [reserved.names]: #reserved.names
 
145
  [std.exceptions]: diagnostics.md#std.exceptions
 
146
  [stream.types]: input.md#stream.types
147
  [strings]: strings.md#strings
148
  [structure]: #structure
149
  [structure.elements]: #structure.elements
150
  [structure.requirements]: #structure.requirements
151
  [structure.see.also]: #structure.see.also
152
  [structure.specifications]: #structure.specifications
153
  [structure.summary]: #structure.summary
154
- [support.dynamic]: language.md#support.dynamic
155
- [support.exception]: language.md#support.exception
156
- [support.initlist]: language.md#support.initlist
157
- [support.limits]: language.md#support.limits
158
- [support.rtti]: language.md#support.rtti
159
- [support.runtime]: language.md#support.runtime
160
- [support.start.term]: language.md#support.start.term
161
- [support.types]: language.md#support.types
 
 
 
162
  [swappable.requirements]: #swappable.requirements
163
  [syserr]: diagnostics.md#syserr
164
  [syserr.errcode.overview]: diagnostics.md#syserr.errcode.overview
165
- [tab:c.annex.k.names]: #tab:c.annex.k.names
166
- [tab:copyassignable]: #tab:copyassignable
167
- [tab:cpp.c.headers]: #tab:cpp.c.headers
168
- [tab:cpp.headers.freestanding]: #tab:cpp.headers.freestanding
169
- [tab:cpp.library.headers]: #tab:cpp.library.headers
170
- [tab:desc.var.def]: #tab:desc.var.def
171
- [tab:destructible]: #tab:destructible
172
- [tab:equalitycomparable]: #tab:equalitycomparable
173
- [tab:hash]: #tab:hash
174
- [tab:identifiers.special]: lex.md#tab:identifiers.special
175
- [tab:library.categories]: #tab:library.categories
176
- [tab:moveassignable]: #tab:moveassignable
177
- [tab:nullablepointer]: #tab:nullablepointer
178
- [tab:utilities.allocator.requirements]: #tab:utilities.allocator.requirements
179
  [temp.deduct.call]: temp.md#temp.deduct.call
 
180
  [template.bitset]: utilities.md#template.bitset
181
- [terminate.handler]: language.md#terminate.handler
182
  [thread]: thread.md#thread
 
183
  [type.descriptions]: #type.descriptions
184
  [type.descriptions.general]: #type.descriptions.general
185
  [using]: #using
186
  [using.headers]: #using.headers
187
  [using.linkage]: #using.linkage
188
  [using.overview]: #using.overview
189
  [usrlit.suffix]: #usrlit.suffix
190
  [utilities]: utilities.md#utilities
191
- [utility]: utilities.md#utility
192
  [utility.arg.requirements]: #utility.arg.requirements
193
  [utility.requirements]: #utility.requirements
194
  [value.error.codes]: #value.error.codes
195
  [zombie.names]: #zombie.names
196
 
@@ -203,60 +237,60 @@ objects shall be placed in a valid but unspecified state.
203
 
204
  [^3]: To save space, items that do not apply to a class are omitted. For
205
  example, if a class does not specify any comparison functions, there
206
  will be no “Comparison functions” subclause.
207
 
208
- [^4]: To save space, items that do not apply to a function are omitted.
209
- For example, if a function does not specify any further
210
- preconditions, there will be no *Requires:* paragraph.
211
 
212
  [^5]: This simplifies the presentation of complexity requirements in
213
  some cases.
214
 
215
  [^6]: Examples from  [[utility.requirements]] include:
216
- `EqualityComparable`, `LessThanComparable`, `CopyConstructible`.
217
- Examples from  [[iterator.requirements]] include: `InputIterator`,
218
- `ForwardIterator`.
219
 
220
- [^7]: Such as an integer type, with constant integer values (
221
- [[basic.fundamental]]).
222
 
223
- [^8]: declared in `<clocale>` ([[c.locales]]).
224
 
225
  [^9]: Many of the objects manipulated by function signatures declared in
226
- `<cstring>` ([[c.strings]]) are character sequences or NTBSs. The
227
- size of some of these character sequences is limited by a length
228
- value, maintained separately from the character sequence.
229
 
230
- [^10]: A string literal, such as `"abc"`, is a static NTBS.
231
 
232
  [^11]: An NTBS that contains characters only from the basic execution
233
  character set is also an NTMBS. Each multibyte character then
234
  consists of a single byte.
235
 
236
- [^12]: The C standard library headers (Annex  [[depr.c.headers]]) also
237
- define names within the global namespace, while the C++headers for C
238
- library facilities ([[headers]]) may also define names within the
239
  global namespace.
240
 
241
  [^13]: This gives implementers freedom to use inline namespaces to
242
  support multiple configurations of the library.
243
 
244
  [^14]: A header is not necessarily a source file, nor are the sequences
245
  delimited by `<` and `>` in header names necessarily valid source
246
- file names ([[cpp.include]]).
247
 
248
  [^15]: It is intentional that there is no C++ header for any of these C
249
  headers: `<stdatomic.h>`, `<stdnoreturn.h>`, `<threads.h>`.
250
 
251
  [^16]: This disallows the practice, allowed in C, of providing a masking
252
  macro in addition to the function prototype. The only way to achieve
253
  equivalent inline behavior in C++ is to provide a definition as an
254
  extern inline function.
255
 
256
- [^17]: In particular, including the standard header `<iso646.h>` or
257
- `<ciso646>` has no effect.
258
 
259
  [^18]: The `".h"` headers dump all their names into the global
260
  namespace, whereas the newer forms keep their names in namespace
261
  `std`. Therefore, the newer forms are the preferred forms for all
262
  uses except for C++ programs which are intended to be strictly
@@ -268,43 +302,50 @@ objects shall be placed in a valid but unspecified state.
268
  from the C standard library is by including the header that declares
269
  it, notwithstanding the latitude granted in 7.1.4 of the C Standard.
270
 
271
  [^21]: Any library code that instantiates other library templates must
272
  be prepared to work adequately with any user-supplied specialization
273
- that meets the minimum requirements of this International Standard.
274
 
275
- [^22]: The list of such reserved names includes `errno`, declared or
 
 
 
 
 
 
 
 
 
 
 
276
  defined in `<cerrno>`.
277
 
278
- [^23]: The list of such reserved function signatures with external
279
  linkage includes `setjmp(jmp_buf)`, declared or defined in
280
  `<csetjmp>`, and `va_end(va_list)`, declared or defined in
281
  `<cstdarg>`.
282
 
283
- [^24]: The function signatures declared in `<cuchar>`, `<cwchar>`, and
284
  `<cwctype>` are always reserved, notwithstanding the restrictions
285
  imposed in subclause 4.5.1 of Amendment 1 to the C Standard for
286
  these headers.
287
 
288
- [^25]: These types are `clock_t`, `div_t`, `FILE`, `fpos_t`, `lconv`,
289
- `ldiv_t`, `mbstate_t`, `ptrdiff_t`, `sig_atomic_t`, `size_t`,
290
- `time_t`, `tm`, `va_list`, `wctrans_t`, `wctype_t`, and `wint_t`.
291
-
292
  [^26]: A valid C++ program always calls the expected library non-member
293
  function. An implementation may also define additional non-member
294
  functions that would otherwise not be called by a valid C++ program.
295
 
296
  [^27]: There is an implicit exception to this rule for types that are
297
- described as synonyms for basic integral types, such as `size_t` (
298
- [[support.types]]) and `streamoff` ([[stream.types]]).
299
 
300
  [^28]: That is, the C library functions can all be treated as if they
301
  are marked `noexcept`. This allows implementations to make
302
  performance optimizations based on the absence of exceptions at
303
  runtime.
304
 
305
- [^29]: The functions `qsort()` and `bsearch()` ([[alg.c.library]]) meet
306
  this condition.
307
 
308
  [^30]: In particular, they can report a failure to allocate storage by
309
  throwing an exception of type `bad_alloc`, or a class derived from
310
- `bad_alloc` ([[bad.alloc]]).
 
1
  #### Moved-from state of library types <a id="lib.types.movedfrom">[[lib.types.movedfrom]]</a>
2
 
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
28
  [basic.lookup.argdep]: basic.md#basic.lookup.argdep
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
53
+ [concepts]: concepts.md#concepts
54
+ [concepts.equality]: concepts.md#concepts.equality
55
+ [concepts.object]: concepts.md#concepts.object
56
  [conforming]: #conforming
57
  [conforming.overview]: #conforming.overview
58
  [constexpr.functions]: #constexpr.functions
59
  [constraints]: #constraints
60
  [constraints.overview]: #constraints.overview
61
  [container.requirements]: containers.md#container.requirements
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
114
  [headers]: #headers
115
+ [headers.cpp]: #headers.cpp
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
132
  [library]: #library
133
  [library.c]: #library.c
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
146
  [namespace.posix]: #namespace.posix
147
  [namespace.std]: #namespace.std
148
  [namespace.udecl]: dcl.md#namespace.udecl
149
+ [new.delete]: support.md#new.delete
150
+ [new.handler]: support.md#new.handler
151
+ [new.syn]: support.md#new.syn
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
 
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
196
+ [support.rtti]: support.md#support.rtti
197
+ [support.runtime]: support.md#support.runtime
198
+ [support.srcloc]: support.md#support.srcloc
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
 
 
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.
289
 
290
+ [^17]: In particular, including the standard header `<iso646.h>` has no
291
+ effect.
292
 
293
  [^18]: The `".h"` headers dump all their names into the global
294
  namespace, whereas the newer forms keep their names in namespace
295
  `std`. Therefore, the newer forms are the preferred forms for all
296
  uses except for C++ programs which are intended to be strictly
 
302
  from the C standard library is by including the header that declares
303
  it, notwithstanding the latitude granted in 7.1.4 of the C Standard.
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]].