Skip to main content

IAR Embedded Workbench for Arm 10.10.x

Implementation-defined behavior for Standard C++

In this section:

This section describes how the compiler handles the implementation-defined areas of Standard C++. If you are using C instead of C++, see Implementation-defined behavior for Standard C.

Descriptions

This section is ordered alphabetically according to how each entry is listed in the Index of implementation-defined behavior in the Working Draft, Standard for Programming Language C++ (document number N4868). Each entry explains the implementation-defined behavior.

A corresponding reference to the C++14 and or C++20 standard is given for each entry, if one exists. The section numbers in the references refer to the C++14 standard (document number N4140) and the C++20 standard (document number N4868). An implementation that is only present in C++14 is included in the list only if it is related to the library.

Note

The IAR implementation adheres to a freestanding implementation of Standard C++. This means that parts of a standard library can be excluded from the implementation. The compiler adheres to the C++20 standard, with some additional features from later C++ standards.

#pragma

See Recognized pragma directives (6.10.6) for the full list.

C++14 reference: 16.6 [cpp.pragma]

C++20 reference: 15.9 [cpp.pragma]

additional execution policies supported by parallel algorithms

Parallel algorithms are not supported.

C++20 reference: 20.18.3 [execpol.type]

additional file_type enumerators for file systems supporting additional types of file

The <filesystem> header is not supported.

C++20 reference: 29.11.10.1 [fs.enum.file.type]

additional formats for time_get::do_get_date

No additional formats are accepted for time_get::do_get_date.

C++14 reference: 22.4.5.1.2 [locale.time.get.virtuals]

C++20 reference: 28.4.5.1.2 [locale.time.get.virtuals]

additional supported forms of preprocessing directive

The preprocessor directives #warning and #include_next are supported.

C++20 reference: 15.1 [cpp.pre]

algorithms for producing the standard random number distributions

A linear congruential engine produces the standard random number distributions.

C++20 reference: 26.6.1 [rand.dist.general]

alignment

See Alignment.

C++14 reference: 3.11 [basic.align]

C++20 reference: 6.7.6 [basic.align]

alignment additional values

See Alignment.

C++14 reference: 3.11 [basic.align]

C++20 reference: 6.7.6 [basic.align]

alignment of bit-fields within a class object

See Bitfields.

C++14 reference: 9.6 [class.bit]

C++20 reference: 11.4.10 [class.bit]

allocation of bit-fields within a class object

See Bitfields.

C++14 reference: 9.6 [class.bit]

C++20 reference: 11.4.10 [class.bit]

any use of an invalid pointer other than to perform indirection or deallocate

Any use of an invalid pointer other than indirection through it and passing it to a deallocation function works as for a valid pointer.

C++20 reference: 6.7.5.1 [basic.stc.general]

argument values to construct basic_ios::failure / ios_base::failure

When basic_ios::clear throws an exception, it throws an exception of type basic_ios::failure (C++14) / ios_base::failure (C++20) constructed with the badbit/failbit/eofbit set.

C++14 reference: 27.5.3.1.5 [iostate.flags]

C++20 reference: 29.5.3.4 [iostate.flags]

assignability of placeholder objects

Placeholder objects are CopyAssignable.

C++14 reference: 20.9.9.4 [func.bind.place]

C++20 reference: 20.14.15.5 [func.bind.place]

behavior of iostream classes when traits::pos_type is not streampos or when traits::off_type is not streamoff

No specific behavior has been implemented for this case.

C++14 reference: 27.2 [iostreams.limits.pos]

C++20 reference: 29.2 [iostreams.limits.pos]

behavior of non-standard attributes

See Extended keywords for a list of supported attributes.

C++14 reference: 7.6.1 [dcl.attr.grammar]

C++20 reference: 9.12.1 [dcl.attr.grammar]

behavior of strstreambuf::setbuf

This function has no effect.

C++20 reference: D.10.4 [depr.strstreambuf.virtuals]

bits in a byte

A byte contains 8 bits.

C++14 reference: 1.7 [intro.memory]

C++20 reference: 6.7.1 [intro.memory]

choice of larger or smaller value of floating-point-literal

For a floating-point literal whose scaled value cannot be represented as a floating-point value, the nearest even floating-point value is chosen.

C++14 reference: 2.14.4 [lex.fcon]

C++20 reference: 5.13.4 [lex.fcon]

concatenation of some types of string-literals

Differently prefixed string literal tokens cannot be concatenated, except for those specified by the ISO C++ standard.

C++14 reference: 2.14.5 [lex.string]

C++20 reference: 5.13.5 [lex.string]

conversions between pointers and integers

See Casting.

C++14 reference: 5.2.10 [expr.reinterpret.cast]

C++20 reference: 7.6.1.10 [expr.reinterpret.cast]

converting characters from source character set to execution character set

The source character set is the set of legal characters that can appear in source files; by default Raw (ASCII). The execution character sets are: L → UTF-32, u → UTF-16, U → UTF-32, u8 → UTF-8, no prefix → the source character set.

C++14 reference: 2.2 [lex.phases]

C++20 reference: 5.2 [lex.phases]

converting function pointer to object pointer and vice versa

See Casting.

C++14 reference: 5.2.10 [expr.reinterpret.cast]

C++20 reference: 7.6.1.10 [expr.reinterpret.cast]

default configuration of a pool

The default values of the pool_options max_blocks_per_chunk and largest_required_pool_block are 1 << 20 for architectures where size_t can represent 0x0100000, otherwise the defaultvalues are 1 << 10.

C++20 reference: 20.12.5.4 [mem.res.pool.mem]

default next_buffer_size for a monotonic_buffer_resource

The default next buffer size is 1024.

C++20 reference: 20.12.6.2 [mem.res.monotonic.buffer.ctor]

default number of buckets in unordered_map

The IAR C/C++ Compiler makes a default construction of the unordered_map before inserting the elements.

C++14 reference: 23.5.4.2 [unord.map.cnstr]

C++20 reference: 22.5.4.2 [unord.map.cnstr]

default number of buckets in unordered_multimap

The IAR C/C++ Compiler makes a default construction of the unordered_multimap before inserting the elements.

C++14 reference: 23.5.5.2 [unord.multimap.cnstr]

C++20 reference: 22.5.5.2 [unord.multimap.cnstr]

default number of buckets in unordered_multiset

The IAR C/C++ Compiler makes a default construction of the unordered_multiset before inserting the elements.

C++14 reference: 23.5.7.2 [unord.multiset.cnstr]

C++20 reference: 22.5.7.2 [unord.multiset.cnstr]

default number of buckets in unordered_set

The IAR C/C++ Compiler makes a default construction of the unordered_set before inserting the elements.

C++14 reference: 23.5.6.2 [unord.set.cnstr]

C++20 reference: 22.5.6.2 [unord.set.cnstr]

defining main in freestanding environment

The main function must be defined.

C++14 reference: 3.6.1 [basic.start.main]

C++20 reference: 6.9.3.1 [basic.start.main]

definition and meaning of __STDC__

__STDC__ is predefined to 1.

C++14 reference: 16.8 [cpp.predefined]

C++20 reference: 15.11 [cpp.predefined]

definition and meaning of __STDC_VERSION__

__STDC_VERSION__ is predefined to 201710L.

C++14 reference: 16.8 [cpp.predefined]

C++20 reference: 15.11 [cpp.predefined]

definition of NULL

NULL is predefined as 0.

C++20 reference: 17.2.3 [support.types.nullptr]

derived type for typeid

The type of a typeid expression is an expression with dynamic type std::type_info.

C++14 reference: 5.2.8 [expr.typeid]

C++20 reference: 7.6.1.8 [expr.typeid]

diagnostic message

Diagnostics are produced in the form:

filename,linenumber
level[tag]: message

where level is one of remark, warning, error, or fatal error.

C++14 reference: 1.3.6 [defns.diagnostic]

C++20 reference: 3.10 [defns.diagnostic]

dynamic initialization of static inline variables before main

Static inline variables are initialized before the first statement of main, except when the linker option ‑‑manual_dynamic_initialization is used.

C++20 reference: 6.9.3.3 [basic.start.dynamic]

dynamic initialization of static variables/static objects before main

Static variables are initialized before the first statement of main, except when the linker option ‑‑manual_dynamic_initialization is used.

C++14 reference: 3.6.2 [basic.start.init]

C++20 reference: 6.9.3.3 [basic.start.dynamic]

dynamic initialization of thread-local variables/objects before entry

By default, the IAR runtime environment does not support more than one thread of execution. Thread-local variables are treated as static variables except when the linker option ‑‑threaded_lib is used, in which case they are initialized by the RTOS.

C++14 reference: 3.6.2 [basic.start.init]

C++20 reference: 6.9.3.3 [basic.start.dynamic]

effect of calling associated Laguerre polynomials with n >= 128 or m >= 128

assoc_laguerre functions are not supported.

C++20 reference: 26.9.5.4 [sf.cmath.assoc.laguerre]

effect of calling associated Legendre polynomials with l >= 128

assoc_legendre functions are not supported.

C++20 reference: 26.9.5.5 [sf.cmath.assoc.legendre]

effect of calling basic_filebuf::setbuf with nonzero arguments

For Libc++, the supplied buffer will be used in the basic_filebuf. For DLIB, this will offer the buffer to the C stream by calling setvbuf() with the associated file. If anything goes wrong, the stream is reinitialized.

C++14 reference: 27.9.1.5 [filebuf.virtuals]

C++20 reference: 29.9.2 [filebuf.virtuals]

effect of calling basic_filebuf::sync when a get area exists

A get area cannot exist.

C++14 reference: 27.9.1.5 [filebuf.virtuals]

C++20 reference: 29.9.2 [filebuf.virtuals]

effect of calling basic_streambuf::setbuf with nonzero arguments

This function has no effect.

C++14 reference: 27.8.2.4 [stringbuf.virtuals]

C++20 reference: 29.8.2.4 [stringbuf.virtuals]

effect of calling cylindrical Bessel functions of the first kind with nu >= 128

cyl_bessel_j functions are not supported.

C++20 reference: 26.9.5.6 [sf.cmath.cyl.bessel.j]

effect of calling cylindrical Neumann functions with nu >= 128

cyl_neumann functions are not supported.

C++20 reference: 26.9.5.8 [sf.cmath.cyl.neumann]

effect of calling Hermite polynomials with n >= 128

hermite functions are not supported.

C++20 reference: 26.9.5.9 [sf.cmath.hermite]

effect of calling ios_base::sync_with_stdio after any input or output operation on standard streams

Previous input/output is not handled in any special way.

C++14 reference: 27.5.3 [ios.members.static]

C++20 reference: 29.5.3.3 [ios.members.static]

effect of calling irregular modified cylindrical Bessel functions with nu >= 128

cyl_bessel_k functions are not supported.

C++20 reference: 26.9.5.7 [sf.cmath.cyl.bessel.k]

effect of calling Laguerre polynomials with n >= 128

laguerre functions are not supported.

C++20 reference: 26.9.5.10 [sf.cmath.laguerre]

effect of calling Legendre polynomials with l >= 128

legendre functions are not supported.

C++20 reference: 26.9.5.11 [sf.cmath.legendre]

effect of calling regular modified cylindrical Bessel functions with nu >= 128

cyl_bessel_i functions are not supported.

C++20 reference: 26.9.5.12 [sf.cmath.cyl.bessel.i]

effect of calling spherical associated Legendre functions with l >= 128

sph_legendre functions are not supported.

C++20 reference: 26.9.5.15 [sf.cmath.sph.legendre]

effect of calling spherical Bessel functions with n >= 128

sph_bessel functions are not supported.

C++20 reference: 26.9.5.13 [sf.cmath.sph.bessel]

effect of calling spherical Neumann functions with n >= 128

sph_neumann functions are not supported.

C++20 reference: 26.9.5.14 [sf.cmath.sph.neumann]

effect of filesystem::copy

The <filesystem> header is not supported.

C++20 reference: 29.11.14.4 [fs.op.copy]

effect on C locale of calling locale::global

Calling this function with an unnamed locale has no effect.

C++14 reference: 22.3.1.5 [locale.statics]

C++20 reference: 28.3.1.5 [locale.statics]v

encoding of universal character name not in execution character set

A diagnostic message is issued.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

error_category for errors originating outside the operating system

There is no additional error category.

C++14 reference: 17.6.5.14 [value.error.codes]

C++20 reference: 16.4.6.15 [value.error.codes]

exception type when random_device constructor fails

The constructor cannot fail.

C++20 reference: 26.6.9 [rand.device]

exception type when random_device::operator() fails

operator() cannot fail.

C++20 reference: 26.6.9 [rand.device]

exception type when shared_ptr constructor fails

Only std::bad_alloc is thrown.

C++14 reference: 20.8.2.2.1 [util.smartptr.shared.const]

C++20 reference: 20.11.3.2 [util.smartptr.shared.const]

exceptions thrown by standard library functions that do not have an exception specification / that have a potentially-throwing exception specification

These functions do not throw any additional exceptions.

C++14 reference: 17.6.5.12 [res.on.exception.handling]

C++20 reference: 16.4.6.13 [res.on.exception.handling]

execution character set and execution wide-character set

The values of the members of the execution character set are the values of the ASCII character set, which can be augmented by the values of the extra characters in the source file character set. The wide character set consists of all the code points defined by ISO/IEC 10646.

C++14 reference: 2.3 [lex.charset]

C++20 reference: 5.3 [lex.charset]

exit status

Control is returned to the __exit library function.

C++14 reference: 18.5 [support.start.term]

C++20 reference: 17.5 [support.start.term]

extended signed integer types

No extended signed integer types exist in the implementation.

C++14 reference: 3.9.1 [basic.fundamental]

C++20 reference: 6.8.2 [basic.fundamental]

file type of the file argument of filesystem::status

The <filesystem> header is not supported.

C++20 reference: 29.11.14.32 [fs.op.status]

formatted character sequence generated by time_put::do_put in C locale

The behavior is the same as that of the library function strftime.

C++14 reference: 22.4.5.3.2 [locale.time.put.virtuals]

C++20 reference: 28.4.5.3.2 [locale.time.put.virtuals]

forward progress guarantees for implicit threads of parallel algorithms (if not defined for thread)

Parallel algorithms are not supported.

C++20 reference: 25.3.3 [algorithms.parallel.exec]

growth factor for monotonic_buffer_resource

monotonic_buffer_resource is not supported.

C++20 reference: 20.12.6.2 [mem.res.monotonic.buffer.ctor]

headers for freestanding implementation

See C++ header files and Not supported C/C++ functionality for information about which Standard C++ system headers that are not supported.

C++14 reference: 17.6.1.3 [compliance]

C++20 reference: 16.4.2.4 [compliance]

how random_device::operator() generates values

random_device::operator() generates values using std::rand().

C++20 reference: 26.6.9 [rand.device]

how the set of importable headers is determined

Modules are not supported.

C++20 reference: 10.3 [module.import]

interactive device

The streams stdin, stdout, and stderr are treated as interactive devices.

C++14 reference: 1.9 [intro.execution]

C++20 reference: 4.1.2 [intro.abstract]

interpretation of the path character sequence with format path::auto_format

The <filesystem> header is not supported.

C++20 reference: 29.11.10.2 [fs.enum.path.format]

largest supported value to configure the largest allocation satisfied directly by a pool

Pool resource objects are not supported.

C++20 reference: 20.12.5.2 [mem.res.pool.options]

largest supported value to configure the maximum number of blocks to replenish a pool

Pool resource objects are not supported.

C++20 reference: 20.12.5.2 [mem.res.pool.options]

linkage of main

The main function has external linkage.

C++14 reference: 3.6.1 [basic.start.main]

C++20 reference: 6.9.3.1 [basic.start.main]

linkage of names from C standard library

Declarations from the C library have "C" linkage.

C++14 reference: 17.6.2.3 [using.linkage]

C++20 reference: 16.4.3.3 [using.linkage]

linkage of objects between C++ and other languages

They should have "C" linkage.

C++20 reference: 9.11 [dcl.link]

locale names

See Locale for the list of supported locale names.

C++14 reference: 22.3.1.2 [locale.cons]

C++20 reference: 28.3.1.2 [locale.cons]

lvalue-to-rvalue conversion of an invalid pointer value

The conversion is made, but it is undefined what happens if the pointer value is used.

C++20 reference: 7.3.2 [conv.lval]

manner of search for included source file

See Include file search procedure.

C++14 reference: 16.2 [cpp.include]

C++20 reference: 15.3 [cpp.include]

mapping from name to catalog when calling messages::do_open

No mapping occurs because this function does not open a catalog.

C++14 reference: 22.4.7.1.2 [locale.messages.virtuals]

C++20 reference: 28.4.7.1.2 [locale.messages.virtuals]

mapping from physical source file characters to basic source character set

The source character set is the same as the physical source file multibyte character set. By default, the standard ASCII character set is used; it can also be UTF-8, UTF-16, or the system locale.

C++14 reference: 2.3 [lex.charset]

C++20 reference: 5.3 [lex.charset]

mapping header name to header or external source file

The header name is interpreted and mapped into an external source file in the most intuitive way. Both forms of #include map to external header source file names.

C++14 reference: 2.9 [lex.header]

C++20 reference: 5.8 [lex.header]

mapping of pointer to integer

See Casting.

C++20 reference: 7.6.1.10 [expr.reinterpret.cast]

mapping physical source file characters to basic source character set

The source character set is the same as the physical source file multibyte character set. By default, the standard ASCII character set is used; it can also be UTF-8, UTF-16, or the system locale.

C++14 reference: 2.2 [lex.phases]

C++20 reference: 5.2 [lex.phases]

mapping to message when calling messages::do_get

No mapping occurs because this function does not open a catalog. dflt is returned.

C++14 reference: 22.4.7.1.2 [locale.messages.virtuals]

C++20 reference: 28.4.7.1.2 [locale.messages.virtuals]

maximum depth of recursive template instantiations

The default maximum depth is 64. To change it, use the compiler option --pending_instantiations.

C++20 reference: 13.9.2 [temp.inst]

maximum size of an allocated object

The maximum size of an allocated object is theoretically the maximum value of size_t, but in practice it is bounded by how much memory is allocated to the heap. See Setting up heap memory.

C++20 reference: 7.6.2.8 [expr.new]

meaning of ', \\, /*, or // in a q-char-sequence or an h-char-sequence

Characters in a q-char-sequence and an h-char-sequence are interpreted as a string literal.

C++20 reference: 5.8 [lex.header]

meaning of asm declaration

An asm declaration enables the direct use of assembler instructions.

C++14 reference: 7.4 [dcl.asm]

C++20 reference: 9.10 [dcl.asm]

meaning of attribute declaration

See Extended keywords for supported attributes.

C++14 reference: 7 [dcl.dcl]

C++20 reference: 9.1 [dcl.pre]

meaning of dot-dot in root-directory

The <filesystem> header is not supported.

C++20 reference: 29.11.6.2 [fs.path.generic]

negative value of character-literal in preprocessor

A plain char is treated as an unsigned char by default. If char is treated as signed (by using the option ‑‑char_is_signed), then character literals in #if and #elif preprocessing directives can be negative.

C++14 reference: 16.1 [cpp.cond]

C++20 reference: 15.2 [cpp.cond]

nesting limit for #include directives

The amount of available memory sets the limit.

C++14 reference: 16.2 [cpp.include]

C++20 reference: 15.3 [cpp.include]

NTCTS in basic_ostream<charT, traits>& operator<<(nullptr_t)

s is nullptr.

C++20 reference: 29.7.5 [ostream.inserters]

number of placeholders for bind expressions

There are ten placeholder objects.

C++20 reference: 20.14.2 [functional.syn]

number of threads in a program under a freestanding implementation

By default, the IAR runtime environment does not support more than one thread of execution. With an optional third-party RTOS, it might support several threads.

C++14 reference: 1.10 [intro.multithread]

C++20 reference: 6.9.2.1 [intro.multithread.general]

numeric values of character-literals in #if directives

Numeric values of character literals in the #if and #elif preprocessing directives match the values that they have in other expressions.

C++14 reference: 16.1 [cpp.cond]

C++20 reference: 15.2 [cpp.cond]

operating system on which implementation depends

The <filesystem> header is not supported.

C++20 reference: 29.11.2 [fs.conform.os]

parameters to main

The only two permitted definitions for main are int main() and int main(int, char **).

C++14 reference: 3.6.1 [basic.start.main]

C++20 reference: 6.9.3.1 [basic.start.main]

passing argument of class type through ellipsis

The result is a diagnostic and is then treated as a trivially copyable object.

C++14 reference: 5.2.2 [expr.call]

C++20 reference: 7.6.1.3 [expr.call]

physical source file characters

The source character set is the same as the physical source file multibyte character set. By default, standard ASCII is used; it can also be UTF-8, UTF-16, or the system locale.

C++14 reference: 2.2 [lex.phases]

C++20 reference: 5.2 [lex.phases]

presence and meaning of native_handle_type and native_handle

The <thread> system header is not supported.

C++14 reference: 30.2.3 [thread.req.native]

C++20 reference: 32.2.3 [thread.req.native]

range defined for character-literals

The range is the same as for an int.

C++20 reference: 5.13.3 [lex.ccon]

rank of extended signed integer type

The implementation has no extended signed integer types.

C++14 reference: 4.13 [conv.rank]

C++20 reference: 6.8.5 [conv.rank]

required alignment for atomic_ref type's operations

atomic_ref is not supported.

C++20 reference: 31.8.1 [atomics.ref.generic.general]

required libraries for freestanding implementation

See C++ header files and Not supported C/C++ functionality.

C++14 reference: 1.4 [intro.compliance]

C++20 reference: 4.1.1 [intro.compliance.general]

resource limits on a message catalog

The message catalog is not supported.

C++14 reference: 22.4.7.1.2 [locale.messages.virtuals]

C++20 reference: 28.4.7.1.2 [locale.messages.virtuals]

result of exception::what / return value of exception::what

For Libc++, the return value is a pointer to "unknown". For DLIB, the return value is a pointer to std::exception.

C++14 reference: 18.8.1 [exception]

C++20 reference: 17.9.3 [exception]

result of filesystem::file_size

The <filesystem> header is not supported.

C++20 reference: 29.11.14.10 [fs.op.file.size]

result of inexact floating-point conversion

When a floating-point value is converted to a different floating-point type and cannot be represented exactly, the value is rounded to the nearest floating-point value by default.

C++14 reference: 4.8 [conv.double]

C++20 reference: 7.3.10 [conv.double]

return value of bad_alloc::what

The return value is a pointer to "bad allocation".

C++14 reference: 18.6.2.1 [bad.alloc]

C++20 reference: 17.6.4.1 [bad.alloc]

return value of bad_any_cast::what

The return value is a pointer to "bad any cast".

C++20 reference: 20.8.3 [any.bad.any.cast]

return value of bad_array_new_length::what

For Libc++, the return value is a pointer to "bad array new length". For DLIB, the return value is a pointer to "bad allocation".

C++20 reference: 17.6.4.2 [new.badlength]

return value of bad_cast::what

The return value is a pointer to "bad cast".

C++14 reference: 18.7.2 [bad.cast]

C++20 reference: 17.7.4 [bad.cast]

return value of bad_exception::what

The return value is a pointer to "bad exception".

C++14 reference: 18.8.2 [bad.exception]

C++20 reference: 17.9.4 [bad.exception]

return value of bad_function_call::what

The return value is a pointer to std::bad_function_call.

C++20 reference: 20.14.17.2 [func.wrap.badcall]

return value of bad_optional_access::what

The return value is a pointer to bad_optional_access.

C++20 reference: 20.6.5 [optional.bad.access]

return value of bad_typeid::what

The return value is a pointer to "bad typeid".

C++14 reference: 18.7.3 [bad.typeid]

C++20 reference: 17.7.5 [bad.typeid]

return value of bad_variant_access::what

The return value is a pointer to bad_variant_access.

C++20 reference: 20.7.11 [variant.bad.access]

return value of bad_weak_ptr::what

The return value is a pointer to bad_weak_ptr.

C++20 reference: 20.11.2 [util.smartptr.weak.bad]

return value of char_traits<char16_t>::eof

The return value of char_traits<char16_t>::eof is EOF.

C++14 reference: 21.2.3.2 [char.traits.specializations.char16_t]

C++20 reference: 21.2.4.4 [char.traits.specializations.char16.t]

return value of char_traits<char32_t>::eof

The return value of char_traits<char32_t>::eof is EOF.

C++14 reference: 21.2.3.3 [char.traits.specializations.char32_t]

C++20 reference: 21.2.4.5 [char.traits.specializations.char32.t]

return value of type_info::name()

The return value is a pointer to a C string containing the name of the type.

C++14 reference: 18.7.1 [type.info]

C++20 reference: 17.7.3 [type.info]

search locations for <> header

See Include file search procedure.

C++14 reference: 16.2 [cpp.include]

C++20 reference: 15.3 [cpp.include]

search locations for "" header

See Include file search procedure.

C++14 reference: 16.2 [cpp.include]

C++20 reference: 15.3 [cpp.include]

semantics of an access through a volatile glvalue

See Declaring objects volatile.

C++20 reference: 9.2.9.2 [dcl.type.cv]

semantics of linkage specification on templates

Only the string-literals "C" and "C++" can be used in a linkage specifier.

C++14 reference: 14 [temp]

C++20 reference: 13.1 [temp.pre]

semantics of linkage specifiers

Only the string-literals "C" and "C++" can be used in a linkage specifier.

C++14 reference: 7.5 [dcl.link]

C++20 reference: 9.11 [dcl.link]

semantics of non-standard escape sequences

No non-standard escape sequences are supported.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

semantics of parallel algorithms invoked with implementation-defined execution policies

Parallel algorithms are not supported.

C++20 reference: 25.3.3 [algorithms.parallel.exec]

semantics of token parameter and default token value used by random_device constructors

The token is not used.

C++20 reference: 26.6.9 [rand.device]

sequence of places searched for a header

See Include file search procedure.

C++14 reference: 16.2 [cpp.include]

C++20 reference: 15.3 [cpp.include]

set of character types that iostreams templates can be instantiated for

iostreams templates can be instantiated for char, char16_t, char32_t, and wchar_t.

C++14 reference: 22.3.1.1.1 [locale.category]

C++20 reference: 28.3.1.1.1 [locale.category]

signedness of char

A plain char is treated as an unsigned char by default. This can be controlled using the options ‑‑char_is_signed and ‑‑char_is_unsigned.

C++14 reference: 3.9.1 [basic.fundamental]

C++20 reference: 9.2.9.3 [dcl.type.simple]

sizeof applied to fundamental types other than char, signed char, and unsigned char

See Basic data types—integer types, Basic data types—floating-point types, and Pointer types.

C++14 reference: 5.3.3 [expr.sizeof]

C++20 reference: 7.6.2.5 [expr.sizeof]

stack unwinding before call to std::terminate()

When no suitable catch handler is found, the stack is not unwound before calling std::terminate().

C++14 reference: 15.3 [except.handle]

C++20 reference: 14.4 [except.handle]

start-up and termination in freestanding environment

See Application execution—an overview and System startup and termination for descriptions of the startup and termination of applications.

C++14 reference: 3.6.1 [basic.start.main]

C++20 reference: 6.9.3.1 [basic.start.main]

strict total order over pointer values

For any two pointers P0, P1 of the same pointer type, P0 < P1 is true if and only if reinterpret_cast<uintptr_t>(P0) < reinterpret_cast<uintptr_t>(P1).

C++20 reference: 3.37 [defns.order.ptr]

string resulting from __func__

The value of __func__ is the C++ function name.

C++14 reference: 8.4.1 [dcl.fct.def.general]

C++20 reference: 9.5.1 [dcl.fct.def.general]

support for always lock-free integral atomic types in freestanding environments

C++20 atomics are not supported.

C++20 reference: 16.4.2.4 [compliance]

support for extended alignments

Extended alignment is supported.

C++14 reference: 20.10.7.6 [meta.trans.other]

C++20 reference: 6.7.6 [basic.align]

support for module-import-declarations with non-C++ language linkage

Modules are not supported.

C++20 reference: 9.11 [dcl.link]

support for over-aligned types

Over-aligned types are supported in new expressions and by the default allocator.

C++14 reference: 5.3.4 [expr.new]

supported multibyte character encoding rules

See Locale.

C++14 reference: 21.2.3.1 [char.traits.specializations.char]

C++20 reference: 21.2.4.2 [char.traits.specializations.char]

supported root-names in addition to any operating system dependent root-names

The <filesystem> header is not supported.

C++20 reference: 29.11.6.2 [fs.path.generic]

text of __DATE__ when date of translation is not available

The date of the translation is always available.

C++14 reference: 16.8 [cpp.predefined]

C++20 reference: 15.11 [cpp.predefined]

text of __TIME__ when time of translation is not available

The time of the translation is always available.

C++14 reference: 16.8 [cpp.predefined]

C++20 reference: 15.11 [cpp.predefined]

threads and program points at which deferred dynamic initialization is performed

Dynamic initialization is not deferred, except when the linker option ‑‑manual_dynamic_initialization is used.

C++20 reference: 6.9.3.3 [basic.start.dynamic]

type aliases atomic_signed_lock_free and atomic_unsigned_lock_free in freestanding environments

C++20 atomics are not supported.

C++20 reference: 16.4.2.4 [compliance]

type of a directory-like file

The <filesystem> header is not supported.

C++20 reference: 29.11.13.1 [fs.class.directory.iterator.general]

type of array::const_iterator

The type of array::const_iterator is T const *.

C++14 reference: 23.3.2.1 [array.overview]

C++20 reference: 22.3.7.1 [array.overview]

type of array::iterator

The type of array::iterator is T *.

C++14 reference: 23.3.2.1 [array.overview]

C++20 reference: 22.3.7.1 [array.overview]

type of basic_string::const_iterator

The type of basic_string::const_iterator is __wrap_iter<const_pointer>.

C++20 reference: 21.3.3.1 [basic.string.general]

type of basic_string::iterator

The type of basic_string::iterator is __wrap_iter<pointer>.

C++20 reference: 21.3.3.1 [basic.string.general]

type of basic_string_view::const_iterator

The type of basic_string_view::const_iterator is T const *.

C++20 reference: 21.4.3.1 [string.view.template.general]

type of default_random_engine

The type of default_random_engine is linear_congruential_engine<uint_fast32_t, 48271, 0, 2147483647>.

C++20 reference: 26.6.8 [rand.predef]

type of deque::const_iterator

The type of deque::const_iterator is __deque_iterator<T, const_pointer, T const&, __map_const_pointer, difference_type>.

C++20 reference: 22.3.8.1 [deque.overview]

type of deque::iterator

The type of deque::iterator is __deque_iterator<T, pointer, T&, __map_pointer, difference_type>.

C++20 reference: 22.3.8.1 [deque.overview]

type of forward_list::const_iterator

The type of forward_list::const_iterator is __base::const_iterator.

C++20 reference: 22.3.9.1 [forwardlist.overview]

type of forward_list::iterator

The type of forward_list::iterator is __base::iterator.

C++20 reference: 22.3.9.1 [forwardlist.overview]

type of ios_base::streamoff

The type of streamoff is long.

C++14 reference: D.6 [depr.ios.members]

type of ios_base::streampos

The type of streampos is std::fpos<mbstate_t>.

C++14 reference: D.6 [depr.ios.members]

type of list::const_iterator

The type of list::const_iterator is __list_const_iterator<value_type, __void_pointer>.

C++20 reference: 22.3.10.1 [list.overview]

type of list::iterator

The type of list::iterator is __list_iterator<value_type, __void_pointer>.

C++20 reference: 22.3.10.1 [list.overview]

type of map::const_iterator

The type of map::const_iterator is __map_const_iterator<typename __base::const_iterator>.

C++20 reference: 22.4.4.1 [map.overview]

type of map::iterator

The type of map::iterator is __map_iterator<typename __base::iterator>.

C++20 reference: 22.4.4.1 [map.overview]

type of multimap::const_iterator

The type of multimap::const_iterator is __map_const_iterator<typename __base::const_iterator>.

C++20 reference: 22.4.5.1 [multimap.overview]

type of multimap::iterator

The type of multimap::iterator is __map_iterator<typename __base::iterator>.

C++20 reference: 22.4.5.1 [multimap.overview]

type of multiset::const_iterator

The type of multiset::const_iterator is __base::const_iterator.

C++20 reference: 22.4.7.1 [multiset.overview]

type of multiset::iterator

The type of multiset::iterator is __base::const_iterator.

C++20 reference: 22.4.7.1 [multiset.overview]

type of ptrdiff_t

See ptrdiff_t.

C++14 reference: 5.7 [expr.add]

C++20 reference: 7.6.6 [expr.add]

type of regex_constants::error_type

The type is an enum. See The enum type.

C++14 reference: 28.5.3 [re.err]

C++20 reference: 30.5.3 [re.err]

type of regex_constants::match_flag_type

The type of match_flag_type is enum. See The enum type.

C++20 reference: 30.5.2 [re.matchflag]

type of set::const_iterator

The type of set::const_iterator is __base::const_iterator.

C++20 reference: 22.4.6.1 [set.overview]

type of set::iterator

The type of set::iterator is __base::const_iterator.

C++20 reference: 22.4.6.1 [set.overview]

type of size_t

See size_t.

C++14 reference: 18.2 [support.types]

C++20 reference: 17.2.4 [support.types.layout]

type of span::iterator

The type of span::iterator is __wrap_iter<pointer>.

C++20 reference: 22.7.3.1 [span.overview]

type of streamoff

The type of streamoff is long.

C++14 reference: 21.2.3.1 [char.traits.specializations.char]

type of streampos

The type of streampos is std::fpos<mbstate_t>.

C++14 reference: 21.2.3.1 [char.traits.specializations.char]

type of syntax_option_type

The type of syntax_option_type is enum. See The enum type.

C++20 reference: 30.5.1 [re.synopt]

type of u16streampos

The type of u16streampos is streampos.

C++14 reference: 21.2.3.2 [char.traits.specializations.char16_t]

type of u32streampos

The type of u32streampos is streampos.

C++14 reference: 21.2.3.3 [char.traits.specializations.char32_t]

type of unordered_map::const_iterator

The type of unordered_map::const_iterator is __hash_map_const_iterator<typename __table::const_iterator>.

C++20 reference: 22.5.4.1 [unord.map.overview]

type of unordered_map::const_local_iterator

The type of unordered_map::const_local_iterator is __hash_map_const_iterator<typename __table::const_local_iterator>.

C++20 reference: 22.5.4.1 [unord.map.overview]

type of unordered_map::iterator

The type of unordered_map::iterator is __hash_map_iterator<typename __table::iterator>.

C++20 reference: 22.5.4.1 [unord.map.overview]

type of unordered_map::local_iterator

The type of unordered_map::local_iterator is __hash_map_iterator<typename __table::local_iterator>.

C++20 reference: 22.5.4.1 [unord.map.overview]

type of unordered_multimap::const_iterator

The type of unordered_multimap::const_iterator is __hash_map_const_iterator<typename __table::const_iterator>.

C++20 reference: 22.5.5.1 [unord.multimap.overview]

type of unordered_multimap::const_local_iterator

The type of unordered_multimap::const_local_iterator is __hash_map_const_iterator<typename __table::const_local_iterator>.

C++20 reference: 22.5.5.1 [unord.multimap.overview]

type of unordered_multimap::iterator

The type of unordered_multimap::iterator is __hash_map_iterator<typename __table::iterator>.

C++20 reference: 22.5.5.1 [unord.multimap.overview]

type of unordered_multimap::local_iterator

The type of unordered_multimap::local_iterator is __hash_map_iterator<typename __table::local_iterator>.

C++20 reference: 22.5.5.1 [unord.multimap.overview]

type of unordered_multiset::const_iterator

The type of unordered_multiset::const_iterator is __table::const_iterator.

C++20 reference: 22.5.7.1 [unord.multiset.overview]

type of unordered_multiset::const_local_iterator

The type of unordered_multiset::const_local_iterator is __table::const_local_iterator.

C++20 reference: 22.5.7.1 [unord.multiset.overview]

type of unordered_multiset::iterator

The type of unordered_multiset::iterator is __table::const_iterator.

C++20 reference: 22.5.7.1 [unord.multiset.overview]

type of unordered_multiset::local_iterator

The type of unordered_multiset::local_iterator is __table::const_local_iterator.

C++20 reference: 22.5.7.1 [unord.multiset.overview]

type of unordered_set::const_iterator

The type of unordered_set::const_iterator is __table::const_iterator.

C++20 reference: 22.5.6.1 [unord.set.overview]

type of unordered_set::const_local_iterator

The type of unordered_set::const_local_iterator is __table::const_local_iterator.

C++20 reference: 22.5.6.1 [unord.set.overview]

type of unordered_set::iterator

The type of unordered_set::iterator is __table::const_iterator.

C++20 reference: 22.5.6.1 [unord.set.overview]

type of unordered_set::local_iterator

The type of unordered_set::local_iterator is __table::const_local_iterator.

C++20 reference: 22.5.6.1 [unord.set.overview]

type of vector<bool>::const_iterator

The type of vector<bool>::const_iterator is const_pointer.

C++20 reference: 22.3.12 [vector.bool]

type of vector<bool>::iterator

The type of vector<bool>::iterator is pointer.

C++20 reference: 22.3.12 [vector.bool]

type of vector::const_iterator

The type of vector::const_iterator is __wrap_iter<const_pointer>.

C++20 reference: 22.3.11.1 [vector.overview]

type of vector::iterator

The type of vector::iterator is __wrap_iter<pointer>.

C++20 reference: 22.3.11.1 [vector.overview]

type of wstreampos

The type of wstreampos is streampos.

C++14 reference: 21.2.3.4 [char.traits.specializations.wchar.t]

underlying source of random numbers for random_shuffle

The underlying source is rand().

C++14 reference: D.8.4 [depr.alg.random.shuffle]

underlying type for enumeration

By default the smallest integer type that can hold the enumeration's values. The option ‑‑enum_is_int forces the type to be int. See The enum type.

C++14 reference: 7.2 [dcl.enum]

C++20 reference: 9.7.1 [dcl.enum]

underlying type of bool

See Basic data types—integer types.

C++20 reference: 6.8.2 [basic.fundamental]

underlying type of char

A plain char is treated as unsigned char by default. This can be controlled using the options ‑‑char_is_signed and ‑‑char_is_unsigned.

C++20 reference: 6.8.2 [basic.fundamental]

underlying type of wchar_t

See The wchar_t type.

C++20 reference: 6.8.2 [basic.fundamental]

unit suffix when Period::type is micro

The _units-suffix_ is us.

C++20 reference: 27.5.7 [time.duration.io]

use of non-POF function as signal handler

Non-Plain Old Functions (POF) can be used as signal handlers if no uncaught exceptions are thrown in the handler and the execution of the signal handler does not trigger undefined behavior.

C++14 reference: 18.10 [support.runtime]

value for least_max_value default template argument of counting_semaphore

The <semaphore> system header is not supported.

C++20 reference: 32.9 [thread.sema.cnt]

value of bit-field that cannot represent assigned value

The value is truncated to the correct number of bits.

C++20 reference: 7.6.19 [expr.ass]

value of bit-field that cannot represent incremented value

The value is truncated to the correct number of bits.

C++20 reference: 7.6.1.6 [expr.post.incr]

value of bit-field that cannot represent initializer

The value is truncated to the correct number of bits.

C++20 reference: 9.4.1 [dcl.init.general]

value of character-literal outside range of corresponding type

The value is truncated to fit the type.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

value of ctype<char>::table_size

The value of ctype<char>::table_size is 256.

C++14 reference: 22.4.1.3 [facet.ctype.special]

C++20 reference: 28.4.1.3.1 [facet.ctype.special.general]

value of has-attribute-expression for non-standard attributes

For non-standard attributes, supported under the currently selected mode, the value of has-attribute-expression is 1.

C++20 reference: 15.2 [cpp.cond]

value of has-attribute-expression for standard attributes

For each standard attribute, has-attribute-expression expands according to the table [tab:cpp.cond.ha] in [cpp.cond].

C++20 reference: 15.2 [cpp.cond]

value of multicharacter literal

An integer character constant that contains more than one character is treated as an integer constant. The value is calculated by treating the leftmost character as the most significant character and the rightmost as the least significant. A diagnostic is issued if the value cannot be represented in an integer constant.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

value of pow(0,0)

pow(0,0) produces an ERANGE and returns NaN.

C++20 reference: 26.7.7 [complex.transcendentals]

value of result of inexact integer to floating-point conversion

When an integer value is converted to a floating-point type and cannot be represented exactly, the value is rounded to the nearest floating-point value by default.

C++14 reference: 4.9 [conv.fpint]

C++20 reference: 7.3.11 [conv.fpint]

value of wide-character literal containing multiple characters

A diagnostic message is issued, and all but the first c-char is ignored.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

value of wide-character literal with single c-char that is not in execution wide-character set

All possible c-chars have a representation in the execution wide-character set.

C++14 reference: 2.14.3 [lex.ccon]

C++20 reference: 5.13.3 [lex.ccon]

value representation of floating-point types

See Basic data types—floating-point types.

C++14 reference: 3.9.1 [basic.fundamental]

C++20 reference: 6.8.2 [basic.fundamental]

value representation of pointer types

See Pointer types.

C++14 reference: 3.9.2 [basic.compound]

C++20 reference: 6.8.3 [basic.compound]

values of a trivially copyable type

All bits in basic types are part of the value representation. Padding between basic types is copied verbatim.

C++14 reference: 3.9 [basic.types]

C++20 reference: 6.8.1 [basic.types.general]

values of various ATOMIC_..._LOCK_FREE macros

In cases where atomic operations are supported, these macros will have the value 2. See Atomic operations.

C++14 reference: 29.4 [atomics.lockfree]

C++20 reference: 31.4 [atomics.lockfree]

whether <cfenv> functions can be used to manage floating-point status

See STDC FENV_ACCESS and Floating-point environment.

C++20 reference: 26.8.1 [cfenv.syn]

whether a given atomic type's operations are always lock free

See Atomic operations.

C++20 reference: 31.7.1 [atomics.types.generic.general]

whether a given atomic_ref type's operations are always lock free

atomic_ref is not supported.

C++20 reference: 31.8.1 [atomics.ref.generic.general]

whether an implementation has relaxed or strict pointer safety

The IAR implementation of Standard C++ has relaxed pointer safety.

C++14 reference: 3.7.4.3 [basic.stc.dynamic.safety]

C++20 reference: 6.7.5.5.4 [basic.stc.dynamic.safety]

whether functions from Annex K of the C standard library are declared when C++ headers are included

See C bounds-checking interface.

C++20 reference: 16.4.2.3 [headers]

whether get_pointer_safety returns pointer_safety::relaxed or pointer_safety::preferred if the implementation has relaxed pointer safety

The function get_pointer_safety always returns std::pointer_safety::relaxed.

C++14 reference: 20.7.4 [util.dynamic.safety]

C++20 reference: 20.10.5 [util.dynamic.safety]

whether locale object is global or per-thread

There is one global locale object for the entire application.

C++14 reference: 22.3.1 [locale]

C++20 reference: 28.3 [locale.general]

whether pragma FENV_ACCESS is supported

See STDC FENV_ACCESS.

C++20 reference: 26.8.1 [cfenv.syn]

whether rand may introduce a data race

rand() does not introduce a data race.

C++20 reference: 26.10.1 [c.math.rand]

whether sequence pointers are copied by basic_filebuf move constructor

The constructor copies the sequence pointers.

C++14 reference: 27.9.1.1 [filebuf.cons]

C++20 reference: 29.9.1 [filebuf.cons]

whether sequence pointers are copied by basic_stringbuf move constructor

The constructor copies the sequence pointers.

C++14 reference: 27.8.1.1 [stringbuf.cons]

C++20 reference: 29.8.2.1 [stringbuf.cons]

whether sequence pointers are initialized to null pointers

The sequence pointers (eback(), gptr(), egptr(), pbase(), pptr(), epptr()) are not initialized to null pointers.

C++20 reference: 29.8.2.1 [stringbuf.cons]

whether source file inclusion of importable header is replaced with import directive

Modules are not supported.

C++20 reference: 15.3 [cpp.include]

whether source of translation units must be available to locate template definitions

When locating the template definition related to template instantiations, the source of the translation units that define the template is not required.

C++14 reference: 2.2 [lex.phases]

C++20 reference: 5.2 [lex.phases]

whether stack is unwound before calling std::terminate() when a noexcept specification is violated

When a noexcept specification is violated, the stack is not unwound before calling std::terminate().

C++14 reference: 15.5.1 [except.terminate]

C++20 reference: 14.6.2 [except.terminate]

whether the implementation is hosted or freestanding

The IAR implementation adheres to a freestanding implementation of Standard C++.

C++20 reference: 16.4.2.4 [compliance]

whether the lifetime of a parameter ends when the callee returns or at the end of the enclosing full-expression

The lifetime of a parameter ends when the callee returns.

C++20 reference: 7.6.1.3 [expr.call]

whether the sources for module units and header units on which the current translation unit has an interface dependency are required to be available during translation

Modules are not supported.

C++20 reference: 5.2 [lex.phases]

whether the thread that executes main and the threads created by std::thread or std::jthread provide concurrent forward progress guarantees

The <thread> system header is not supported.

C++20 reference: 6.9.2.3 [intro.progress]

whether time_get::do_get_year accepts two-digit year numbers

Two-digit year numbers are accepted by time_get::do_get_year. Years from 0 to 68 are parsed as 2000–2068, and years from 69 to 99 are parsed as 1969–1999.

C++14 reference: 22.4.5.1.2 [locale.time.get.virtuals]

C++20 reference: 28.4.5.1.2 [locale.time.get.virtuals]

whether values are rounded or truncated when converting between time_t values and time_point objects

Values are truncated to the required precision when converting between time_t values and time_point objects.

C++14 reference: 20.12.7.1 [time.clock.system]

C++20 reference: 27.7.3 [time.clock.system.members]

which functions in the C++ standard library may be recursively reentered

Functions can be recursively reentered, unless specified otherwise by the ISO C++ standard.

C++14 reference: 17.6.5.8 [reentrancy]

C++20 reference: 16.4.6.9 [reentrancy]

which non-standard-layout objects containing no data are considered empty

No non-standard-layout objects that contain no data are considered empty.

C++20 reference: 6.7.2 [intro.object]

which scalar types have unique object representations

All integer types, booleans, and characters have unique object representations.

C++20 reference: 20.15.5.4 [meta.unary.prop]

width of integral type

See Basic data types—integer types.

C++20 reference: 6.8.2 [basic.fundamental]