Skip to main content

IAR Embedded Workbench for Arm 10.10.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, [stmt.block], iteration control structures, [stmt.iter], and selection control structures. [stmt.select].

Limited only by memory.

Nesting levels of conditional inclusion [cpp.cond].

Limited only by memory.

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

Limited only by memory.

Nesting levels of parenthesized expressions [expr.prim.paren] within a full-expression.

Limited only by memory.

Number of characters in an internal identifier [lex.name] or macro name [cpp.replace].

Limited only by memory.

Number of characters in an external identifier [lex.name], [basic.link].

Limited only by memory.

External identifiers [basic.link] in one translation unit.

Limited only by memory.

Identifiers with block scope declared in one block [basic.scope.block].

Limited only by memory.

Structured bindings [dcl.struct.bind] introduced in one declaration.

Limited only by memory.

Macro identifiers [cpp.replace] simultaneously defined in one translation unit.

Limited only by memory.

Parameters in one function definition [dcl.fct.def.general].

Limited only by memory.

Arguments in one function call [expr.call].

Limited only by memory.

Parameters in one macro definition [cpp.replace].

Limited only by memory.

Arguments in one macro invocation [cpp.replace].

Limited only by memory.

Characters in one logical source line [lex.phases].

Limited only by memory.

Characters in a string-literal [lex.string] (after concatenation [lex.phases]).

Limited only by memory.

Size of an object [intro.object].

Limited only by memory.

Nesting levels for #include files [cpp.include].

Limited only by memory.

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

100,000.

Non-static data members (including inherited ones) in a single class [class.mem].

Limited only by memory.

Lambda-captures in one lambda-expression [expr.prim.lambda.capture].

Limited only by memory.

Enumeration constants in a single enumeration [dcl.enum].

Limited only by memory.

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

Limited only by memory.

Functions registered by atexit() [support.start.term].

Limited by heap memory in the built application.

Functions registered by at_quick_exit() [support.start.term].

Limited by heap memory in the built application.

Direct and indirect base classes [class.derived].

Limited only by memory.

Direct base classes for a single class [class.derived].

Limited only by memory.

Class members declared in a single member-specification (including member functions) [class.mem].

Limited only by memory.

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

Limited only by memory.

Direct and indirect virtual bases of a class [class.mi].

Limited only by memory.

Static data members of a class [class.static.data].

Limited only by memory.

Friend declarations in a class [class.friend].

Limited only by memory.

Access control declarations in a class [class.access.spec].

Limited only by memory.

Member initializers in a constructor definition [class.base.init].

Limited only by memory.

Scope qualifications of one identifier [expr.prim.id.qual].

Limited only by memory.

Nested linkage-specifications [dcl.link].

Limited only by memory.

Recursive constexpr function invocations [dcl.constexpr].

512. This limit can be changed by using the compiler option --max_depth_constexpr_call. Increasing the limit should be done with care, too large a limit can lead to stack overflow.

Full-expressions evaluated within a core constant expression [expr.const].

Limited only by memory.

Template parameters in a template declaration [temp.param].

Limited only by memory.

Recursively nested template instantiations [temp.inst], including substitution during template argument deduction [temp.deduct].

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

Handlers per try block [except.handle].

Limited only by memory.

Number of placeholders [func.bind.place].

DLIB: 20 placeholders from _1 to _20.

Libc++: 10 placeholders from _1 to _10.

Table 123. C++ implementation quantities