From Jason Turner

[support.runtime]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpfkrh668a/{from.md → to.md} +21 -272
tmp/tmpfkrh668a/{from.md → to.md} RENAMED
@@ -1,7 +1,9 @@
1
  ## Other runtime support <a id="support.runtime">[[support.runtime]]</a>
2
 
 
 
3
  Headers `<csetjmp>` (nonlocal jumps), `<csignal>` (signal handling),
4
  `<cstdarg>` (variable arguments), and `<cstdlib>` (runtime environment
5
  `getenv`, `system`), provide further compatibility with C code.
6
 
7
  Calls to the function `getenv` [[cstdlib.syn]] shall not introduce a
@@ -18,10 +20,11 @@ shall behave as if no library function other than `locale::global` calls
18
  the `setlocale` function.
19
 
20
  ### Header `<cstdarg>` synopsis <a id="cstdarg.syn">[[cstdarg.syn]]</a>
21
 
22
  ``` cpp
 
23
  namespace std {
24
  using va_list = see below;
25
  }
26
 
27
  #define va_arg(V, P) see below
@@ -29,21 +32,24 @@ namespace std {
29
  #define va_end(V) see below
30
  #define va_start(V, P) see below
31
  ```
32
 
33
  The contents of the header `<cstdarg>` are the same as the C standard
34
- library header `<stdarg.h>`, with the following changes: The
35
- restrictions that ISO C places on the second parameter to the `va_start`
36
- macro in header `<stdarg.h>` are different in this document. The
37
- parameter `parmN` is the rightmost parameter in the variable parameter
38
- list of the function definition (the one just before the `...`).[^35] If
39
- the parameter `parmN` is a pack expansion [[temp.variadic]] or an entity
40
- resulting from a lambda capture [[expr.prim.lambda]], the program is
41
- ill-formed, no diagnostic required. If the parameter `parmN` is of a
42
- reference type, or of a type that is not compatible with the type that
43
- results when passing an argument for which there is no parameter, the
44
- behavior is undefined.
 
 
 
45
 
46
  See also: ISO C 7.16.1.1
47
 
48
  ### Header `<csetjmp>` synopsis <a id="csetjmp.syn">[[csetjmp.syn]]</a>
49
 
@@ -104,10 +110,13 @@ invocation of the signal handler so installed.
104
  A *plain lock-free atomic operation* is an invocation of a function `f`
105
  from [[atomics]], such that:
106
 
107
  - `f` is the function `atomic_is_lock_free()`, or
108
  - `f` is the member function `is_lock_free()`, or
 
 
 
109
  - `f` is a non-static member function invoked on an object `A`, such
110
  that `A.is_lock_free()` yields `true`, or
111
  - `f` is a non-member function, and for every pointer-to-atomic argument
112
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
113
 
@@ -121,12 +130,11 @@ An evaluation is *signal-safe* unless it includes one of the following:
121
  - an access to an object with thread storage duration;
122
  - a `dynamic_cast` expression;
123
  - throwing of an exception;
124
  - control entering a *try-block* or *function-try-block*;
125
  - initialization of a variable with static storage duration requiring
126
- dynamic initialization ([[basic.start.dynamic]], [[stmt.dcl]]) [^36];
127
- or
128
  - waiting for the completion of the initialization of a variable with
129
  static storage duration [[stmt.dcl]].
130
 
131
  A signal handler invocation has undefined behavior if it includes an
132
  evaluation that is not signal-safe.
@@ -135,264 +143,5 @@ The function `signal` is signal-safe if it is invoked with the first
135
  argument equal to the signal number corresponding to the signal that
136
  caused the invocation of the handler.
137
 
138
  See also: ISO C 7.14
139
 
140
- <!-- Link reference definitions -->
141
- [alg.c.library]: algorithms.md#alg.c.library
142
- [alloc.errors]: #alloc.errors
143
- [atomics]: atomics.md#atomics
144
- [bad.alloc]: #bad.alloc
145
- [bad.cast]: #bad.cast
146
- [bad.exception]: #bad.exception
147
- [bad.typeid]: #bad.typeid
148
- [basic.align]: basic.md#basic.align
149
- [basic.def.odr]: basic.md#basic.def.odr
150
- [basic.fundamental]: basic.md#basic.fundamental
151
- [basic.life]: basic.md#basic.life
152
- [basic.start.dynamic]: basic.md#basic.start.dynamic
153
- [basic.start.term]: basic.md#basic.start.term
154
- [basic.stc.dynamic]: basic.md#basic.stc.dynamic
155
- [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
156
- [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
157
- [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
158
- [c.locales]: localization.md#c.locales
159
- [c.malloc]: utilities.md#c.malloc
160
- [c.math.abs]: numerics.md#c.math.abs
161
- [c.math.rand]: numerics.md#c.math.rand
162
- [c.mb.wcs]: strings.md#c.mb.wcs
163
- [cfloat.syn]: #cfloat.syn
164
- [class.mem]: class.md#class.mem
165
- [class.prop]: class.md#class.prop
166
- [class.spaceship]: class.md#class.spaceship
167
- [climits.syn]: #climits.syn
168
- [cmp]: #cmp
169
- [cmp.alg]: #cmp.alg
170
- [cmp.categories]: #cmp.categories
171
- [cmp.categories.pre]: #cmp.categories.pre
172
- [cmp.common]: #cmp.common
173
- [cmp.concept]: #cmp.concept
174
- [cmp.partialord]: #cmp.partialord
175
- [cmp.result]: #cmp.result
176
- [cmp.strongord]: #cmp.strongord
177
- [cmp.weakord]: #cmp.weakord
178
- [compare.syn]: #compare.syn
179
- [complex]: numerics.md#complex
180
- [concept.totallyordered]: concepts.md#concept.totallyordered
181
- [constraints]: library.md#constraints
182
- [conv.ptr]: expr.md#conv.ptr
183
- [conv.qual]: expr.md#conv.qual
184
- [conv.rank]: basic.md#conv.rank
185
- [coroutine.handle]: #coroutine.handle
186
- [coroutine.handle.compare]: #coroutine.handle.compare
187
- [coroutine.handle.con]: #coroutine.handle.con
188
- [coroutine.handle.export.import]: #coroutine.handle.export.import
189
- [coroutine.handle.hash]: #coroutine.handle.hash
190
- [coroutine.handle.noop]: #coroutine.handle.noop
191
- [coroutine.handle.noop.address]: #coroutine.handle.noop.address
192
- [coroutine.handle.noop.observers]: #coroutine.handle.noop.observers
193
- [coroutine.handle.noop.promise]: #coroutine.handle.noop.promise
194
- [coroutine.handle.noop.resumption]: #coroutine.handle.noop.resumption
195
- [coroutine.handle.observers]: #coroutine.handle.observers
196
- [coroutine.handle.promise]: #coroutine.handle.promise
197
- [coroutine.handle.resumption]: #coroutine.handle.resumption
198
- [coroutine.noop]: #coroutine.noop
199
- [coroutine.noop.coroutine]: #coroutine.noop.coroutine
200
- [coroutine.promise.noop]: #coroutine.promise.noop
201
- [coroutine.syn]: #coroutine.syn
202
- [coroutine.traits]: #coroutine.traits
203
- [coroutine.traits.primary]: #coroutine.traits.primary
204
- [coroutine.trivial.awaitables]: #coroutine.trivial.awaitables
205
- [cpp.line]: cpp.md#cpp.line
206
- [cpp17.nullablepointer]: #cpp17.nullablepointer
207
- [csetjmp.syn]: #csetjmp.syn
208
- [csignal.syn]: #csignal.syn
209
- [cstdarg.syn]: #cstdarg.syn
210
- [cstddef.syn]: #cstddef.syn
211
- [cstdint]: #cstdint
212
- [cstdint.syn]: #cstdint.syn
213
- [cstdlib.syn]: #cstdlib.syn
214
- [customization.point.object]: library.md#customization.point.object
215
- [dcl.fct.def.coroutine]: dcl.md#dcl.fct.def.coroutine
216
- [dcl.fct.default]: dcl.md#dcl.fct.default
217
- [dcl.init.list]: dcl.md#dcl.init.list
218
- [defns.expression-equivalent]: library.md#defns.expression-equivalent
219
- [denorm.style]: #denorm.style
220
- [except.handle]: except.md#except.handle
221
- [except.nested]: #except.nested
222
- [except.spec]: except.md#except.spec
223
- [except.terminate]: except.md#except.terminate
224
- [except.uncaught]: except.md#except.uncaught
225
- [exception]: #exception
226
- [exception.syn]: #exception.syn
227
- [exception.terminate]: #exception.terminate
228
- [expr.add]: expr.md#expr.add
229
- [expr.await]: expr.md#expr.await
230
- [expr.call]: expr.md#expr.call
231
- [expr.context]: expr.md#expr.context
232
- [expr.delete]: expr.md#expr.delete
233
- [expr.dynamic.cast]: expr.md#expr.dynamic.cast
234
- [expr.eq]: expr.md#expr.eq
235
- [expr.new]: expr.md#expr.new
236
- [expr.prim.lambda]: expr.md#expr.prim.lambda
237
- [expr.rel]: expr.md#expr.rel
238
- [expr.sizeof]: expr.md#expr.sizeof
239
- [expr.spaceship]: expr.md#expr.spaceship
240
- [expr.typeid]: expr.md#expr.typeid
241
- [fp.style]: #fp.style
242
- [get.new.handler]: #get.new.handler
243
- [get.terminate]: #get.terminate
244
- [hardware.interference]: #hardware.interference
245
- [initializer.list.syn]: #initializer.list.syn
246
- [intro.multithread]: basic.md#intro.multithread
247
- [library.c]: library.md#library.c
248
- [limits.syn]: #limits.syn
249
- [locale.codecvt]: localization.md#locale.codecvt
250
- [multibyte.strings]: library.md#multibyte.strings
251
- [new.badlength]: #new.badlength
252
- [new.delete]: #new.delete
253
- [new.delete.array]: #new.delete.array
254
- [new.delete.dataraces]: #new.delete.dataraces
255
- [new.delete.placement]: #new.delete.placement
256
- [new.delete.single]: #new.delete.single
257
- [new.handler]: #new.handler
258
- [new.syn]: #new.syn
259
- [numeric.limits]: #numeric.limits
260
- [numeric.limits.members]: #numeric.limits.members
261
- [numeric.special]: #numeric.special
262
- [propagation]: #propagation
263
- [ptr.launder]: #ptr.launder
264
- [res.on.data.races]: library.md#res.on.data.races
265
- [round.style]: #round.style
266
- [set.new.handler]: #set.new.handler
267
- [set.terminate]: #set.terminate
268
- [source.location.syn]: #source.location.syn
269
- [stmt.dcl]: stmt.md#stmt.dcl
270
- [string.classes]: strings.md#string.classes
271
- [support]: #support
272
- [support.coroutine]: #support.coroutine
273
- [support.dynamic]: #support.dynamic
274
- [support.exception]: #support.exception
275
- [support.general]: #support.general
276
- [support.initlist]: #support.initlist
277
- [support.initlist.access]: #support.initlist.access
278
- [support.initlist.cons]: #support.initlist.cons
279
- [support.initlist.range]: #support.initlist.range
280
- [support.limits]: #support.limits
281
- [support.limits.general]: #support.limits.general
282
- [support.rtti]: #support.rtti
283
- [support.runtime]: #support.runtime
284
- [support.signal]: #support.signal
285
- [support.srcloc]: #support.srcloc
286
- [support.srcloc.class]: #support.srcloc.class
287
- [support.srcloc.cons]: #support.srcloc.cons
288
- [support.srcloc.current]: #support.srcloc.current
289
- [support.srcloc.obs]: #support.srcloc.obs
290
- [support.start.term]: #support.start.term
291
- [support.summary]: #support.summary
292
- [support.types]: #support.types
293
- [support.types.byteops]: #support.types.byteops
294
- [support.types.layout]: #support.types.layout
295
- [support.types.nullptr]: #support.types.nullptr
296
- [swappable.requirements]: library.md#swappable.requirements
297
- [temp.deduct]: temp.md#temp.deduct
298
- [temp.dep.constexpr]: temp.md#temp.dep.constexpr
299
- [temp.dep.expr]: temp.md#temp.dep.expr
300
- [temp.variadic]: temp.md#temp.variadic
301
- [terminate]: #terminate
302
- [terminate.handler]: #terminate.handler
303
- [type.info]: #type.info
304
- [typeinfo.syn]: #typeinfo.syn
305
- [uncaught.exceptions]: #uncaught.exceptions
306
- [unord.hash]: utilities.md#unord.hash
307
- [utility.arg.requirements]: library.md#utility.arg.requirements
308
- [version.syn]: #version.syn
309
-
310
- [^1]: Possible definitions include `0` and `0L`, but not `(void*)0`.
311
-
312
- [^2]: Note that `offsetof` is required to work as specified even if
313
- unary `operator&` is overloaded for any of the types involved.
314
-
315
- [^3]: Equivalent to `CHAR_MIN`, `SHRT_MIN`, `FLT_MIN`, `DBL_MIN`, etc.
316
-
317
- [^4]: Equivalent to `CHAR_MAX`, `SHRT_MAX`, `FLT_MAX`, `DBL_MAX`, etc.
318
-
319
- [^5]: `lowest()` is necessary because not all floating-point
320
- representations have a smallest (most negative) value that is the
321
- negative of the largest (most positive) finite value.
322
-
323
- [^6]: Equivalent to `FLT_MANT_DIG`, `DBL_MANT_DIG`, `LDBL_MANT_DIG`.
324
-
325
- [^7]: Equivalent to `FLT_DIG`, `DBL_DIG`, `LDBL_DIG`.
326
-
327
- [^8]: Equivalent to `FLT_RADIX`.
328
-
329
- [^9]: Distinguishes types with bases other than 2 (e.g. BCD).
330
-
331
- [^10]: Equivalent to `FLT_EPSILON`, `DBL_EPSILON`, `LDBL_EPSILON`.
332
-
333
- [^11]: Rounding error is described in LIA-1 Section 5.2.4 and Annex C
334
- Rationale Section C.5.2.4 — Rounding and rounding constants.
335
-
336
- [^12]: Equivalent to `FLT_MIN_EXP`, `DBL_MIN_EXP`, `LDBL_MIN_EXP`.
337
-
338
- [^13]: Equivalent to `FLT_MIN_10_EXP`, `DBL_MIN_10_EXP`,
339
- `LDBL_MIN_10_EXP`.
340
-
341
- [^14]: Equivalent to `FLT_MAX_EXP`, `DBL_MAX_EXP`, `LDBL_MAX_EXP`.
342
-
343
- [^15]: Equivalent to `FLT_MAX_10_EXP`, `DBL_MAX_10_EXP`,
344
- `LDBL_MAX_10_EXP`.
345
-
346
- [^16]: Required by LIA-1.
347
-
348
- [^17]: Required by LIA-1.
349
-
350
- [^18]: Required by LIA-1.
351
-
352
- [^19]: See ISO/IEC/IEEE 60559.
353
-
354
- [^20]: Required by LIA-1.
355
-
356
- [^21]: Required by LIA-1.
357
-
358
- [^22]: Required by LIA-1.
359
-
360
- [^23]: Required by LIA-1.
361
-
362
- [^24]: ISO/IEC/IEEE 60559:2011 is the same as IEEE 754-2008.
363
-
364
- [^25]: Required by LIA-1.
365
-
366
- [^26]: Required by LIA-1.
367
-
368
- [^27]: Required by LIA-1.
369
-
370
- [^28]: Refer to ISO/IEC/IEEE 60559. Required by LIA-1.
371
-
372
- [^29]: Equivalent to `FLT_ROUNDS`. Required by LIA-1.
373
-
374
- [^30]: A function is called for every time it is registered.
375
-
376
- [^31]: Objects with automatic storage duration are all destroyed in a
377
- program whose `main` function [[basic.start.main]] contains no
378
- objects with automatic storage duration and executes the call to
379
- `exit()`. Control can be transferred directly to such a `main`
380
- function by throwing an exception that is caught in `main`.
381
-
382
- [^32]: The macros `EXIT_FAILURE` and `EXIT_SUCCESS` are defined in
383
- `<cstdlib>`.
384
-
385
- [^33]: It is not the direct responsibility of `operator new[]` or
386
- `operator delete[]` to note the repetition count or element size of
387
- the array. Those operations are performed elsewhere in the array
388
- `new` and `delete` expressions. The array `new` expression, may,
389
- however, increase the `size` argument to `operator new[]` to obtain
390
- space to store supplemental information.
391
-
392
- [^34]: That is, `a < b`, `a == b`, and `a > b` might all be `false`.
393
-
394
- [^35]: Note that `va_start` is required to work as specified even if
395
- unary `operator&` is overloaded for the type of `parmN`.
396
-
397
- [^36]: Such initialization might occur because it is the first odr-use
398
- [[basic.def.odr]] of that variable.
 
1
  ## Other runtime support <a id="support.runtime">[[support.runtime]]</a>
2
 
3
+ ### General <a id="support.runtime.general">[[support.runtime.general]]</a>
4
+
5
  Headers `<csetjmp>` (nonlocal jumps), `<csignal>` (signal handling),
6
  `<cstdarg>` (variable arguments), and `<cstdlib>` (runtime environment
7
  `getenv`, `system`), provide further compatibility with C code.
8
 
9
  Calls to the function `getenv` [[cstdlib.syn]] shall not introduce a
 
20
  the `setlocale` function.
21
 
22
  ### Header `<cstdarg>` synopsis <a id="cstdarg.syn">[[cstdarg.syn]]</a>
23
 
24
  ``` cpp
25
+ // all freestanding
26
  namespace std {
27
  using va_list = see below;
28
  }
29
 
30
  #define va_arg(V, P) see below
 
32
  #define va_end(V) see below
33
  #define va_start(V, P) see below
34
  ```
35
 
36
  The contents of the header `<cstdarg>` are the same as the C standard
37
+ library header `<stdarg.h>`, with the following changes:
38
+
39
+ - In lieu of the default argument promotions specified in ISO C 6.5.2.2,
40
+ the definition in  [[expr.call]] applies.
41
+ - The restrictions that ISO C places on the second parameter to the
42
+ `va_start` macro in header `<stdarg.h>` are different in this
43
+ document. The parameter `parmN` is the rightmost parameter in the
44
+ variable parameter list of the function definition (the one just
45
+ before the `...`).[^33] If the parameter `parmN` is a pack expansion
46
+ [[temp.variadic]] or an entity resulting from a lambda capture
47
+ [[expr.prim.lambda]], the program is ill-formed, no diagnostic
48
+ required. If the parameter `parmN` is of a reference type, or of a
49
+ type that is not compatible with the type that results when passing an
50
+ argument for which there is no parameter, the behavior is undefined.
51
 
52
  See also: ISO C 7.16.1.1
53
 
54
  ### Header `<csetjmp>` synopsis <a id="csetjmp.syn">[[csetjmp.syn]]</a>
55
 
 
110
  A *plain lock-free atomic operation* is an invocation of a function `f`
111
  from [[atomics]], such that:
112
 
113
  - `f` is the function `atomic_is_lock_free()`, or
114
  - `f` is the member function `is_lock_free()`, or
115
+ - `f` is a non-static member function of class `atomic_flag`, or
116
+ - `f` is a non-member function, and the first parameter of `f` has type
117
+ cv `atomic_flag*`, or
118
  - `f` is a non-static member function invoked on an object `A`, such
119
  that `A.is_lock_free()` yields `true`, or
120
  - `f` is a non-member function, and for every pointer-to-atomic argument
121
  `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
122
 
 
130
  - an access to an object with thread storage duration;
131
  - a `dynamic_cast` expression;
132
  - throwing of an exception;
133
  - control entering a *try-block* or *function-try-block*;
134
  - initialization of a variable with static storage duration requiring
135
+ dynamic initialization [[basic.start.dynamic]], [[stmt.dcl]][^34] ; or
 
136
  - waiting for the completion of the initialization of a variable with
137
  static storage duration [[stmt.dcl]].
138
 
139
  A signal handler invocation has undefined behavior if it includes an
140
  evaluation that is not signal-safe.
 
143
  argument equal to the signal number corresponding to the signal that
144
  caused the invocation of the handler.
145
 
146
  See also: ISO C 7.14
147