From Jason Turner

[dcl.attr.nouniqueaddr]

Diff to HTML by rtfpessoa

Files changed (1) hide show
  1. tmp/tmptu1c6iq8/{from.md → to.md} +5 -282
tmp/tmptu1c6iq8/{from.md → to.md} RENAMED
@@ -8,10 +8,15 @@ appertain to a non-static data member other than a bit-field.
8
  [*Note 1*: The non-static data member can share the address of another
9
  non-static data member or that of a base class, and any padding that
10
  would normally be inserted at the end of the object can be reused as
11
  storage for other members. — *end note*]
12
 
 
 
 
 
 
13
  [*Example 1*:
14
 
15
  ``` cpp
16
  template<typename Key, typename Value,
17
  typename Hash, typename Pred, typename Allocator>
@@ -29,287 +34,5 @@ public:
29
  Here, `hasher`, `pred`, and `alloc` could have the same address as
30
  `buckets` if their respective types are all empty.
31
 
32
  — *end example*]
33
 
34
- <!-- Link reference definitions -->
35
- [basic.align]: basic.md#basic.align
36
- [basic.compound]: basic.md#basic.compound
37
- [basic.def]: basic.md#basic.def
38
- [basic.def.odr]: basic.md#basic.def.odr
39
- [basic.fundamental]: basic.md#basic.fundamental
40
- [basic.life]: basic.md#basic.life
41
- [basic.link]: basic.md#basic.link
42
- [basic.lookup]: basic.md#basic.lookup
43
- [basic.lookup.argdep]: basic.md#basic.lookup.argdep
44
- [basic.lookup.elab]: basic.md#basic.lookup.elab
45
- [basic.lookup.general]: basic.md#basic.lookup.general
46
- [basic.lookup.qual]: basic.md#basic.lookup.qual
47
- [basic.lookup.udir]: basic.md#basic.lookup.udir
48
- [basic.lookup.unqual]: basic.md#basic.lookup.unqual
49
- [basic.namespace]: #basic.namespace
50
- [basic.namespace.general]: #basic.namespace.general
51
- [basic.scope.namespace]: basic.md#basic.scope.namespace
52
- [basic.scope.scope]: basic.md#basic.scope.scope
53
- [basic.start]: basic.md#basic.start
54
- [basic.start.dynamic]: basic.md#basic.start.dynamic
55
- [basic.start.static]: basic.md#basic.start.static
56
- [basic.stc]: basic.md#basic.stc
57
- [basic.stc.auto]: basic.md#basic.stc.auto
58
- [basic.stc.dynamic]: basic.md#basic.stc.dynamic
59
- [basic.stc.dynamic.allocation]: basic.md#basic.stc.dynamic.allocation
60
- [basic.stc.dynamic.deallocation]: basic.md#basic.stc.dynamic.deallocation
61
- [basic.stc.static]: basic.md#basic.stc.static
62
- [basic.stc.thread]: basic.md#basic.stc.thread
63
- [basic.type.qualifier]: basic.md#basic.type.qualifier
64
- [class]: class.md#class
65
- [class.access]: class.md#class.access
66
- [class.access.base]: class.md#class.access.base
67
- [class.base.init]: class.md#class.base.init
68
- [class.bit]: class.md#class.bit
69
- [class.conv.ctor]: class.md#class.conv.ctor
70
- [class.conv.fct]: class.md#class.conv.fct
71
- [class.copy.assign]: class.md#class.copy.assign
72
- [class.copy.ctor]: class.md#class.copy.ctor
73
- [class.copy.elision]: class.md#class.copy.elision
74
- [class.ctor]: class.md#class.ctor
75
- [class.default.ctor]: class.md#class.default.ctor
76
- [class.dtor]: class.md#class.dtor
77
- [class.expl.init]: class.md#class.expl.init
78
- [class.friend]: class.md#class.friend
79
- [class.inhctor.init]: class.md#class.inhctor.init
80
- [class.init]: class.md#class.init
81
- [class.mem]: class.md#class.mem
82
- [class.mem.general]: class.md#class.mem.general
83
- [class.member.lookup]: basic.md#class.member.lookup
84
- [class.mfct]: class.md#class.mfct
85
- [class.mi]: class.md#class.mi
86
- [class.name]: class.md#class.name
87
- [class.pre]: class.md#class.pre
88
- [class.qual]: basic.md#class.qual
89
- [class.static]: class.md#class.static
90
- [class.static.data]: class.md#class.static.data
91
- [class.temporary]: basic.md#class.temporary
92
- [class.union]: class.md#class.union
93
- [class.union.anon]: class.md#class.union.anon
94
- [class.virtual]: class.md#class.virtual
95
- [conv]: expr.md#conv
96
- [conv.array]: expr.md#conv.array
97
- [conv.func]: expr.md#conv.func
98
- [conv.general]: expr.md#conv.general
99
- [conv.integral]: expr.md#conv.integral
100
- [conv.lval]: expr.md#conv.lval
101
- [conv.prom]: expr.md#conv.prom
102
- [conv.ptr]: expr.md#conv.ptr
103
- [conv.qual]: expr.md#conv.qual
104
- [conv.rval]: expr.md#conv.rval
105
- [coroutine.handle]: support.md#coroutine.handle
106
- [coroutine.handle.resumption]: support.md#coroutine.handle.resumption
107
- [dcl.align]: #dcl.align
108
- [dcl.ambig.res]: #dcl.ambig.res
109
- [dcl.array]: #dcl.array
110
- [dcl.asm]: #dcl.asm
111
- [dcl.attr]: #dcl.attr
112
- [dcl.attr.assume]: #dcl.attr.assume
113
- [dcl.attr.depend]: #dcl.attr.depend
114
- [dcl.attr.deprecated]: #dcl.attr.deprecated
115
- [dcl.attr.fallthrough]: #dcl.attr.fallthrough
116
- [dcl.attr.grammar]: #dcl.attr.grammar
117
- [dcl.attr.likelihood]: #dcl.attr.likelihood
118
- [dcl.attr.nodiscard]: #dcl.attr.nodiscard
119
- [dcl.attr.noreturn]: #dcl.attr.noreturn
120
- [dcl.attr.nouniqueaddr]: #dcl.attr.nouniqueaddr
121
- [dcl.attr.unused]: #dcl.attr.unused
122
- [dcl.constexpr]: #dcl.constexpr
123
- [dcl.constinit]: #dcl.constinit
124
- [dcl.dcl]: #dcl.dcl
125
- [dcl.decl]: #dcl.decl
126
- [dcl.decl.general]: #dcl.decl.general
127
- [dcl.enum]: #dcl.enum
128
- [dcl.fct]: #dcl.fct
129
- [dcl.fct.def]: #dcl.fct.def
130
- [dcl.fct.def.coroutine]: #dcl.fct.def.coroutine
131
- [dcl.fct.def.default]: #dcl.fct.def.default
132
- [dcl.fct.def.delete]: #dcl.fct.def.delete
133
- [dcl.fct.def.general]: #dcl.fct.def.general
134
- [dcl.fct.default]: #dcl.fct.default
135
- [dcl.fct.spec]: #dcl.fct.spec
136
- [dcl.friend]: #dcl.friend
137
- [dcl.init]: #dcl.init
138
- [dcl.init.aggr]: #dcl.init.aggr
139
- [dcl.init.general]: #dcl.init.general
140
- [dcl.init.list]: #dcl.init.list
141
- [dcl.init.ref]: #dcl.init.ref
142
- [dcl.init.string]: #dcl.init.string
143
- [dcl.inline]: #dcl.inline
144
- [dcl.link]: #dcl.link
145
- [dcl.meaning]: #dcl.meaning
146
- [dcl.meaning.general]: #dcl.meaning.general
147
- [dcl.mptr]: #dcl.mptr
148
- [dcl.name]: #dcl.name
149
- [dcl.pre]: #dcl.pre
150
- [dcl.ptr]: #dcl.ptr
151
- [dcl.ref]: #dcl.ref
152
- [dcl.spec]: #dcl.spec
153
- [dcl.spec.auto]: #dcl.spec.auto
154
- [dcl.spec.auto.general]: #dcl.spec.auto.general
155
- [dcl.spec.general]: #dcl.spec.general
156
- [dcl.stc]: #dcl.stc
157
- [dcl.struct.bind]: #dcl.struct.bind
158
- [dcl.type]: #dcl.type
159
- [dcl.type.auto.deduct]: #dcl.type.auto.deduct
160
- [dcl.type.class.deduct]: #dcl.type.class.deduct
161
- [dcl.type.cv]: #dcl.type.cv
162
- [dcl.type.decltype]: #dcl.type.decltype
163
- [dcl.type.elab]: #dcl.type.elab
164
- [dcl.type.general]: #dcl.type.general
165
- [dcl.type.simple]: #dcl.type.simple
166
- [dcl.typedef]: #dcl.typedef
167
- [depr.volatile.type]: future.md#depr.volatile.type
168
- [enum]: #enum
169
- [enum.udecl]: #enum.udecl
170
- [except.ctor]: except.md#except.ctor
171
- [except.handle]: except.md#except.handle
172
- [except.pre]: except.md#except.pre
173
- [except.spec]: except.md#except.spec
174
- [except.throw]: except.md#except.throw
175
- [expr.alignof]: expr.md#expr.alignof
176
- [expr.ass]: expr.md#expr.ass
177
- [expr.await]: expr.md#expr.await
178
- [expr.call]: expr.md#expr.call
179
- [expr.cast]: expr.md#expr.cast
180
- [expr.comma]: expr.md#expr.comma
181
- [expr.const]: expr.md#expr.const
182
- [expr.const.cast]: expr.md#expr.const.cast
183
- [expr.mptr.oper]: expr.md#expr.mptr.oper
184
- [expr.new]: expr.md#expr.new
185
- [expr.post.incr]: expr.md#expr.post.incr
186
- [expr.pre.incr]: expr.md#expr.pre.incr
187
- [expr.prim.id.unqual]: expr.md#expr.prim.id.unqual
188
- [expr.prim.lambda]: expr.md#expr.prim.lambda
189
- [expr.prim.this]: expr.md#expr.prim.this
190
- [expr.prop]: expr.md#expr.prop
191
- [expr.ref]: expr.md#expr.ref
192
- [expr.static.cast]: expr.md#expr.static.cast
193
- [expr.sub]: expr.md#expr.sub
194
- [expr.type.conv]: expr.md#expr.type.conv
195
- [expr.unary]: expr.md#expr.unary
196
- [expr.unary.op]: expr.md#expr.unary.op
197
- [expr.yield]: expr.md#expr.yield
198
- [initializer.list.syn]: support.md#initializer.list.syn
199
- [intro.abstract]: intro.md#intro.abstract
200
- [intro.compliance]: intro.md#intro.compliance
201
- [intro.execution]: basic.md#intro.execution
202
- [intro.multithread]: basic.md#intro.multithread
203
- [intro.object]: basic.md#intro.object
204
- [lex.digraph]: lex.md#lex.digraph
205
- [lex.key]: lex.md#lex.key
206
- [lex.name]: lex.md#lex.name
207
- [lex.string]: lex.md#lex.string
208
- [module.interface]: module.md#module.interface
209
- [module.reach]: module.md#module.reach
210
- [module.unit]: module.md#module.unit
211
- [namespace.alias]: #namespace.alias
212
- [namespace.def]: #namespace.def
213
- [namespace.def.general]: #namespace.def.general
214
- [namespace.qual]: basic.md#namespace.qual
215
- [namespace.udecl]: #namespace.udecl
216
- [namespace.udir]: #namespace.udir
217
- [namespace.unnamed]: #namespace.unnamed
218
- [over]: over.md#over
219
- [over.binary]: over.md#over.binary
220
- [over.literal]: over.md#over.literal
221
- [over.match]: over.md#over.match
222
- [over.match.best]: over.md#over.match.best
223
- [over.match.class.deduct]: over.md#over.match.class.deduct
224
- [over.match.conv]: over.md#over.match.conv
225
- [over.match.copy]: over.md#over.match.copy
226
- [over.match.ctor]: over.md#over.match.ctor
227
- [over.match.funcs]: over.md#over.match.funcs
228
- [over.match.list]: over.md#over.match.list
229
- [over.match.ref]: over.md#over.match.ref
230
- [over.match.viable]: over.md#over.match.viable
231
- [over.oper]: over.md#over.oper
232
- [over.sub]: over.md#over.sub
233
- [special]: class.md#special
234
- [std.modules]: library.md#std.modules
235
- [stmt.ambig]: stmt.md#stmt.ambig
236
- [stmt.dcl]: stmt.md#stmt.dcl
237
- [stmt.expr]: stmt.md#stmt.expr
238
- [stmt.if]: stmt.md#stmt.if
239
- [stmt.iter]: stmt.md#stmt.iter
240
- [stmt.return]: stmt.md#stmt.return
241
- [stmt.return.coroutine]: stmt.md#stmt.return.coroutine
242
- [stmt.select]: stmt.md#stmt.select
243
- [stmt.stmt]: stmt.md#stmt.stmt
244
- [stmt.switch]: stmt.md#stmt.switch
245
- [support.runtime]: support.md#support.runtime
246
- [temp.arg.type]: temp.md#temp.arg.type
247
- [temp.decls]: temp.md#temp.decls
248
- [temp.deduct]: temp.md#temp.deduct
249
- [temp.deduct.call]: temp.md#temp.deduct.call
250
- [temp.deduct.decl]: temp.md#temp.deduct.decl
251
- [temp.deduct.guide]: temp.md#temp.deduct.guide
252
- [temp.dep.type]: temp.md#temp.dep.type
253
- [temp.expl.spec]: temp.md#temp.expl.spec
254
- [temp.explicit]: temp.md#temp.explicit
255
- [temp.fct]: temp.md#temp.fct
256
- [temp.inst]: temp.md#temp.inst
257
- [temp.local]: temp.md#temp.local
258
- [temp.names]: temp.md#temp.names
259
- [temp.param]: temp.md#temp.param
260
- [temp.pre]: temp.md#temp.pre
261
- [temp.res]: temp.md#temp.res
262
- [temp.spec.partial]: temp.md#temp.spec.partial
263
- [temp.variadic]: temp.md#temp.variadic
264
- [term.odr.use]: basic.md#term.odr.use
265
- [term.padding.bits]: basic.md#term.padding.bits
266
- [term.scalar.type]: basic.md#term.scalar.type
267
- [term.unevaluated.operand]: expr.md#term.unevaluated.operand
268
-
269
- [^1]: There is no special provision for a *decl-specifier-seq* that
270
- lacks a *type-specifier* or that has a *type-specifier* that only
271
- specifies *cv-qualifier*s. The “implicit int” rule of C is no longer
272
- supported.
273
-
274
- [^2]: As indicated by syntax, cv-qualifiers are a significant component
275
- in function return types.
276
-
277
- [^3]: One can explicitly disambiguate the parse either by introducing a
278
- comma (so the ellipsis will be parsed as part of the
279
- *parameter-declaration-clause*) or by introducing a name for the
280
- parameter (so the ellipsis will be parsed as part of the
281
- *declarator-id*).
282
-
283
- [^4]: This means that default arguments cannot appear, for example, in
284
- declarations of pointers to functions, references to functions, or
285
- `typedef` declarations.
286
-
287
- [^5]: As specified in  [[conv.ptr]], converting an integer literal whose
288
- value is `0` to a pointer type results in a null pointer value.
289
-
290
- [^6]: The syntax provides for empty *braced-init-list*s, but nonetheless
291
- C++ does not have zero length arrays.
292
-
293
- [^7]: This requires a conversion function [[class.conv.fct]] returning a
294
- reference type.
295
-
296
- [^8]: Implementations are permitted to provide additional predefined
297
- variables with names that are reserved to the implementation
298
- [[lex.name]]. If a predefined variable is not odr-used
299
- [[term.odr.use]], its string value need not be present in the
300
- program image.
301
-
302
- [^9]: This set of values is used to define promotion and conversion
303
- semantics for the enumeration type. It does not preclude an
304
- expression of enumeration type from having a value that falls
305
- outside this range.
306
-
307
- [^10]: During name lookup in a class hierarchy, some ambiguities can be
308
- resolved by considering whether one member hides the other along
309
- some paths [[class.member.lookup]]. There is no such
310
- disambiguation when considering the set of names found as a result
311
- of following \*using-directive\*s.
312
-
313
- [^11]: A *using-declaration* with more than one *using-declarator* is
314
- equivalent to a corresponding sequence of *using-declaration*s with
315
- one *using-declarator* each.
 
8
  [*Note 1*: The non-static data member can share the address of another
9
  non-static data member or that of a base class, and any padding that
10
  would normally be inserted at the end of the object can be reused as
11
  storage for other members. — *end note*]
12
 
13
+ *Recommended practice:* The value of a *has-attribute-expression* for
14
+ the `no_unique_address` attribute should be `0` for a given
15
+ implementation unless this attribute can cause a potentially-overlapping
16
+ subobject to have zero size.
17
+
18
  [*Example 1*:
19
 
20
  ``` cpp
21
  template<typename Key, typename Value,
22
  typename Hash, typename Pred, typename Allocator>
 
34
  Here, `hasher`, `pred`, and `alloc` could have the same address as
35
  `buckets` if their respective types are all empty.
36
 
37
  — *end example*]
38