Implementation quantities
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 | 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 | Limited by heap memory in the built application. |
Functions registered by | 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 | 512. This limit can be changed by using the compiler option |
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 |
Handlers per try block [except.handle]. | Limited only by memory. |
Number of placeholders [func.bind.place]. | DLIB: 20 placeholders from Libc++: 10 placeholders from |