|
14 | 14 | \rSec2[ifndr.lex.name]{Identifiers} |
15 | 15 |
|
16 | 16 | \pnum |
17 | | -\ifndrxref{lex.name.reserved} \\ |
| 17 | +\ifndrxref{lex.name.reserved} |
18 | 18 | Some identifiers are reserved for use by \Cpp{} implementations and shall not be used otherwise; no |
19 | 19 | diagnostic is required. |
20 | 20 |
|
|
37 | 37 | \rSec2[ifndr.basic.def.odr]{One-definition rule} |
38 | 38 |
|
39 | 39 | \pnum |
40 | | -\ifndrxref{basic.def.odr.exact.one.def} \\ |
| 40 | +\ifndrxref{basic.def.odr.exact.one.def} |
41 | 41 | Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in |
42 | 42 | that program outside of a discarded statement\iref{stmt.if}; no diagnostic required. |
43 | 43 |
|
|
57 | 57 |
|
58 | 58 |
|
59 | 59 | \pnum |
60 | | -\ifndrxref{basic.def.odr.unnamed.enum.same.type} \\ |
| 60 | +\ifndrxref{basic.def.odr.unnamed.enum.same.type} |
61 | 61 | If, at any point in the program, there is more than one reachable unnamed enumeration definition in the same scope that have |
62 | 62 | the same first enumerator name and do not have typedef names for linkage purposes\iref{dcl.enum}, those unnamed enumeration |
63 | 63 | types shall be the same; no diagnostic required. |
|
84 | 84 | \rSec2[ifndr.class.member.lookup]{Member name lookup} |
85 | 85 |
|
86 | 86 | \pnum |
87 | | -\ifndrxref{class.member.lookup.name.refers.diff.decl} \\ |
| 87 | +\ifndrxref{class.member.lookup.name.refers.diff.decl} |
88 | 88 | A name N used in a class S shall refer to the same declaration in its context and when re-evaluated in the completed scope of S. |
89 | 89 |
|
90 | 90 | \pnum |
|
131 | 131 | \rSec2[ifndr.expr.prim.req]{Requires expressions} |
132 | 132 |
|
133 | 133 | \pnum |
134 | | -\ifndrxref{expr.prim.req.always.sub.fail} \\ |
| 134 | +\ifndrxref{expr.prim.req.always.sub.fail} |
135 | 135 | If the substitution of template arguments into a \grammarterm{requirement} |
136 | 136 | would always result in a substitution failure, the program is ill-formed; no diagnostic required. |
137 | 137 |
|
|
151 | 151 | \rSec2[ifndr.stmt.ambig]{Ambiguity resolution} |
152 | 152 |
|
153 | 153 | \pnum |
154 | | -\ifndrxref{stmt.ambig.bound.diff.parse} \\ |
| 154 | +\ifndrxref{stmt.ambig.bound.diff.parse} |
155 | 155 | If, during |
156 | 156 | parsing, a name in a template parameter is bound differently than it would be bound during a trial parse, |
157 | 157 | the program is ill-formed. No diagnostic is required. |
|
181 | 181 | \rSec2[ifndr.dcl.align]{Alignment specifier} |
182 | 182 |
|
183 | 183 | \pnum |
184 | | -\ifndrxref{dcl.align.diff.translation.units} \\ |
| 184 | +\ifndrxref{dcl.align.diff.translation.units} |
185 | 185 | No diagnostic is required if declarations of an entity have different \grammarterm{alignment-specifier}s in different |
186 | 186 | translation units. |
187 | 187 |
|
|
199 | 199 | \rSec2[ifndr.dcl.attr.noreturn]{Noreturn attribute} |
200 | 200 |
|
201 | 201 | \pnum |
202 | | -\ifndrxref{dcl.attr.noreturn.trans.unit.mismatch} \\ |
203 | | - |
204 | | -\pnum |
| 202 | +\ifndrxref{dcl.attr.noreturn.trans.unit.mismatch} |
205 | 203 | \begin{example} |
206 | 204 | \begin{codeblocktu}{Translation unit \#1} |
207 | 205 | [[noreturn]] void f() {} |
|
216 | 214 | \rSec2[ifndr.module.unit]{Module units and purviews} |
217 | 215 |
|
218 | 216 | \pnum |
219 | | -\ifndrxref{module.unit.reserved.identifiers} \\ |
| 217 | +\ifndrxref{module.unit.reserved.identifiers} |
220 | 218 | All \grammarterm{module-name}s either beginning with an identifier consisting of |
221 | 219 | std followed by zero or more digits or containing a reserved identifier\iref{lex.token} are reserved and shall not be |
222 | 220 | specified in a \grammarterm{module-declaration}; no diagnostic is required. |
|
234 | 232 |
|
235 | 233 |
|
236 | 234 | \pnum |
237 | | -\ifndrxref{module.unit.named.module.no.partition} \\ |
| 235 | +\ifndrxref{module.unit.named.module.no.partition} |
238 | 236 | A named module shall contain exactly one module interface |
239 | 237 | unit with no module-partition, known as the primary module interface unit of the module; no diagnostic is |
240 | 238 | required. |
|
253 | 251 | \rSec2[ifndr.class.base.init]{Initializing bases and members} |
254 | 252 |
|
255 | 253 | \pnum |
256 | | -\ifndrxref{class.base.init.delegate.itself} \\ |
| 254 | +\ifndrxref{class.base.init.delegate.itself} |
257 | 255 | If a constructor delegates to itself directly or indirectly, |
258 | 256 | the program is ill-formed, no diagnostic required |
259 | 257 |
|
|
273 | 271 | \rSec2[ifndr.class.virtual]{Virtual functions} |
274 | 272 |
|
275 | 273 | \pnum |
276 | | -\ifndrxref{class.virtual.pure.or.defined} \\ |
| 274 | +\ifndrxref{class.virtual.pure.or.defined} |
277 | 275 | A virtual function must be declared pure or defined, no diagnostic required. A virtual function declared pure can be defined |
278 | 276 | out of line |
279 | 277 |
|
|
296 | 294 | \rSec2[ifndr.over.literal]{User-defined literals} |
297 | 295 |
|
298 | 296 | \pnum |
299 | | -\ifndrxref{over.literal.reserved} \\ |
| 297 | +\ifndrxref{over.literal.reserved} |
300 | 298 | Some literal suffix identifiers are |
301 | 299 | reserved for future standardization. A declaration whose literal-operator-id uses such a literal |
302 | 300 | suffix identifier is ill-formed, no diagnostic required. |
|
314 | 312 | \rSec2[ifndr.temp.pre]{Preamble} |
315 | 313 |
|
316 | 314 | \pnum |
317 | | -\ifndrxref{temp.pre.reach.def} \\ |
| 315 | +\ifndrxref{temp.pre.reach.def} |
318 | 316 | A definition of a function template, member function of a class template, variable template, or static data |
319 | 317 | member of a class template shall be reachable from the end of every definition domain\iref{basic.def.odr} in which it is |
320 | 318 | implicitly instantiated\iref{temp.inst} unless the corresponding specialization is explicitly instantiated\iref{temp.explicit} in |
|
340 | 338 | \rSec2[ifndr.temp.arg.template]{Template template arguments} |
341 | 339 |
|
342 | 340 | \pnum |
343 | | -\ifndrxref{temp.arg.template.sat.constraints} \\ |
| 341 | +\ifndrxref{temp.arg.template.sat.constraints} |
344 | 342 | Any partial specializations\iref{temp.spec.partial} associated with the primary template are considered when a specialization |
345 | 343 | based on the template template-parameter is instantiated. If a specialization is not reachable from the point of |
346 | 344 | instantiation, and it would have been selected had it been reachable, the program is ill-formed, no diagnostic |
|
372 | 370 | \rSec2[ifndr.constr.atomic]{Atomic constraints} |
373 | 371 |
|
374 | 372 | \pnum |
375 | | -\ifndrxref{temp.constr.atomic.equiv.but.not.equiv} \\ |
| 373 | +\ifndrxref{temp.constr.atomic.equiv.but.not.equiv} |
376 | 374 | If the validity or meaning of the program depends on whether two atomic |
377 | 375 | constraints are equivalent, |
378 | 376 | and they are functionally equivalent but not equivalent, the program is ill-formed, no diagnostic required. |
|
392 | 390 | \end{example} |
393 | 391 |
|
394 | 392 | \pnum |
395 | | -\ifndrxref{temp.constr.atomic.sat.result.diff} \\ |
| 393 | +\ifndrxref{temp.constr.atomic.sat.result.diff} |
396 | 394 | If, at different points in the program, the satisfaction result is different for identical atomic constraints and template arguments, the program is ill-formed, no diagnostic required. |
397 | 395 |
|
398 | 396 | \pnum |
|
413 | 411 | \rSec2[ifndr.temp.constr.normal]{Constraint normalization} |
414 | 412 |
|
415 | 413 | \pnum |
416 | | -\ifndrxref{temp.constr.normal.invalid} \\ |
| 414 | +\ifndrxref{temp.constr.normal.invalid} |
417 | 415 | If during constraint normalization any such substitution results in an invalid type or expression, |
418 | 416 | the program is ill-formed; no diagnostic is required |
419 | 417 |
|
|
431 | 429 | \rSec2[ifndr.temp.spec.partial]{Partial specialization} |
432 | 430 |
|
433 | 431 | \pnum |
434 | | -\ifndrxref{temp.spec.partial.general.partial.reachable} \\ |
| 432 | +\ifndrxref{temp.spec.partial.general.partial.reachable} |
435 | 433 | A partial specialization shall be reachable from any use of a template specialization that would make use of the |
436 | 434 | partial specialization as the result of an implicit or explicit instantiation; no diagnostic is required. |
437 | 435 |
|
|
457 | 455 | \rSec2[ifndr.temp.names]{Names of template specializations} |
458 | 456 |
|
459 | 457 | \pnum |
460 | | -\ifndrxref{temp.names.sat.constraints} \\ |
| 458 | +\ifndrxref{temp.names.sat.constraints} |
461 | 459 | When the template-name of a simple-template-id names a constrained non-function template or a constrained |
462 | 460 | template template-parameter, and all template-arguments in the simple-template-id are non-dependent\iref{temp.dep.temp}, |
463 | 461 | the associated constraints\iref{temp.constr.decl} of the constrained template shall be satisfied\iref{temp.constr.constr}. |
|
481 | 479 | \rSec3[ifndr.temp.over.link]{Function template overloading} |
482 | 480 |
|
483 | 481 | \pnum |
484 | | -\ifndrxref{temp.over.link.equiv.not.equiv} \\ |
| 482 | +\ifndrxref{temp.over.link.equiv.not.equiv} |
485 | 483 | If the validity or meaning of the program depends on whether two constructs are equivalent, and they are |
486 | 484 | functionally equivalent but not equivalent, the program is ill-formed, no diagnostic required. |
487 | 485 |
|
|
502 | 500 | \rSec3[ifndr.temp.res.general]{General} |
503 | 501 |
|
504 | 502 | \pnum |
505 | | -\ifndrxref{temp.res.general.default.but.not.found} \\ |
| 503 | +\ifndrxref{temp.res.general.default.but.not.found} |
506 | 504 | If the validity or meaning of the program would be changed by considering a default argument or default |
507 | 505 | template argument introduced in a declaration that is reachable from the point of instantiation of a |
508 | 506 | specialization\iref{temp.point} but is not found by lookup for the specialization, the program is ill-formed, no |
|
519 | 517 | \rSec3[ifndr.temp.point]{Point of instantiation} |
520 | 518 |
|
521 | 519 | \pnum |
522 | | -\ifndrxref{temp.point.diff.pt.diff.meaning} \\ |
| 520 | +\ifndrxref{temp.point.diff.pt.diff.meaning} |
523 | 521 | A specialization for a class template has at most one point of instantiation within a translation unit. A |
524 | 522 | specialization for any template may have points of instantiation in multiple translation units. If two different |
525 | 523 | points of instantiation give a template specialization different meanings according to the one-definition |
|
553 | 551 | \rSec2[ifndr.temp.explicit]{Explicit instantiation} |
554 | 552 |
|
555 | 553 | \pnum |
556 | | -\ifndrxref{temp.explicit.decl.implicit.inst} \\ |
| 554 | +\ifndrxref{temp.explicit.decl.implicit.inst} |
557 | 555 | An entity that is the subject of |
558 | 556 | an explicit instantiation declaration and that is also used in a way that would otherwise cause an implicit |
559 | 557 | instantiation\iref{temp.inst} in the translation unit shall be the subject of an explicit instantiation definition |
|
578 | 576 | \rSec3[ifndr.temp.deduct.general]{General} |
579 | 577 |
|
580 | 578 | \pnum |
581 | | -\ifndrxref{temp.deduct.general.diff.order} \\ |
| 579 | +\ifndrxref{temp.deduct.general.diff.order} |
582 | 580 | If substitution |
583 | 581 | into different declarations of the same function template would cause template instantiations to occur in a |
584 | 582 | different order or not at all, the program is ill-formed; no diagnostic required. |
|
0 commit comments