8.22 Implementation quantities

Describes limits in C++ implementations.

Note:

Where a specific number is provided, this value is the recommended minimum quantity.
Nesting levels of compound statements, iteration control structures, and selection control structures.
256. Can be increased using the -fbracket-depth command-line option.
Nesting levels of conditional inclusion
Limited by memory.
Pointer, array, and function declarators (in any combination) modifying a class, arithmetic, or incomplete type in a declaration.
Limited by memory.
Nesting levels of parenthesized expressions within a full-expression.
256. Can be increased using the -fbracket-depth command-line option.
Number of characters in an internal identifier or macro name.
Limited by memory.
Number of characters in an external identifier.
Limited by memory.
External identifiers in one translation unit.
Limited by memory.
Identifiers with block scope declared in one block.
Limited by memory.
Macro identifiers that are simultaneously defined in one translation unit.
Limited by memory.
Parameters in one function definition.
Limited by memory.
Arguments in one function call.
Limited by memory.
Parameters in one macro definition.
Limited by memory.
Arguments in one macro invocation.
Limited by memory.
Characters in one logical source line.
Limited by memory.
Characters in a string literal (after concatenation).
Limited by memory.
Size of an object.
SIZE_MAX
Nesting levels for #include files.
Limited by memory.
Case labels for a switch statement (excluding case labels for any nested switch statements).
Limited by memory.
Data members in a single class.
Limited by memory.
Enumeration constants in a single enumeration.
Limited by memory.
Levels of nested class definitions in a single member-specification.
256. Can be increased using the -fbracket-depth command-line option.
Functions that are registered by atexit().
Limited by memory.
Direct and indirect base classes.
Limited by memory.
Direct base classes for a single class.
Limited by memory.
Members declared in a single class.
Limited by memory.
Final overriding virtual functions in a class, accessible or not.
Limited by memory.
Direct and indirect virtual bases of a class.
Limited by memory.
Static members of a class.
Limited by memory.
Friend declarations in a class.
Limited by memory.
Access control declarations in a class.
Limited by memory.
Member initializers in a constructor definition.
Limited by memory.
Scope qualifications of one identifier.
Limited by memory.
Nested external specifications.
Limited by memory.
Recursive constexpr function invocations.
512. Can be changed using the -fconstexpr-depth command-line option.
Full-expressions that are evaluated within a core constant expression.
Limited by memory.
Template arguments in a template declaration.
Limited by memory.
Recursively nested template instantiations, including substitution during template argument deduction (14.8.2).
1024. Can be changed using the -ftemplate-depth command-line option.
Handlers per try block.
Limited by memory.
Throw specifications on a single function declaration.
Limited by memory.
Number of placeholders (20.9.10.4).
Ten placeholders from _1 to _10.
Non-ConfidentialPDF file icon PDF version100067_0609_00_en
Copyright © 2014–2017 Arm Limited (or its affiliates). All rights reserved.