______________________________________________________________________
Annex 0 (informative)
Implementation quantities [limits]
______________________________________________________________________
1 Because computers are finite, C++ implementations are inevitably lim-
ited in the size of the programs they can successfully process. Every
implementation shall
+------- BEGIN BOX 1 -------+
This clause is non-normative, which means that this sentence must be
restated in elsewhere as a normative requirement on implementations.
+------- END BOX 1 -------+
document those limitations where known. This documentation may cite
fixed limits where they exist, say how to compute variable limits as a
function of available resources, or say that fixed limits do not exist
or are unknown.
2 The limits may constrain quantities that include those described below
or others. The bracketed number following each quantity is recom-
mended as the minimum for that quantity. However, these quantities
are only guidelines and do not determine compliance.
--Nesting levels of compound statements, iteration control structures,
and selection control structures [256].
--Nesting levels of conditional inclusion [256].
--Pointer, array, and function declarators (in any combination) modi-
fying an arithmetic, structure, union, or incomplete type in a dec-
laration [256].
--Nesting levels of parenthesized expressions within a full expression
[256].
--Number of initial characters in an internal identifier or macro name
[1024].
--Number of initial characters in an external identifier [1024].
--External identifiers in one translation unit [65536].
--Identifiers with block scope declared in one block [1024].
--Macro identifiers simultaneously defined in one transation unit
[65536].
--Parameters in one function definition [256].
--Arguments in one function call [256].
--Parameters in one macro definition [256].
--Arguments in one macro invocation [256].
--Characters in one logical source line [65536].
--Characters in a character string literal or wide string literal
(after concatenation) [65536].
--Size of an object [262144].
+------- BEGIN BOX 2 -------+
This is trivial for some implementations to meet and very hard for
others.
+------- END BOX 2 -------+
--Nesting levels for #include files [256].
--Case labels for a switch statement (excluding those for any nested
switch statements) [16384].
--Data members in a single class, structure, or union [16384].
--Enumeration constants in a single enumeration [4096].
--Levels of nested class, structure, or union definitions in a single
struct-declaration-list [256].
--Functions registered by atexit()[32].
--Direct and indirect base classes [16384].
--Direct base classes for a single class [1024].
--Members declared in a single class [4096].
--Final overriding virtual functions in a class, accessible or not
[16384].
+------- BEGIN BOX 3 -------+
I'm not quite sure what this means, but it was passed in Munich in
this form.
+------- END BOX 3 -------+
--Direct and indirect virtual bases of a class [1024].
--Static members of a class [1024].
--Friend declarations in a class [4096].
--Access control declarations in a class [4096].
--Member initializers in a constructor definition [6144].
--Scope qualifications of one identifier [256].
--Nested external specifications [1024].
--Template arguments in a template declaration [1024].
--Recursively nested template instantiations [17].
--Handlers per try block [256].
--Throw specifications on a single function declaration [256].