From Jason Turner

[basic.contract.handler]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmp9tocu_12/{from.md → to.md} +413 -0
tmp/tmp9tocu_12/{from.md → to.md} RENAMED
@@ -0,0 +1,413 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ### Contract-violation handler <a id="basic.contract.handler">[[basic.contract.handler]]</a>
2
+
3
+ The *contract-violation handler* of a program is a function named
4
+ `::handle_contract_violation`. The contract-violation handler shall have
5
+ a single parameter of type “lvalue reference to `const`
6
+ `std::contracts::contract_violation`” and shall return `void`. The
7
+ contract-violation handler may have a non-throwing exception
8
+ specification. The implementation shall provide a definition of the
9
+ contract-violation handler, called the
10
+ *default contract-violation handler*.
11
+
12
+ [*Note 1*: No declaration for the default contract-violation handler is
13
+ provided by any standard library header. — *end note*]
14
+
15
+ *Recommended practice:* The default contract-violation handler should
16
+ produce diagnostic output that suitably formats the most relevant
17
+ contents of the `std::contracts::contract_violation` object,
18
+ rate-limited for potentially repeated violations of observed contract
19
+ assertions, and then return normally.
20
+
21
+ It is *implementation-defined* whether the contract-violation handler is
22
+ replaceable [[term.replaceable.function]]. If the contract-violation
23
+ handler is not replaceable, a declaration of a replacement function for
24
+ the contract-violation handler is ill-formed, no diagnostic required.
25
+
26
+ <!-- Link reference definitions -->
27
+ [allocator.members]: mem.md#allocator.members
28
+ [atomics]: thread.md#atomics
29
+ [atomics.flag]: thread.md#atomics.flag
30
+ [atomics.lockfree]: thread.md#atomics.lockfree
31
+ [atomics.order]: thread.md#atomics.order
32
+ [bad.alloc]: support.md#bad.alloc
33
+ [basic]: #basic
34
+ [basic.align]: #basic.align
35
+ [basic.compound]: #basic.compound
36
+ [basic.contract]: #basic.contract
37
+ [basic.contract.eval]: #basic.contract.eval
38
+ [basic.contract.general]: #basic.contract.general
39
+ [basic.contract.handler]: #basic.contract.handler
40
+ [basic.def]: #basic.def
41
+ [basic.def.odr]: #basic.def.odr
42
+ [basic.exec]: #basic.exec
43
+ [basic.extended.fp]: #basic.extended.fp
44
+ [basic.fundamental]: #basic.fundamental
45
+ [basic.fundamental.width]: #basic.fundamental.width
46
+ [basic.indet]: #basic.indet
47
+ [basic.life]: #basic.life
48
+ [basic.link]: #basic.link
49
+ [basic.lookup]: #basic.lookup
50
+ [basic.lookup.argdep]: #basic.lookup.argdep
51
+ [basic.lookup.elab]: #basic.lookup.elab
52
+ [basic.lookup.general]: #basic.lookup.general
53
+ [basic.lookup.qual]: #basic.lookup.qual
54
+ [basic.lookup.qual.general]: #basic.lookup.qual.general
55
+ [basic.lookup.udir]: #basic.lookup.udir
56
+ [basic.lookup.unqual]: #basic.lookup.unqual
57
+ [basic.lval]: expr.md#basic.lval
58
+ [basic.memobj]: #basic.memobj
59
+ [basic.namespace]: dcl.md#basic.namespace
60
+ [basic.namespace.general]: dcl.md#basic.namespace.general
61
+ [basic.pre]: #basic.pre
62
+ [basic.scope]: #basic.scope
63
+ [basic.scope.block]: #basic.scope.block
64
+ [basic.scope.class]: #basic.scope.class
65
+ [basic.scope.contract]: #basic.scope.contract
66
+ [basic.scope.enum]: #basic.scope.enum
67
+ [basic.scope.lambda]: #basic.scope.lambda
68
+ [basic.scope.namespace]: #basic.scope.namespace
69
+ [basic.scope.param]: #basic.scope.param
70
+ [basic.scope.pdecl]: #basic.scope.pdecl
71
+ [basic.scope.scope]: #basic.scope.scope
72
+ [basic.scope.temp]: #basic.scope.temp
73
+ [basic.splice]: #basic.splice
74
+ [basic.start]: #basic.start
75
+ [basic.start.dynamic]: #basic.start.dynamic
76
+ [basic.start.main]: #basic.start.main
77
+ [basic.start.static]: #basic.start.static
78
+ [basic.start.term]: #basic.start.term
79
+ [basic.stc]: #basic.stc
80
+ [basic.stc.auto]: #basic.stc.auto
81
+ [basic.stc.dynamic]: #basic.stc.dynamic
82
+ [basic.stc.dynamic.allocation]: #basic.stc.dynamic.allocation
83
+ [basic.stc.dynamic.deallocation]: #basic.stc.dynamic.deallocation
84
+ [basic.stc.dynamic.general]: #basic.stc.dynamic.general
85
+ [basic.stc.general]: #basic.stc.general
86
+ [basic.stc.static]: #basic.stc.static
87
+ [basic.stc.thread]: #basic.stc.thread
88
+ [basic.type.qualifier]: #basic.type.qualifier
89
+ [basic.type.qualifier.rel]: #basic.type.qualifier.rel
90
+ [basic.types]: #basic.types
91
+ [basic.types.general]: #basic.types.general
92
+ [bit.cast]: utilities.md#bit.cast
93
+ [c.malloc]: mem.md#c.malloc
94
+ [class]: class.md#class
95
+ [class.abstract]: class.md#class.abstract
96
+ [class.access]: class.md#class.access
97
+ [class.access.base]: class.md#class.access.base
98
+ [class.base.init]: class.md#class.base.init
99
+ [class.bit]: class.md#class.bit
100
+ [class.cdtor]: class.md#class.cdtor
101
+ [class.conv.fct]: class.md#class.conv.fct
102
+ [class.copy.assign]: class.md#class.copy.assign
103
+ [class.copy.ctor]: class.md#class.copy.ctor
104
+ [class.copy.elision]: class.md#class.copy.elision
105
+ [class.default.ctor]: class.md#class.default.ctor
106
+ [class.derived]: class.md#class.derived
107
+ [class.derived.general]: class.md#class.derived.general
108
+ [class.dtor]: class.md#class.dtor
109
+ [class.free]: class.md#class.free
110
+ [class.friend]: class.md#class.friend
111
+ [class.mem]: class.md#class.mem
112
+ [class.mem.general]: class.md#class.mem.general
113
+ [class.member.lookup]: #class.member.lookup
114
+ [class.name]: class.md#class.name
115
+ [class.pre]: class.md#class.pre
116
+ [class.prop]: class.md#class.prop
117
+ [class.qual]: #class.qual
118
+ [class.spaceship]: class.md#class.spaceship
119
+ [class.static]: class.md#class.static
120
+ [class.static.data]: class.md#class.static.data
121
+ [class.temporary]: #class.temporary
122
+ [class.union]: class.md#class.union
123
+ [class.union.anon]: class.md#class.union.anon
124
+ [class.virtual]: class.md#class.virtual
125
+ [conv]: expr.md#conv
126
+ [conv.array]: expr.md#conv.array
127
+ [conv.func]: expr.md#conv.func
128
+ [conv.integral]: expr.md#conv.integral
129
+ [conv.lval]: expr.md#conv.lval
130
+ [conv.mem]: expr.md#conv.mem
131
+ [conv.prom]: expr.md#conv.prom
132
+ [conv.ptr]: expr.md#conv.ptr
133
+ [conv.qual]: expr.md#conv.qual
134
+ [conv.rank]: #conv.rank
135
+ [conv.rval]: expr.md#conv.rval
136
+ [cpp.predefined]: cpp.md#cpp.predefined
137
+ [csetjmp.syn]: support.md#csetjmp.syn
138
+ [cstdarg.syn]: support.md#cstdarg.syn
139
+ [cstddef.syn]: support.md#cstddef.syn
140
+ [cstring.syn]: strings.md#cstring.syn
141
+ [dcl.align]: dcl.md#dcl.align
142
+ [dcl.array]: dcl.md#dcl.array
143
+ [dcl.attr]: dcl.md#dcl.attr
144
+ [dcl.attr.grammar]: dcl.md#dcl.attr.grammar
145
+ [dcl.attr.indet]: dcl.md#dcl.attr.indet
146
+ [dcl.attr.nouniqueaddr]: dcl.md#dcl.attr.nouniqueaddr
147
+ [dcl.constexpr]: dcl.md#dcl.constexpr
148
+ [dcl.contract.func]: dcl.md#dcl.contract.func
149
+ [dcl.contract.res]: dcl.md#dcl.contract.res
150
+ [dcl.decl]: dcl.md#dcl.decl
151
+ [dcl.enum]: dcl.md#dcl.enum
152
+ [dcl.fct]: dcl.md#dcl.fct
153
+ [dcl.fct.def]: dcl.md#dcl.fct.def
154
+ [dcl.fct.def.coroutine]: dcl.md#dcl.fct.def.coroutine
155
+ [dcl.fct.def.general]: dcl.md#dcl.fct.def.general
156
+ [dcl.fct.default]: dcl.md#dcl.fct.default
157
+ [dcl.init]: dcl.md#dcl.init
158
+ [dcl.init.aggr]: dcl.md#dcl.init.aggr
159
+ [dcl.init.general]: dcl.md#dcl.init.general
160
+ [dcl.init.list]: dcl.md#dcl.init.list
161
+ [dcl.init.ref]: dcl.md#dcl.init.ref
162
+ [dcl.link]: dcl.md#dcl.link
163
+ [dcl.meaning]: dcl.md#dcl.meaning
164
+ [dcl.meaning.general]: dcl.md#dcl.meaning.general
165
+ [dcl.mptr]: dcl.md#dcl.mptr
166
+ [dcl.name]: dcl.md#dcl.name
167
+ [dcl.pre]: dcl.md#dcl.pre
168
+ [dcl.ptr]: dcl.md#dcl.ptr
169
+ [dcl.ref]: dcl.md#dcl.ref
170
+ [dcl.spec]: dcl.md#dcl.spec
171
+ [dcl.spec.auto]: dcl.md#dcl.spec.auto
172
+ [dcl.stc]: dcl.md#dcl.stc
173
+ [dcl.struct.bind]: dcl.md#dcl.struct.bind
174
+ [dcl.type.decltype]: dcl.md#dcl.type.decltype
175
+ [dcl.type.elab]: dcl.md#dcl.type.elab
176
+ [dcl.typedef]: dcl.md#dcl.typedef
177
+ [defns.access]: intro.md#defns.access
178
+ [defns.block]: intro.md#defns.block
179
+ [depr.local]: future.md#depr.local
180
+ [depr.static.constexpr]: future.md#depr.static.constexpr
181
+ [diff.cpp11.basic]: compatibility.md#diff.cpp11.basic
182
+ [enum.udecl]: dcl.md#enum.udecl
183
+ [except.handle]: except.md#except.handle
184
+ [except.pre]: except.md#except.pre
185
+ [except.spec]: except.md#except.spec
186
+ [except.terminate]: except.md#except.terminate
187
+ [except.throw]: except.md#except.throw
188
+ [expr.add]: expr.md#expr.add
189
+ [expr.alignof]: expr.md#expr.alignof
190
+ [expr.arith.conv]: expr.md#expr.arith.conv
191
+ [expr.assign]: expr.md#expr.assign
192
+ [expr.await]: expr.md#expr.await
193
+ [expr.call]: expr.md#expr.call
194
+ [expr.cast]: expr.md#expr.cast
195
+ [expr.comma]: expr.md#expr.comma
196
+ [expr.cond]: expr.md#expr.cond
197
+ [expr.const]: expr.md#expr.const
198
+ [expr.const.cast]: expr.md#expr.const.cast
199
+ [expr.context]: expr.md#expr.context
200
+ [expr.delete]: expr.md#expr.delete
201
+ [expr.dynamic.cast]: expr.md#expr.dynamic.cast
202
+ [expr.eq]: expr.md#expr.eq
203
+ [expr.mptr.oper]: expr.md#expr.mptr.oper
204
+ [expr.new]: expr.md#expr.new
205
+ [expr.pre]: expr.md#expr.pre
206
+ [expr.prim.id]: expr.md#expr.prim.id
207
+ [expr.prim.id.general]: expr.md#expr.prim.id.general
208
+ [expr.prim.id.qual]: expr.md#expr.prim.id.qual
209
+ [expr.prim.id.unqual]: expr.md#expr.prim.id.unqual
210
+ [expr.prim.lambda]: expr.md#expr.prim.lambda
211
+ [expr.prim.lambda.capture]: expr.md#expr.prim.lambda.capture
212
+ [expr.prim.lambda.closure]: expr.md#expr.prim.lambda.closure
213
+ [expr.prim.splice]: expr.md#expr.prim.splice
214
+ [expr.prim.this]: expr.md#expr.prim.this
215
+ [expr.prop]: expr.md#expr.prop
216
+ [expr.ref]: expr.md#expr.ref
217
+ [expr.reflect]: expr.md#expr.reflect
218
+ [expr.reinterpret.cast]: expr.md#expr.reinterpret.cast
219
+ [expr.rel]: expr.md#expr.rel
220
+ [expr.sizeof]: expr.md#expr.sizeof
221
+ [expr.static.cast]: expr.md#expr.static.cast
222
+ [expr.sub]: expr.md#expr.sub
223
+ [expr.throw]: expr.md#expr.throw
224
+ [expr.type.conv]: expr.md#expr.type.conv
225
+ [expr.typeid]: expr.md#expr.typeid
226
+ [expr.unary.noexcept]: expr.md#expr.unary.noexcept
227
+ [expr.unary.op]: expr.md#expr.unary.op
228
+ [get.new.handler]: support.md#get.new.handler
229
+ [headers]: library.md#headers
230
+ [intro.abstract]: intro.md#intro.abstract
231
+ [intro.compliance]: intro.md#intro.compliance
232
+ [intro.execution]: #intro.execution
233
+ [intro.memory]: #intro.memory
234
+ [intro.multithread]: #intro.multithread
235
+ [intro.multithread.general]: #intro.multithread.general
236
+ [intro.object]: #intro.object
237
+ [intro.progress]: #intro.progress
238
+ [intro.races]: #intro.races
239
+ [lex.charset]: lex.md#lex.charset
240
+ [lex.fcon]: lex.md#lex.fcon
241
+ [lex.name]: lex.md#lex.name
242
+ [lex.phases]: lex.md#lex.phases
243
+ [lex.string]: lex.md#lex.string
244
+ [mem.res.public]: mem.md#mem.res.public
245
+ [meta.define.static]: meta.md#meta.define.static
246
+ [meta.reflection.operators]: meta.md#meta.reflection.operators
247
+ [meta.syn]: meta.md#meta.syn
248
+ [module.context]: module.md#module.context
249
+ [module.global.frag]: module.md#module.global.frag
250
+ [module.interface]: module.md#module.interface
251
+ [module.reach]: module.md#module.reach
252
+ [module.unit]: module.md#module.unit
253
+ [multibyte.strings]: library.md#multibyte.strings
254
+ [namespace.alias]: dcl.md#namespace.alias
255
+ [namespace.def]: dcl.md#namespace.def
256
+ [namespace.qual]: #namespace.qual
257
+ [namespace.udecl]: dcl.md#namespace.udecl
258
+ [namespace.udir]: dcl.md#namespace.udir
259
+ [namespace.unnamed]: dcl.md#namespace.unnamed
260
+ [new.delete.array]: support.md#new.delete.array
261
+ [new.delete.placement]: support.md#new.delete.placement
262
+ [new.delete.single]: support.md#new.delete.single
263
+ [new.handler]: support.md#new.handler
264
+ [new.syn]: support.md#new.syn
265
+ [obj.lifetime]: mem.md#obj.lifetime
266
+ [over]: over.md#over
267
+ [over.literal]: over.md#over.literal
268
+ [over.match]: over.md#over.match
269
+ [over.match.funcs]: over.md#over.match.funcs
270
+ [over.oper]: over.md#over.oper
271
+ [over.over]: over.md#over.over
272
+ [ptr.align]: mem.md#ptr.align
273
+ [ptr.launder]: support.md#ptr.launder
274
+ [special]: class.md#special
275
+ [std.modules]: library.md#std.modules
276
+ [stdfloat.syn]: support.md#stdfloat.syn
277
+ [stmt.block]: stmt.md#stmt.block
278
+ [stmt.contract.assert]: stmt.md#stmt.contract.assert
279
+ [stmt.dcl]: stmt.md#stmt.dcl
280
+ [stmt.expand]: stmt.md#stmt.expand
281
+ [stmt.expr]: stmt.md#stmt.expr
282
+ [stmt.if]: stmt.md#stmt.if
283
+ [stmt.iter]: stmt.md#stmt.iter
284
+ [stmt.iter.general]: stmt.md#stmt.iter.general
285
+ [stmt.pre]: stmt.md#stmt.pre
286
+ [stmt.ranged]: stmt.md#stmt.ranged
287
+ [stmt.return]: stmt.md#stmt.return
288
+ [stmt.select]: stmt.md#stmt.select
289
+ [support.contract.violation]: support.md#support.contract.violation
290
+ [support.dynamic]: support.md#support.dynamic
291
+ [support.runtime]: support.md#support.runtime
292
+ [support.start.term]: support.md#support.start.term
293
+ [support.types]: support.md#support.types
294
+ [temp.alias]: temp.md#temp.alias
295
+ [temp.concept]: temp.md#temp.concept
296
+ [temp.deduct.guide]: temp.md#temp.deduct.guide
297
+ [temp.dep]: temp.md#temp.dep
298
+ [temp.dep.candidate]: temp.md#temp.dep.candidate
299
+ [temp.dep.constexpr]: temp.md#temp.dep.constexpr
300
+ [temp.dep.splice]: temp.md#temp.dep.splice
301
+ [temp.dep.type]: temp.md#temp.dep.type
302
+ [temp.expl.spec]: temp.md#temp.expl.spec
303
+ [temp.explicit]: temp.md#temp.explicit
304
+ [temp.friend]: temp.md#temp.friend
305
+ [temp.local]: temp.md#temp.local
306
+ [temp.names]: temp.md#temp.names
307
+ [temp.over]: temp.md#temp.over
308
+ [temp.over.link]: temp.md#temp.over.link
309
+ [temp.param]: temp.md#temp.param
310
+ [temp.point]: temp.md#temp.point
311
+ [temp.pre]: temp.md#temp.pre
312
+ [temp.res]: temp.md#temp.res
313
+ [temp.spec]: temp.md#temp.spec
314
+ [temp.spec.partial]: temp.md#temp.spec.partial
315
+ [temp.spec.partial.match]: temp.md#temp.spec.partial.match
316
+ [temp.type]: temp.md#temp.type
317
+ [term.implicit.lifetime.type]: #term.implicit.lifetime.type
318
+ [term.incomplete.type]: #term.incomplete.type
319
+ [term.odr.use]: #term.odr.use
320
+ [term.replaceable.function]: dcl.md#term.replaceable.function
321
+ [term.unevaluated.operand]: expr.md#term.unevaluated.operand
322
+ [thread]: thread.md#thread
323
+ [thread.jthread.class]: thread.md#thread.jthread.class
324
+ [thread.thread.class]: thread.md#thread.thread.class
325
+ [thread.thread.this]: thread.md#thread.thread.this
326
+ [thread.threads]: thread.md#thread.threads
327
+
328
+ [^1]: Appearing inside the brace-enclosed *declaration-seq* in a
329
+ *linkage-specification* does not affect whether a declaration is a
330
+ definition.
331
+
332
+ [^2]: An implementation is not required to call allocation and
333
+ deallocation functions from constructors or destructors; however,
334
+ this is a permissible implementation technique.
335
+
336
+ [^3]: An implicit object parameter [[over.match.funcs]] is not part of
337
+ the parameter-type-list.
338
+
339
+ [^4]: Lookups in which function names are ignored include names
340
+ appearing in a *nested-name-specifier*, an
341
+ *elaborated-type-specifier*, or a *base-specifier*.
342
+
343
+ [^5]: The number of bits in a byte is reported by the macro `CHAR_BIT`
344
+ in the header `<climits>`.
345
+
346
+ [^6]: Under the “as-if” rule an implementation is allowed to store two
347
+ objects at the same machine address or not store an object at all if
348
+ the program cannot observe the difference [[intro.execution]].
349
+
350
+ [^7]: For example, before the dynamic initialization of an object with
351
+ static storage duration [[basic.start.dynamic]].
352
+
353
+ [^8]: That is, an object for which a destructor will be called
354
+ implicitly—upon exit from the block for an object with automatic
355
+ storage duration, upon exit from the thread for an object with
356
+ thread storage duration, or upon exit from the program for an object
357
+ with static storage duration.
358
+
359
+ [^9]: The intent is to have `operator new()` implementable by calling
360
+ `std::malloc()` or `std::calloc()`, so the rules are substantially
361
+ the same. C++ differs from C in requiring a zero request to return a
362
+ non-null pointer.
363
+
364
+ [^10]: The global `operator delete(void*, std::size_t)` precludes use of
365
+ an allocation function `void operator new(std::size_t, std::size_t)`
366
+ as a placement allocation function [[diff.cpp11.basic]].
367
+
368
+ [^11]: The same rules apply to initialization of an `initializer_list`
369
+ object [[dcl.init.list]] with its underlying temporary array.
370
+
371
+ [^12]: By using, for example, the library functions [[headers]]
372
+ `std::memcpy` or `std::memmove`.
373
+
374
+ [^13]: By using, for example, the library functions [[headers]]
375
+ `std::memcpy` or `std::memmove`.
376
+
377
+ [^14]: The intent is that the memory model of C++ is compatible with
378
+ that of the C programming language.
379
+
380
+ [^15]: The size and layout of an instance of an incompletely-defined
381
+ object type is unknown.
382
+
383
+ [^16]: This is also known as two’s complement representation.
384
+
385
+ [^17]: Static class members are objects or functions, and pointers to
386
+ them are ordinary pointers to objects or functions.
387
+
388
+ [^18]: For an object that is not within its lifetime, this is the first
389
+ byte in memory that it will occupy or used to occupy.
390
+
391
+ [^19]: Some implementations might define that copying such a pointer
392
+ value causes a system-generated runtime fault.
393
+
394
+ [^20]: The same representation and alignment requirements are meant to
395
+ imply interchangeability as arguments to functions, return values
396
+ from functions, and non-static data members of unions.
397
+
398
+ [^21]: As specified in  [[class.temporary]], after a full-expression is
399
+ evaluated, a sequence of zero or more invocations of destructor
400
+ functions for temporary objects takes place, usually in reverse
401
+ order of the construction of each temporary object.
402
+
403
+ [^22]: In other words, function executions do not interleave with each
404
+ other.
405
+
406
+ [^23]: An object with automatic or thread storage duration [[basic.stc]]
407
+ is associated with one specific thread, and can be accessed by a
408
+ different thread only indirectly through a pointer or reference
409
+ [[basic.compound]].
410
+
411
+ [^24]: A non-block variable with static storage duration having
412
+ initialization with side effects is initialized in this case, even
413
+ if it is not itself odr-used [[term.odr.use]], [[basic.stc.static]].