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

  --Number of initial characters in an internal identifier or macro name

  --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


  --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
  +-------                       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

  +-------                      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].