Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 25 additions & 27 deletions source/ifndr.tex
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
\rSec2[ifndr.lex.name]{Identifiers}

\pnum
\ifndrxref{lex.name.reserved} \\
\ifndrxref{lex.name.reserved}
Some identifiers are reserved for use by \Cpp{} implementations and shall not be used otherwise; no
diagnostic is required.

Expand All @@ -37,7 +37,7 @@
\rSec2[ifndr.basic.def.odr]{One-definition rule}

\pnum
\ifndrxref{basic.def.odr.exact.one.def} \\
\ifndrxref{basic.def.odr.exact.one.def}
Every program shall contain exactly one definition of every non-inline function or variable that is odr-used in
that program outside of a discarded statement\iref{stmt.if}; no diagnostic required.

Expand All @@ -57,7 +57,7 @@


\pnum
\ifndrxref{basic.def.odr.unnamed.enum.same.type} \\
\ifndrxref{basic.def.odr.unnamed.enum.same.type}
If, at any point in the program, there is more than one reachable unnamed enumeration definition in the same scope that have
the same first enumerator name and do not have typedef names for linkage purposes\iref{dcl.enum}, those unnamed enumeration
types shall be the same; no diagnostic required.
Expand All @@ -84,7 +84,7 @@
\rSec2[ifndr.class.member.lookup]{Member name lookup}

\pnum
\ifndrxref{class.member.lookup.name.refers.diff.decl} \\
\ifndrxref{class.member.lookup.name.refers.diff.decl}
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.

\pnum
Expand Down Expand Up @@ -131,7 +131,7 @@
\rSec2[ifndr.expr.prim.req]{Requires expressions}

\pnum
\ifndrxref{expr.prim.req.always.sub.fail} \\
\ifndrxref{expr.prim.req.always.sub.fail}
If the substitution of template arguments into a \grammarterm{requirement}
would always result in a substitution failure, the program is ill-formed; no diagnostic required.

Expand All @@ -151,7 +151,7 @@
\rSec2[ifndr.stmt.ambig]{Ambiguity resolution}

\pnum
\ifndrxref{stmt.ambig.bound.diff.parse} \\
\ifndrxref{stmt.ambig.bound.diff.parse}
If, during
parsing, a name in a template parameter is bound differently than it would be bound during a trial parse,
the program is ill-formed. No diagnostic is required.
Expand Down Expand Up @@ -181,7 +181,7 @@
\rSec2[ifndr.dcl.align]{Alignment specifier}

\pnum
\ifndrxref{dcl.align.diff.translation.units} \\
\ifndrxref{dcl.align.diff.translation.units}
No diagnostic is required if declarations of an entity have different \grammarterm{alignment-specifier}s in different
translation units.

Expand All @@ -199,9 +199,7 @@
\rSec2[ifndr.dcl.attr.noreturn]{Noreturn attribute}

\pnum
\ifndrxref{dcl.attr.noreturn.trans.unit.mismatch} \\

\pnum
\ifndrxref{dcl.attr.noreturn.trans.unit.mismatch}
\begin{example}
\begin{codeblocktu}{Translation unit \#1}
[[noreturn]] void f() {}
Expand All @@ -216,7 +214,7 @@
\rSec2[ifndr.module.unit]{Module units and purviews}

\pnum
\ifndrxref{module.unit.reserved.identifiers} \\
\ifndrxref{module.unit.reserved.identifiers}
All \grammarterm{module-name}s either beginning with an identifier consisting of
std followed by zero or more digits or containing a reserved identifier\iref{lex.token} are reserved and shall not be
specified in a \grammarterm{module-declaration}; no diagnostic is required.
Expand All @@ -234,7 +232,7 @@


\pnum
\ifndrxref{module.unit.named.module.no.partition} \\
\ifndrxref{module.unit.named.module.no.partition}
A named module shall contain exactly one module interface
unit with no module-partition, known as the primary module interface unit of the module; no diagnostic is
required.
Expand All @@ -253,7 +251,7 @@
\rSec2[ifndr.class.base.init]{Initializing bases and members}

\pnum
\ifndrxref{class.base.init.delegate.itself} \\
\ifndrxref{class.base.init.delegate.itself}
If a constructor delegates to itself directly or indirectly,
the program is ill-formed, no diagnostic required

Expand All @@ -273,7 +271,7 @@
\rSec2[ifndr.class.virtual]{Virtual functions}

\pnum
\ifndrxref{class.virtual.pure.or.defined} \\
\ifndrxref{class.virtual.pure.or.defined}
A virtual function must be declared pure or defined, no diagnostic required. A virtual function declared pure can be defined
out of line

Expand All @@ -296,7 +294,7 @@
\rSec2[ifndr.over.literal]{User-defined literals}

\pnum
\ifndrxref{over.literal.reserved} \\
\ifndrxref{over.literal.reserved}
Some literal suffix identifiers are
reserved for future standardization. A declaration whose literal-operator-id uses such a literal
suffix identifier is ill-formed, no diagnostic required.
Expand All @@ -314,7 +312,7 @@
\rSec2[ifndr.temp.pre]{Preamble}

\pnum
\ifndrxref{temp.pre.reach.def} \\
\ifndrxref{temp.pre.reach.def}
A definition of a function template, member function of a class template, variable template, or static data
member of a class template shall be reachable from the end of every definition domain\iref{basic.def.odr} in which it is
implicitly instantiated\iref{temp.inst} unless the corresponding specialization is explicitly instantiated\iref{temp.explicit} in
Expand All @@ -340,7 +338,7 @@
\rSec2[ifndr.temp.arg.template]{Template template arguments}

\pnum
\ifndrxref{temp.arg.template.sat.constraints} \\
\ifndrxref{temp.arg.template.sat.constraints}
Any partial specializations\iref{temp.spec.partial} associated with the primary template are considered when a specialization
based on the template template-parameter is instantiated. If a specialization is not reachable from the point of
instantiation, and it would have been selected had it been reachable, the program is ill-formed, no diagnostic
Expand Down Expand Up @@ -372,7 +370,7 @@
\rSec2[ifndr.constr.atomic]{Atomic constraints}

\pnum
\ifndrxref{temp.constr.atomic.equiv.but.not.equiv} \\
\ifndrxref{temp.constr.atomic.equiv.but.not.equiv}
If the validity or meaning of the program depends on whether two atomic
constraints are equivalent,
and they are functionally equivalent but not equivalent, the program is ill-formed, no diagnostic required.
Expand All @@ -392,7 +390,7 @@
\end{example}

\pnum
\ifndrxref{temp.constr.atomic.sat.result.diff} \\
\ifndrxref{temp.constr.atomic.sat.result.diff}
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.

\pnum
Expand All @@ -413,7 +411,7 @@
\rSec2[ifndr.temp.constr.normal]{Constraint normalization}

\pnum
\ifndrxref{temp.constr.normal.invalid} \\
\ifndrxref{temp.constr.normal.invalid}
If during constraint normalization any such substitution results in an invalid type or expression,
the program is ill-formed; no diagnostic is required

Expand All @@ -431,7 +429,7 @@
\rSec2[ifndr.temp.spec.partial]{Partial specialization}

\pnum
\ifndrxref{temp.spec.partial.general.partial.reachable} \\
\ifndrxref{temp.spec.partial.general.partial.reachable}
A partial specialization shall be reachable from any use of a template specialization that would make use of the
partial specialization as the result of an implicit or explicit instantiation; no diagnostic is required.

Expand All @@ -457,7 +455,7 @@
\rSec2[ifndr.temp.names]{Names of template specializations}

\pnum
\ifndrxref{temp.names.sat.constraints} \\
\ifndrxref{temp.names.sat.constraints}
When the template-name of a simple-template-id names a constrained non-function template or a constrained
template template-parameter, and all template-arguments in the simple-template-id are non-dependent\iref{temp.dep.temp},
the associated constraints\iref{temp.constr.decl} of the constrained template shall be satisfied\iref{temp.constr.constr}.
Expand All @@ -481,7 +479,7 @@
\rSec3[ifndr.temp.over.link]{Function template overloading}

\pnum
\ifndrxref{temp.over.link.equiv.not.equiv} \\
\ifndrxref{temp.over.link.equiv.not.equiv}
If the validity or meaning of the program depends on whether two constructs are equivalent, and they are
functionally equivalent but not equivalent, the program is ill-formed, no diagnostic required.

Expand All @@ -502,7 +500,7 @@
\rSec3[ifndr.temp.res.general]{General}

\pnum
\ifndrxref{temp.res.general.default.but.not.found} \\
\ifndrxref{temp.res.general.default.but.not.found}
If the validity or meaning of the program would be changed by considering a default argument or default
template argument introduced in a declaration that is reachable from the point of instantiation of a
specialization\iref{temp.point} but is not found by lookup for the specialization, the program is ill-formed, no
Expand All @@ -519,7 +517,7 @@
\rSec3[ifndr.temp.point]{Point of instantiation}

\pnum
\ifndrxref{temp.point.diff.pt.diff.meaning} \\
\ifndrxref{temp.point.diff.pt.diff.meaning}
A specialization for a class template has at most one point of instantiation within a translation unit. A
specialization for any template may have points of instantiation in multiple translation units. If two different
points of instantiation give a template specialization different meanings according to the one-definition
Expand Down Expand Up @@ -553,7 +551,7 @@
\rSec2[ifndr.temp.explicit]{Explicit instantiation}

\pnum
\ifndrxref{temp.explicit.decl.implicit.inst} \\
\ifndrxref{temp.explicit.decl.implicit.inst}
An entity that is the subject of
an explicit instantiation declaration and that is also used in a way that would otherwise cause an implicit
instantiation\iref{temp.inst} in the translation unit shall be the subject of an explicit instantiation definition
Expand All @@ -578,7 +576,7 @@
\rSec3[ifndr.temp.deduct.general]{General}

\pnum
\ifndrxref{temp.deduct.general.diff.order} \\
\ifndrxref{temp.deduct.general.diff.order}
If substitution
into different declarations of the same function template would cause template instantiations to occur in a
different order or not at all, the program is ill-formed; no diagnostic required.
Expand Down
Loading