From Jason Turner

[support.runtime]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmpexgu9cze/{from.md → to.md} +169 -82
tmp/tmpexgu9cze/{from.md → to.md} RENAMED
@@ -1,120 +1,208 @@
1
  ## Other runtime support <a id="support.runtime">[[support.runtime]]</a>
2
 
3
  Headers `<csetjmp>` (nonlocal jumps), `<csignal>` (signal handling),
4
- `<cstdalign> (alignment),` `<cstdarg>` (variable arguments),
5
- `<cstdbool>` (`\xname{bool_true_false_are_defined}`). `<cstdlib>`
6
- (runtime environment `getenv(), system()`), and `<ctime>` (system clock
7
- `clock(), time()`) provide further compatibility with C code.
8
-
9
- The contents of these headers are the same as the Standard C library
10
- headers `<setjmp.h>`, `<signal.h>`, `<stdalign.h>`, `<stdarg.h>`,
11
- `<stdbool.h>`, `<stdlib.h>`, and `<time.h>`, respectively, with the
12
- following changes:
13
-
14
- The restrictions that ISO C places on the second parameter to the
15
- `va_start()` macro in header `<stdarg.h>` are different in this
16
- International Standard. The parameter `parmN` is the identifier of the
17
- rightmost parameter in the variable parameter list of the function
18
- definition (the one just before the `...`).[^34] If the parameter
19
- `parmN` is of a reference type, or of a type that is not compatible with
20
- the type that results when passing an argument for which there is no
21
- parameter, the behavior is undefined.
22
-
23
- ISO C 4.8.1.1.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
24
 
25
  The function signature `longjmp(jmp_buf jbuf, int val)` has more
26
  restricted behavior in this International Standard. A `setjmp`/`longjmp`
27
  call pair has undefined behavior if replacing the `setjmp` and `longjmp`
28
  by `catch` and `throw` would invoke any non-trivial destructors for any
29
  automatic objects.
30
 
31
- ISO C 7.10.4, 7.8, 7.6, 7.12.
32
 
33
- Calls to the function `getenv` shall not introduce a data race (
34
- [[res.on.data.races]]) provided that nothing modifies the environment.
35
- Calls to the POSIX functions `setenv` and `putenv` modify the
36
- environment.
37
 
38
- A call to the `setlocale` function may introduce a data race with other
39
- calls to the `setlocale` function or with calls to functions that are
40
- affected by the current C locale. The implementation shall behave as if
41
- no library function other than `locale::global()` calls the `setlocale`
42
- function.
43
 
44
- The header `<cstdalign>` and the header `<stdalign.h>` shall not define
45
- a macro named `alignas`.
 
46
 
47
- The header `<cstdbool>` and the header `<stdbool.h>` shall not define
48
- macros named `bool`, `true`, or `false`.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  A call to the function `signal` synchronizes with any resulting
51
  invocation of the signal handler so installed.
52
 
53
- The common subset of the C and C++languages consists of all
54
- declarations, definitions, and expressions that may appear in a well
55
- formed C++program and also in a conforming C program. A POF (“plain old
56
- function”) is a function that uses only features from this common
57
- subset, and that does not directly or indirectly use any function that
58
- is not a POF, except that it may use plain lock-free atomic operations.
59
- A *plain lock-free atomic operation* is an invocation of a function *f*
60
- from Clause  [[atomics]], such that *f* is not a member function, and
61
- either *f* is the function `atomic_is_lock_free`, or for every atomic
62
- argument `A` passed to *f*, `atomic_is_lock_free(A)` yields `true`. All
63
- signal handlers shall have C linkage. The behavior of any function other
64
- than a POF used as a signal handler in a C++program is
65
- *implementation-defined*.[^35]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
66
 
67
  <!-- Link reference definitions -->
 
68
  [alloc.errors]: #alloc.errors
69
  [atomics]: atomics.md#atomics
70
  [bad.alloc]: #bad.alloc
71
  [bad.cast]: #bad.cast
72
  [bad.exception]: #bad.exception
73
  [bad.typeid]: #bad.typeid
74
  [basic.align]: basic.md#basic.align
 
75
  [basic.fundamental]: basic.md#basic.fundamental
 
76
  [basic.start]: basic.md#basic.start
 
77
  [basic.start.term]: basic.md#basic.start.term
78
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
79
  [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
80
  [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
81
  [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
82
- [c.limits]: #c.limits
 
 
 
 
 
83
  [class]: class.md#class
84
  [class.free]: special.md#class.free
 
85
  [complex]: numerics.md#complex
86
  [constraints]: library.md#constraints
87
  [conv.ptr]: conv.md#conv.ptr
 
88
  [conv.rank]: conv.md#conv.rank
 
 
 
 
89
  [cstdint]: #cstdint
90
  [cstdint.syn]: #cstdint.syn
 
91
  [dcl.init.list]: dcl.md#dcl.init.list
92
  [denorm.style]: #denorm.style
93
- [except.ctor]: except.md#except.ctor
94
  [except.handle]: except.md#except.handle
95
  [except.nested]: #except.nested
96
  [except.special]: except.md#except.special
97
  [except.terminate]: except.md#except.terminate
98
- [except.throw]: except.md#except.throw
99
- [except.unexpected]: except.md#except.unexpected
100
  [exception]: #exception
 
101
  [exception.terminate]: #exception.terminate
102
  [expr.add]: expr.md#expr.add
103
  [expr.delete]: expr.md#expr.delete
104
  [expr.dynamic.cast]: expr.md#expr.dynamic.cast
105
  [expr.new]: expr.md#expr.new
 
106
  [expr.sizeof]: expr.md#expr.sizeof
107
  [expr.typeid]: expr.md#expr.typeid
 
108
  [get.new.handler]: #get.new.handler
109
  [get.terminate]: #get.terminate
110
- [intro.execution]: intro.md#intro.execution
 
111
  [intro.memory]: intro.md#intro.memory
112
  [intro.multithread]: intro.md#intro.multithread
113
  [language.support]: #language.support
114
- [limits]: #limits
115
- [limits.numeric]: #limits.numeric
116
  [limits.syn]: #limits.syn
117
  [locale.codecvt]: localization.md#locale.codecvt
118
  [memory]: utilities.md#memory
119
  [multibyte.strings]: library.md#multibyte.strings
120
  [new.badlength]: #new.badlength
@@ -122,19 +210,22 @@ than a POF used as a signal handler in a C++program is
122
  [new.delete.array]: #new.delete.array
123
  [new.delete.dataraces]: #new.delete.dataraces
124
  [new.delete.placement]: #new.delete.placement
125
  [new.delete.single]: #new.delete.single
126
  [new.handler]: #new.handler
 
127
  [nullablepointer.requirements]: library.md#nullablepointer.requirements
128
  [numeric.limits]: #numeric.limits
129
  [numeric.limits.members]: #numeric.limits.members
130
  [numeric.special]: #numeric.special
131
  [propagation]: #propagation
 
132
  [res.on.data.races]: library.md#res.on.data.races
133
  [round.style]: #round.style
134
  [set.new.handler]: #set.new.handler
135
  [set.terminate]: #set.terminate
 
136
  [string.classes]: strings.md#string.classes
137
  [support.dynamic]: #support.dynamic
138
  [support.exception]: #support.exception
139
  [support.general]: #support.general
140
  [support.initlist]: #support.initlist
@@ -143,23 +234,25 @@ than a POF used as a signal handler in a C++program is
143
  [support.initlist.range]: #support.initlist.range
144
  [support.limits]: #support.limits
145
  [support.limits.general]: #support.limits.general
146
  [support.rtti]: #support.rtti
147
  [support.runtime]: #support.runtime
 
148
  [support.start.term]: #support.start.term
149
  [support.types]: #support.types
 
 
 
150
  [tab:lang.sup.lib.summary]: #tab:lang.sup.lib.summary
151
- [tab:support.hdr.cfloat]: #tab:support.hdr.cfloat
152
- [tab:support.hdr.climits]: #tab:support.hdr.climits
153
- [tab:support.hdr.cstddef]: #tab:support.hdr.cstddef
154
- [tab:support.hdr.cstdlib]: #tab:support.hdr.cstdlib
155
  [temp.dep.constexpr]: temp.md#temp.dep.constexpr
156
  [temp.dep.expr]: temp.md#temp.dep.expr
 
157
  [terminate]: #terminate
158
  [terminate.handler]: #terminate.handler
159
  [type.info]: #type.info
160
- [uncaught]: #uncaught
 
161
 
162
  [^1]: Possible definitions include `0` and `0L`, but not `(void*)0`.
163
 
164
  [^2]: Note that `offsetof` is required to work as specified even if
165
  unary `operator&` is overloaded for any of the types involved.
@@ -180,13 +273,12 @@ than a POF used as a signal handler in a C++program is
180
 
181
  [^9]: Distinguishes types with bases other than 2 (e.g. BCD).
182
 
183
  [^10]: Equivalent to `FLT_EPSILON`, `DBL_EPSILON`, `LDBL_EPSILON`.
184
 
185
- [^11]: Rounding error is described in ISO/IEC 10967-1 Language
186
- independent arithmetic - Part 1 Section 5.2.8 and Annex A Rationale
187
- Section A.5.2.8 - Rounding constants.
188
 
189
  [^12]: Equivalent to `FLT_MIN_EXP`, `DBL_MIN_EXP`, `LDBL_MIN_EXP`.
190
 
191
  [^13]: Equivalent to `FLT_MIN_10_EXP`, `DBL_MIN_10_EXP`,
192
  `LDBL_MIN_10_EXP`.
@@ -200,55 +292,50 @@ than a POF used as a signal handler in a C++program is
200
 
201
  [^17]: Required by LIA-1.
202
 
203
  [^18]: Required by LIA-1.
204
 
205
- [^19]: See IEC 559.
206
 
207
  [^20]: Required by LIA-1.
208
 
209
  [^21]: Required by LIA-1.
210
 
211
  [^22]: Required by LIA-1.
212
 
213
  [^23]: Required by LIA-1.
214
 
215
- [^24]: International Electrotechnical Commission standard 559 is the
216
- same as IEEE 754.
217
 
218
  [^25]: Required by LIA-1.
219
 
220
  [^26]: Required by LIA-1.
221
 
222
  [^27]: Required by LIA-1.
223
 
224
- [^28]: Refer to IEC 559. Required by LIA-1.
225
 
226
  [^29]: Equivalent to `FLT_ROUNDS`. Required by LIA-1.
227
 
228
  [^30]: A function is called for every time it is registered.
229
 
230
  [^31]: Objects with automatic storage duration are all destroyed in a
231
- program whose function `main()` contains no automatic objects and
232
- executes the call to `exit()`. Control can be transferred directly
233
- to such a `main()` by throwing an exception that is caught in
234
- `main()`.
235
 
236
  [^32]: The macros `EXIT_FAILURE` and `EXIT_SUCCESS` are defined in
237
  `<cstdlib>`.
238
 
239
- [^33]: It is not the direct responsibility of
240
- `operator new[](std::size_t)` or `operator delete[](void*)` to note
241
- the repetition count or element size of the array. Those operations
242
- are performed elsewhere in the array `new` and `delete` expressions.
243
- The array `new` expression, may, however, increase the `size`
244
- argument to `operator new[](std::size_t)` to obtain space to store
245
- supplemental information.
246
 
247
  [^34]: Note that `va_start` is required to work as specified even if
248
  unary `operator&` is overloaded for the type of `parmN`.
249
 
250
- [^35]: In particular, a signal handler using exception handling is very
251
- likely to have problems. Also, invoking `std::exit` may cause
252
- destruction of objects, including those of the standard library
253
- implementation, which, in general, yields undefined behavior in a
254
- signal handler (see  [[intro.execution]]).
 
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
8
+ data race ([[res.on.data.races]]) provided that nothing modifies the
9
+ environment.
10
+
11
+ [*Note 1*: Calls to the POSIX functions `setenv` and `putenv` modify
12
+ the environment. — *end note*]
13
+
14
+ A call to the `setlocale` function ([[c.locales]]) may introduce a data
15
+ race with other calls to the `setlocale` function or with calls to
16
+ functions that are affected by the current C locale. The implementation
17
+ 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
28
+ #define va_copy(VDST, VSRC) see below
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 International
37
+ Standard. The parameter `parmN` is the rightmost parameter in the
38
+ variable parameter list of the function definition (the one just before
39
+ the `...`).[^34] If the parameter `parmN` is a pack expansion (
40
+ [[temp.variadic]]) or an entity resulting from a lambda capture (
41
+ [[expr.prim.lambda]]), the program is ill-formed, no diagnostic
42
+ required. If the parameter `parmN` is of a reference type, or of a type
43
+ that is not compatible with the type that results when passing an
44
+ argument for which there is no parameter, the behavior is undefined.
45
+
46
+ ISO C 7.16.1.1.
47
+
48
+ ### Header `<csetjmp>` synopsis <a id="csetjmp.syn">[[csetjmp.syn]]</a>
49
+
50
+ ``` cpp
51
+ namespace std {
52
+ using jmp_buf = see below;
53
+ [[noreturn]] void longjmp(jmp_buf env, int val);
54
+ }
55
+
56
+ #define setjmp(env) see below
57
+ ```
58
+
59
+ The contents of the header `<csetjmp>` are the same as the C standard
60
+ library header `<setjmp.h>`.
61
 
62
  The function signature `longjmp(jmp_buf jbuf, int val)` has more
63
  restricted behavior in this International Standard. A `setjmp`/`longjmp`
64
  call pair has undefined behavior if replacing the `setjmp` and `longjmp`
65
  by `catch` and `throw` would invoke any non-trivial destructors for any
66
  automatic objects.
67
 
68
+ ISO C 7.13.
69
 
70
+ ### Header `<csignal>` synopsis <a id="csignal.syn">[[csignal.syn]]</a>
 
 
 
71
 
72
+ ``` cpp
73
+ namespace std {
74
+ using sig_atomic_t = see below;
 
 
75
 
76
+ // [support.signal], signal handlers
77
+ extern "C" using signal-handler = void(int); // exposition only
78
+ signal-handler* signal(int sig, signal-handler* func);
79
 
80
+ int raise(int sig);
81
+ }
82
+
83
+ #define SIG_DFL see below
84
+ #define SIG_ERR see below
85
+ #define SIG_IGN see below
86
+ #define SIGABRT see below
87
+ #define SIGFPE see below
88
+ #define SIGILL see below
89
+ #define SIGINT see below
90
+ #define SIGSEGV see below
91
+ #define SIGTERM see below
92
+ ```
93
+
94
+ The contents of the header `<csignal>` are the same as the C standard
95
+ library header `<signal.h>`.
96
+
97
+ ### Signal handlers <a id="support.signal">[[support.signal]]</a>
98
 
99
  A call to the function `signal` synchronizes with any resulting
100
  invocation of the signal handler so installed.
101
 
102
+ A *plain lock-free atomic operation* is an invocation of a function `f`
103
+ from Clause  [[atomics]], such that:
104
+
105
+ - `f` is the function `atomic_is_lock_free()`, or
106
+ - `f` is the member function `is_lock_free()`, or
107
+ - `f` is a non-static member function invoked on an object `A`, such
108
+ that `A.is_lock_free()` yields `true`, or
109
+ - `f` is a non-member function, and for every pointer-to-atomic argument
110
+ `A` passed to `f`, `atomic_is_lock_free(A)` yields `true`.
111
+
112
+ An evaluation is *signal-safe* unless it includes one of the following:
113
+
114
+ - a call to any standard library function, except for plain lock-free
115
+ atomic operations and functions explicitly identified as signal-safe.
116
+ \[*Note 1*: This implicitly excludes the use of `new` and `delete`
117
+ expressions that rely on a library-provided memory
118
+ allocator. — *end note*]
119
+ - an access to an object with thread storage duration;
120
+ - a `dynamic_cast` expression;
121
+ - throwing of an exception;
122
+ - control entering a *try-block* or *function-try-block*;
123
+ - initialization of a variable with static storage duration requiring
124
+ dynamic initialization ([[basic.start.dynamic]], [[stmt.dcl]]) [^35];
125
+ or
126
+ - waiting for the completion of the initialization of a variable with
127
+ static storage duration ([[stmt.dcl]]).
128
+
129
+ A signal handler invocation has undefined behavior if it includes an
130
+ evaluation that is not signal-safe.
131
+
132
+ The function `signal` is signal-safe if it is invoked with the first
133
+ argument equal to the signal number corresponding to the signal that
134
+ caused the invocation of the handler.
135
+
136
+ ISO C 7.14.
137
 
138
  <!-- Link reference definitions -->
139
+ [alg.c.library]: algorithms.md#alg.c.library
140
  [alloc.errors]: #alloc.errors
141
  [atomics]: atomics.md#atomics
142
  [bad.alloc]: #bad.alloc
143
  [bad.cast]: #bad.cast
144
  [bad.exception]: #bad.exception
145
  [bad.typeid]: #bad.typeid
146
  [basic.align]: basic.md#basic.align
147
+ [basic.def.odr]: basic.md#basic.def.odr
148
  [basic.fundamental]: basic.md#basic.fundamental
149
+ [basic.life]: basic.md#basic.life
150
  [basic.start]: basic.md#basic.start
151
+ [basic.start.dynamic]: basic.md#basic.start.dynamic
152
  [basic.start.term]: basic.md#basic.start.term
153
  [basic.stc.dynamic]: basic.md#basic.stc.dynamic
154
  [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
155
  [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
156
  [basic.stc.dynamic.safety]: basic.md#basic.stc.dynamic.safety
157
+ [c.locales]: localization.md#c.locales
158
+ [c.malloc]: utilities.md#c.malloc
159
+ [c.math.abs]: numerics.md#c.math.abs
160
+ [c.math.rand]: numerics.md#c.math.rand
161
+ [c.mb.wcs]: strings.md#c.mb.wcs
162
+ [cfloat.syn]: #cfloat.syn
163
  [class]: class.md#class
164
  [class.free]: special.md#class.free
165
+ [climits.syn]: #climits.syn
166
  [complex]: numerics.md#complex
167
  [constraints]: library.md#constraints
168
  [conv.ptr]: conv.md#conv.ptr
169
+ [conv.qual]: conv.md#conv.qual
170
  [conv.rank]: conv.md#conv.rank
171
+ [csetjmp.syn]: #csetjmp.syn
172
+ [csignal.syn]: #csignal.syn
173
+ [cstdarg.syn]: #cstdarg.syn
174
+ [cstddef.syn]: #cstddef.syn
175
  [cstdint]: #cstdint
176
  [cstdint.syn]: #cstdint.syn
177
+ [cstdlib.syn]: #cstdlib.syn
178
  [dcl.init.list]: dcl.md#dcl.init.list
179
  [denorm.style]: #denorm.style
 
180
  [except.handle]: except.md#except.handle
181
  [except.nested]: #except.nested
182
  [except.special]: except.md#except.special
183
  [except.terminate]: except.md#except.terminate
184
+ [except.uncaught]: except.md#except.uncaught
 
185
  [exception]: #exception
186
+ [exception.syn]: #exception.syn
187
  [exception.terminate]: #exception.terminate
188
  [expr.add]: expr.md#expr.add
189
  [expr.delete]: expr.md#expr.delete
190
  [expr.dynamic.cast]: expr.md#expr.dynamic.cast
191
  [expr.new]: expr.md#expr.new
192
+ [expr.prim.lambda]: expr.md#expr.prim.lambda
193
  [expr.sizeof]: expr.md#expr.sizeof
194
  [expr.typeid]: expr.md#expr.typeid
195
+ [fp.style]: #fp.style
196
  [get.new.handler]: #get.new.handler
197
  [get.terminate]: #get.terminate
198
+ [hardware.interference]: #hardware.interference
199
+ [initializer_list.syn]: #initializer_list.syn
200
  [intro.memory]: intro.md#intro.memory
201
  [intro.multithread]: intro.md#intro.multithread
202
  [language.support]: #language.support
203
+ [library.c]: library.md#library.c
 
204
  [limits.syn]: #limits.syn
205
  [locale.codecvt]: localization.md#locale.codecvt
206
  [memory]: utilities.md#memory
207
  [multibyte.strings]: library.md#multibyte.strings
208
  [new.badlength]: #new.badlength
 
210
  [new.delete.array]: #new.delete.array
211
  [new.delete.dataraces]: #new.delete.dataraces
212
  [new.delete.placement]: #new.delete.placement
213
  [new.delete.single]: #new.delete.single
214
  [new.handler]: #new.handler
215
+ [new.syn]: #new.syn
216
  [nullablepointer.requirements]: library.md#nullablepointer.requirements
217
  [numeric.limits]: #numeric.limits
218
  [numeric.limits.members]: #numeric.limits.members
219
  [numeric.special]: #numeric.special
220
  [propagation]: #propagation
221
+ [ptr.launder]: #ptr.launder
222
  [res.on.data.races]: library.md#res.on.data.races
223
  [round.style]: #round.style
224
  [set.new.handler]: #set.new.handler
225
  [set.terminate]: #set.terminate
226
+ [stmt.dcl]: stmt.md#stmt.dcl
227
  [string.classes]: strings.md#string.classes
228
  [support.dynamic]: #support.dynamic
229
  [support.exception]: #support.exception
230
  [support.general]: #support.general
231
  [support.initlist]: #support.initlist
 
234
  [support.initlist.range]: #support.initlist.range
235
  [support.limits]: #support.limits
236
  [support.limits.general]: #support.limits.general
237
  [support.rtti]: #support.rtti
238
  [support.runtime]: #support.runtime
239
+ [support.signal]: #support.signal
240
  [support.start.term]: #support.start.term
241
  [support.types]: #support.types
242
+ [support.types.byteops]: #support.types.byteops
243
+ [support.types.layout]: #support.types.layout
244
+ [support.types.nullptr]: #support.types.nullptr
245
  [tab:lang.sup.lib.summary]: #tab:lang.sup.lib.summary
 
 
 
 
246
  [temp.dep.constexpr]: temp.md#temp.dep.constexpr
247
  [temp.dep.expr]: temp.md#temp.dep.expr
248
+ [temp.variadic]: temp.md#temp.variadic
249
  [terminate]: #terminate
250
  [terminate.handler]: #terminate.handler
251
  [type.info]: #type.info
252
+ [typeinfo.syn]: #typeinfo.syn
253
+ [uncaught.exceptions]: #uncaught.exceptions
254
 
255
  [^1]: Possible definitions include `0` and `0L`, but not `(void*)0`.
256
 
257
  [^2]: Note that `offsetof` is required to work as specified even if
258
  unary `operator&` is overloaded for any of the types involved.
 
273
 
274
  [^9]: Distinguishes types with bases other than 2 (e.g. BCD).
275
 
276
  [^10]: Equivalent to `FLT_EPSILON`, `DBL_EPSILON`, `LDBL_EPSILON`.
277
 
278
+ [^11]: Rounding error is described in LIA-1 Section 5.2.4 and Annex C
279
+ Rationale Section C.5.2.4 Rounding and rounding constants.
 
280
 
281
  [^12]: Equivalent to `FLT_MIN_EXP`, `DBL_MIN_EXP`, `LDBL_MIN_EXP`.
282
 
283
  [^13]: Equivalent to `FLT_MIN_10_EXP`, `DBL_MIN_10_EXP`,
284
  `LDBL_MIN_10_EXP`.
 
292
 
293
  [^17]: Required by LIA-1.
294
 
295
  [^18]: Required by LIA-1.
296
 
297
+ [^19]: See ISO/IEC/IEEE 60559.
298
 
299
  [^20]: Required by LIA-1.
300
 
301
  [^21]: Required by LIA-1.
302
 
303
  [^22]: Required by LIA-1.
304
 
305
  [^23]: Required by LIA-1.
306
 
307
+ [^24]: ISO/IEC/IEEE 60559:2011 is the same as IEEE 754-2008.
 
308
 
309
  [^25]: Required by LIA-1.
310
 
311
  [^26]: Required by LIA-1.
312
 
313
  [^27]: Required by LIA-1.
314
 
315
+ [^28]: Refer to ISO/IEC/IEEE 60559. Required by LIA-1.
316
 
317
  [^29]: Equivalent to `FLT_ROUNDS`. Required by LIA-1.
318
 
319
  [^30]: A function is called for every time it is registered.
320
 
321
  [^31]: Objects with automatic storage duration are all destroyed in a
322
+ program whose `main` function ([[basic.start.main]]) contains no
323
+ automatic objects and executes the call to `exit()`. Control can be
324
+ transferred directly to such a `main` function by throwing an
325
+ exception that is caught in `main`.
326
 
327
  [^32]: The macros `EXIT_FAILURE` and `EXIT_SUCCESS` are defined in
328
  `<cstdlib>`.
329
 
330
+ [^33]: It is not the direct responsibility of `operator new[]` or
331
+ `operator delete[]` to note the repetition count or element size of
332
+ the array. Those operations are performed elsewhere in the array
333
+ `new` and `delete` expressions. The array `new` expression, may,
334
+ however, increase the `size` argument to `operator new[]` to obtain
335
+ space to store supplemental information.
 
336
 
337
  [^34]: Note that `va_start` is required to work as specified even if
338
  unary `operator&` is overloaded for the type of `parmN`.
339
 
340
+ [^35]: Such initialization might occur because it is the first odr-use (
341
+ [[basic.def.odr]]) of that variable.