From 9d8f088f14a0cbe9ed283ec5fca0e3859ee71006 Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Sun, 16 Jun 2024 12:42:23 +0700 Subject: [PATCH 1/2] [implimits] reorder Annex B by clause number Reorder the entries in the list of implementation limits according to their clause number. This ordering neatly groups related items such as all the preprocessor limits, and segragates library from core language limits. It loses some of the local organization of the original ordering, such as all parameter and argument list lengths being colocated. --- source/limits.tex | 123 +++++++++++++++++++++++++--------------------- 1 file changed, 66 insertions(+), 57 deletions(-) diff --git a/source/limits.tex b/source/limits.tex index 60c9dc3b69..cd18f26c76 100644 --- a/source/limits.tex +++ b/source/limits.tex @@ -19,20 +19,7 @@ However, these quantities are only guidelines and do not determine compliance. \begin{itemize} \item% -Nesting levels of compound statements\iref{stmt.block}, -iteration control structures\iref{stmt.iter}, -and selection control structures\iref{stmt.select} [256]. -\item% -Nesting levels of conditional inclusion\iref{cpp.cond} [256]. -\item% -Pointer\iref{dcl.ptr}, -pointer-to-member\iref{dcl.mptr}, -array\iref{dcl.array}, and -function\iref{dcl.fct} -declarators (in any combination) -modifying a type in a declaration [256]. -\item% -Nesting levels of parenthesized expressions\iref{expr.prim.paren} within a full-expression [256]. +Characters in one logical source line\iref{lex.phases} [65\,536]. \item% Number of characters in an internal identifier\iref{lex.name} @@ -41,34 +28,31 @@ Number of characters in an external identifier\iref{lex.name,basic.link} [1\,024]. \item% -External identifiers\iref{basic.link} in one translation unit [65\,536]. +Characters in a \grammarterm{string-literal}\iref{lex.string} +(after concatenation\iref{lex.phases}) [65\,536]. + \item% Identifiers with block scope declared in one block\iref{basic.scope.block} [1\,024]. \item% -Structured bindings\iref{dcl.struct.bind} introduced in one declaration [256]. -\item% -Macro identifiers\iref{cpp.replace} simultaneously defined in one -translation -unit [65\,536]. -\item% -Parameters in one function definition\iref{dcl.fct.def.general} [256]. +External identifiers\iref{basic.link} in one translation unit [65\,536]. \item% -Arguments in one function call\iref{expr.call} [256]. +Size of an object\iref{intro.object} [262\,144]. + \item% -Parameters in one macro definition\iref{cpp.replace} [256]. +Nesting levels of parenthesized expressions\iref{expr.prim.paren} within a full-expression [256]. \item% -Arguments in one macro invocation\iref{cpp.replace} [256]. +Scope qualifications of one identifier\iref{expr.prim.id.qual} [256]. \item% -Characters in one logical source line\iref{lex.phases} [65\,536]. +Lambda-captures in one \grammarterm{lambda-expression}\iref{expr.prim.lambda.capture} [256]. \item% -Characters in a \grammarterm{string-literal}\iref{lex.string} -(after concatenation\iref{lex.phases}) [65\,536]. +Arguments in one function call\iref{expr.call} [256]. \item% -Size of an object\iref{intro.object} [262\,144]. +Full-expressions evaluated within a core constant expression\iref{expr.const} [1\,048\,576]. + \item% -Nesting levels for -\tcode{\#include} -files\iref{cpp.include} [256]. +Nesting levels of compound statements\iref{stmt.block}, +iteration control structures\iref{stmt.iter}, +and selection control structures\iref{stmt.select} [256]. \item% Case labels for a \keyword{switch} @@ -76,60 +60,85 @@ \keyword{switch} statements) [16\,384]. + \item% -Non-static data members (including inherited ones) in a single class\iref{class.mem} [16\,384]. +Recursive constexpr function invocations\iref{dcl.constexpr} [512]. \item% -Lambda-captures in one \grammarterm{lambda-expression}\iref{expr.prim.lambda.capture} [256]. +Pointer\iref{dcl.ptr}, +pointer-to-member\iref{dcl.mptr}, +array\iref{dcl.array}, and +function\iref{dcl.fct} +declarators (in any combination) +modifying a type in a declaration [256]. +\item% +\grammarterm{initializer-clause}{s} in one \grammarterm{braced-init-list}\iref{dcl.init} [16\,384]. +\item% +Parameters in one function definition\iref{dcl.fct.def.general} [256]. +\item% +Structured bindings\iref{dcl.struct.bind} introduced in one declaration [256]. \item% Enumeration constants in a single enumeration\iref{dcl.enum} [4\,096]. \item% +Nested \grammarterm{linkage-specification}s\iref{dcl.link} [1\,024]. + +\item% +Class members declared in a single \grammarterm{member-specification} +(including member functions)\iref{class.mem} [4\,096]. +\item% +Non-static data members (including inherited ones) in a single class\iref{class.mem} [16\,384]. +\item% +Static data members of a class\iref{class.static.data} [1\,024]. +\item% Levels of nested class definitions\iref{class.nest} in a single \grammarterm{member-specification} [256]. \item% -Functions registered by -\tcode{atexit()}\iref{support.start.term} [32]. -\item% -Functions registered by -\tcode{at_quick_exit()}\iref{support.start.term} [32]. +Direct base classes for a single class\iref{class.derived} [1\,024]. \item% Direct and indirect base classes\iref{class.derived} [16\,384]. \item% -Direct base classes for a single class\iref{class.derived} [1\,024]. -\item% -Class members declared in a single \grammarterm{member-specification} -(including member functions)\iref{class.mem} [4\,096]. +Direct and indirect virtual bases of a class\iref{class.mi} [1\,024]. \item% Final overriding virtual functions in a class, accessible or not\iref{class.virtual} [16\,384]. \item% -Direct and indirect virtual bases of a class\iref{class.mi} [1\,024]. -\item% -Static data members of a class\iref{class.static.data} [1\,024]. +Access control declarations in a class\iref{class.access.spec} [4\,096]. \item% Friend declarations in a class\iref{class.friend} [4\,096]. \item% -Access control declarations in a class\iref{class.access.spec} [4\,096]. -\item% Member initializers in a constructor definition\iref{class.base.init} [6\,144]. + \item% -\grammarterm{initializer-clause}{s} in one \grammarterm{braced-init-list}\iref{dcl.init} [16\,384]. +Template parameters in a template declaration\iref{temp.param} [1\,024]. \item% -Scope qualifications of one identifier\iref{expr.prim.id.qual} [256]. +Recursively nested template instantiations\iref{temp.inst}, including substitution +during template argument deduction\iref{temp.deduct} [1\,024]. + \item% -Nested \grammarterm{linkage-specification}s\iref{dcl.link} [1\,024]. +Handlers per try block\iref{except.handle} [256]. + \item% -Recursive constexpr function invocations\iref{dcl.constexpr} [512]. +Nesting levels of conditional inclusion\iref{cpp.cond} [256]. \item% -Full-expressions evaluated within a core constant expression\iref{expr.const} [1\,048\,576]. +Nesting levels for +\tcode{\#include} +files\iref{cpp.include} [256]. \item% -Template parameters in a template declaration\iref{temp.param} [1\,024]. +Parameters in one macro definition\iref{cpp.replace} [256]. \item% -Recursively nested template instantiations\iref{temp.inst}, including substitution -during template argument deduction\iref{temp.deduct} [1\,024]. +Arguments in one macro invocation\iref{cpp.replace} [256]. \item% -Handlers per try block\iref{except.handle} [256]. +Macro identifiers\iref{cpp.replace} simultaneously defined in one +translation +unit [65\,536]. + +\item% +Functions registered by +\tcode{atexit()}\iref{support.start.term} [32]. +\item% +Functions registered by +\tcode{at_quick_exit()}\iref{support.start.term} [32]. \item% Number of placeholders\iref{func.bind.place} [10]. \item% From 9601c8facb0722a9eb20f68b12964dbc6814d446 Mon Sep 17 00:00:00 2001 From: Alisdair Meredith Date: Sun, 16 Jun 2024 13:09:17 +0700 Subject: [PATCH 2/2] [implimits] Split lines to match new ordering This change may be semi-normative. It splits lines that defined several quantities into separate lines that can then be correctly ordered. The secondary benefit is that these quantities may now be updated independantly. The new risk is that these quantities that were previously guaranteed to be the same can now vary in a future standard. --- source/limits.tex | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) diff --git a/source/limits.tex b/source/limits.tex index cd18f26c76..29f9507425 100644 --- a/source/limits.tex +++ b/source/limits.tex @@ -21,23 +21,19 @@ \item% Characters in one logical source line\iref{lex.phases} [65\,536]. \item% -Number of -characters in an internal identifier\iref{lex.name} -or macro name\iref{cpp.replace} [1\,024]. +Number of characters in an internal identifier\iref{lex.name} [1\,024]. \item% Number of characters in an external identifier\iref{lex.name,basic.link} [1\,024]. \item% Characters in a \grammarterm{string-literal}\iref{lex.string} (after concatenation\iref{lex.phases}) [65\,536]. - \item% Identifiers with block scope declared in one block\iref{basic.scope.block} [1\,024]. \item% External identifiers\iref{basic.link} in one translation unit [65\,536]. \item% Size of an object\iref{intro.object} [262\,144]. - \item% Nesting levels of parenthesized expressions\iref{expr.prim.paren} within a full-expression [256]. \item% @@ -48,11 +44,10 @@ Arguments in one function call\iref{expr.call} [256]. \item% Full-expressions evaluated within a core constant expression\iref{expr.const} [1\,048\,576]. - \item% -Nesting levels of compound statements\iref{stmt.block}, -iteration control structures\iref{stmt.iter}, -and selection control structures\iref{stmt.select} [256]. +Nesting levels of compound statements\iref{stmt.block} [256]. +\item% +Nesting levels of selection control structures\iref{stmt.select} [256]. \item% Case labels for a \keyword{switch} @@ -60,7 +55,8 @@ \keyword{switch} statements) [16\,384]. - +\item% +Nesting levels of iteration control structures\iref{stmt.iter} [256]. \item% Recursive constexpr function invocations\iref{dcl.constexpr} [512]. \item% @@ -80,7 +76,6 @@ Enumeration constants in a single enumeration\iref{dcl.enum} [4\,096]. \item% Nested \grammarterm{linkage-specification}s\iref{dcl.link} [1\,024]. - \item% Class members declared in a single \grammarterm{member-specification} (including member functions)\iref{class.mem} [4\,096]. @@ -108,16 +103,13 @@ Friend declarations in a class\iref{class.friend} [4\,096]. \item% Member initializers in a constructor definition\iref{class.base.init} [6\,144]. - \item% Template parameters in a template declaration\iref{temp.param} [1\,024]. \item% Recursively nested template instantiations\iref{temp.inst}, including substitution during template argument deduction\iref{temp.deduct} [1\,024]. - \item% Handlers per try block\iref{except.handle} [256]. - \item% Nesting levels of conditional inclusion\iref{cpp.cond} [256]. \item% @@ -129,10 +121,10 @@ \item% Arguments in one macro invocation\iref{cpp.replace} [256]. \item% +Number of characters in a macro name\iref{cpp.replace} [1\,024]. +\item% Macro identifiers\iref{cpp.replace} simultaneously defined in one -translation -unit [65\,536]. - +translation unit [65\,536]. \item% Functions registered by \tcode{atexit()}\iref{support.start.term} [32].