Skip to main content

IAR Embedded Workbench for Arm 9.70.x

Implementation quantities

In this section:

The IAR implementation of C++ is, like all implementations, limited in the size of the applications it can successfully process.

These limitations apply:

C++ feature

Limitation

Nesting levels of compound statements, iteration control structures, and selection control structures.

Limited only by memory.

Nesting levels of conditional inclusion.

Limited only by memory.

Pointer, array, and function declarators (in any combination) modifying a class, arithmetic, or incomplete type in a declaration.

Limited only by memory.

Nesting levels of parenthesized expressions within a full-expression.

Limited only by memory.

Number of characters in an internal identifier or macro name.

Limited only by memory.

Number of characters in an external identifier.

Limited only by memory.

External identifiers in one translation unit.

Limited only by memory.

Identifiers with block scope declared in a block.

Limited only by memory.

Macro identifiers simultaneously defined in one translation unit.

Limited only by memory.

Parameters in one function definition.

Limited only by memory.

Arguments in one function call.

Limited only by memory.

Parameters in one macro definition.

Limited only by memory.

Arguments in one macro invocation.

Limited only by memory.

Characters in one logical source line.

Limited only by memory.

Characters in a string literal (after concatenation).

Limited only by memory.

Size of an object.

Limited only by memory.

Nesting levels for #include files.

Limited only by memory.

Case labels for a switch statement (excluding those for any nested switch statements).

Limited only by memory.

Data members in a single class.

Limited only by memory.

Enumeration constants in a single enumeration.

Limited only by memory.

Levels of nested class definitions in a single member-specification.

Limited only by memory.

Functions registered by atexit.

Limited by heap memory in the built application.

Functions registered by at_quick_exit.

Limited by heap memory in the built application.

Direct and indirect base classes.

Limited only by memory.

Direct base classes for a single class.

Limited only by memory.

Members declared in a single class.

Limited only by memory.

Final overriding virtual functions in a class, accessible or not.

Limited only by memory.

Direct and indirect virtual bases of a class.

Limited only by memory.

Static members of a class.

Limited only by memory.

Friend declarations in a class.

Limited only by memory.

Access control declarations in a class.

Limited only by memory.

Member initializers in a constructor definition.

Limited only by memory.

Scope qualifiers of one identifier.

Limited only by memory.

Nested external specifications.

Limited only by memory.

Recursive constexpr function invocations.

512. This limit can be changed by using the compiler option ‑‑max_cost_constexpr_call.

Full-expressions evaluated within a core constant expression.

Limited only by memory.

Template arguments in a template declaration.

Limited only by memory.

Recursively nested template instantiations, including substitution during template argument deduction (14.8.2).

64 for a specific template. This limit can be changed by using the compiler option ‑‑pending_instantiations.

Handlers per try block.

Limited only by memory.

Throw specifications on a single function declaration.

Limited only by memory.

Number of placeholders (20.9.9.1.4).

20 placeholders from _1 to _20.

Table 125. C++ implementation quantities