The C/C++ compiler has the implementation quantities listed in Table 1, based on the ISO C++ Standard. Although the values in the right-side column are the recommended minimums for each quantity, they do not determine the compliance of the quantity.
NOTE The right-side column value “unlimited” means unlimited only up to and including memory and time limitations.
| Quantity | Minimum |
|---|---|
| Nesting levels of compound statements, iteration control structures, and selection control structures [256] | Unlimited |
| Nesting levels of conditional inclusion [256] | 32 |
| Pointer, array, and function declarators (in any combination) modifying an arithmetic, structure, union, or incomplete type in a declaration [256] | Unlimited |
| Nesting levels of parenthesized expressions within a full expression [256] | Unlimited |
| Number of initial characters in an internal identifier or macro name [1024] | Unlimited (255 significant in identifiers) |
| Number of initial characters in an external identifier [1024] | Unlimited (255 significant in identifiers) |
| External identifiers in one translation unit [65536] | Unlimited |
| Identifiers with block scope declared in one block [1024] | Unlimited |
| Macro identifiers simultaneously defined in one translation unit [65536] | Unlimited |
| Parameters in one function definition [256] | Unlimited |
| Arguments in one function call [256] | Unlimited |
| Parameters in one macro definition [256] | 128 |
| Arguments in one macro invocation [256] | 128 |
| Characters in one logical source line [65536] | Unlimited |
| Characters in a character string literal or wide string literal (after concatenation) [65536] | Unlimited |
| Size of an object [262144] | 2 GB |
| Nesting levels for #include files [256] | 32 |
| Case labels for a switch statement (excluding those for any nested switch statements) [16384] | Unlimited |
| Data members in a single class, structure, or union [16384] | Unlimited |
| Enumeration constants in a single enumeration [4096] | Unlimited |
| Levels of nested class, structure, or union definitions in a single struct-declaration-list [256] | Unlimited |
| Functions registered by atexit()[32] | 64 |
| Direct and indirect base classes [16384] | Unlimited |
| Direct base classes for a single class [1024] | Unlimited |
| Members declared in a single class [4096] | Unlimited |
| Final overriding virtual functions in a class, accessible or not [16384] | Unlimited |
| Direct and indirect virtual bases of a class [1024] | Unlimited |
| Static members of a class [1024] | Unlimited |
| Friend declarations in a class [4096] | Unlimited |
| Access control declarations in a class [4096] | Unlimited |
| Member initializers in a constructor definition [6144] | Unlimited |
| Scope qualifications of one identifier [256] | Unlimited |
| Nested external specifications [1024] | Unlimited |
| Template arguments in a template declaration [1024] | Unlimited |
| Recursively nested template instantiations [17] | Unlimited |
| Handlers per try block [256] | Unlimited |
| Throw specifications on a single function declaration [256] | Unlimited |