Annex B (informative) Implementation quantities [implimits] (original) (raw)
The limits may constrain quantities that include those described below or others.
The bracketed number following each quantity is recommended as the minimum for that quantity.
- Nesting levels of compound statements ([stmt.block]), iteration control structures ([stmt.iter]), and selection control structures ([stmt.select]) [256].
- Nesting levels of conditional inclusion ([cpp.cond]) [256].
- Pointer ([dcl.ptr]), array ([dcl.array]), and function ([dcl.fct]) declarators (in any combination) modifying a class, arithmetic, or incomplete type in a declaration [256].
- Nesting levels of parenthesized expressions ([expr.prim.paren]) within a full-expression [256].
- Number of characters in an internal identifier ([lex.name]) or macro name ([cpp.replace]) [1 024].
- External identifiers ([basic.link]) in one translation unit [65 536].
- Identifiers with block scope declared in one block ([basic.scope.block]) [1 024].
- Structured bindings ([dcl.struct.bind]) introduced in one declaration [256].
- Macro identifiers ([cpp.replace]) simultaneously defined in one translation unit [65 536].
- Arguments in one function call ([expr.call]) [256].
- Parameters in one macro definition ([cpp.replace]) [256].
- Arguments in one macro invocation ([cpp.replace]) [256].
- Characters in one logical source line ([lex.phases]) [65 536].
- Nesting levels for#includefiles ([cpp.include]) [256].
- Case labels for aswitchstatement ([stmt.switch]) (excluding those for any nestedswitchstatements) [16 384].
- Non-static data members (including inherited ones) in a single class ([class.mem]) [16 384].
- Enumeration constants in a single enumeration ([dcl.enum]) [4 096].
- Direct base classes for a single class ([class.derived]) [1 024].
- Final overriding virtual functions in a class, accessible or not ([class.virtual]) [16 384].
- Direct and indirect virtual bases of a class ([class.mi]) [1 024].
- Member initializers in a constructor definition ([class.base.init]) [6 144].
- Recursive constexpr function invocations ([dcl.constexpr]) [512].
- Full-expressions evaluated within a core constant expression ([expr.const]) [1 048 576].
- Template parameters in a template declaration ([temp.param]) [1 024].
- Recursively nested template instantiations ([temp.inst]), including substitution during template argument deduction ([temp.deduct]) [1 024].