Implementation-defined behavior for Standard C++
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 or Implementation-defined behavior for C89, respectively.
Descriptions
This section follows the same order as the C++ 17 standard. Each item specifies (in parenthesis) whether it is related to the compiler (including the linker, etc) or to one or both libraries. Each heading starts with a reference to the ISO chapter and section that explains the implementation-defined behavior. A corresponding reference to the C++14 standard is also given for each item, if one exists.
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++17 standard, with some additional features from later C++ standards.
List of topics
3.8 Diagnostics (Compiler)
Diagnostics are produced in the form:
filename,linenumber level[tag]:message
where filename is the name of the source file in which the error was encountered, linenumber is the line number at which the compiler detected the error, level is the level of seriousness of the message (remark, warning, error, or fatal error), tag is a unique tag that identifies the message, and message is an explanatory message, possibly several lines.
C++14 reference: 1.3.6
4.1 Required libraries for freestanding implementation (C++14/C++17 libraries)
See C++ header files and Not supported C/C++ functionality, respectively, for information about which Standard C++ system headers that the IAR C/C++ Compiler does not support.
C++14 reference: 1.4
4.4 Bits in a byte (Compiler)
A byte contains 8 bits.
C++14 reference: 1.7
4.6 Interactive devices (C++14/C++17 libraries)
The streams stdin, stdout, and stderr are treated as interactive devices.
C++14 reference: 1.9
4.7 Number of threads in a program under a freestanding implementation (Compiler)
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 of execution.
C++14 reference: 1.10
4.7.2 Requirement that the thread that executes main and the threads created by std::thread provide concurrent forward progress guarantees (Compiler)
The thread system header is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
5.2, C.4.1 Mapping physical source file characters to the basic source character set (Compiler)
The source character set is the same as the physical source file multibyte character set. By default, the standard ASCII character set is used. However, it can be UTF-8, UTF-16, or the system locale. See Text encodings.
C++14 reference: 2.2
5.2 Physical source file characters (Compiler)
The source character set is the same as the physical source file multibyte character set. By default, the standard ASCII character set is used. However, it can be UTF-8, UTF-16, or the system locale. See Text encodings.
C++14 reference: 2.2
5.2 Converting characters from a source character set to the execution character set (Compiler)
The source character set is the set of legal characters that can appear in source files. It is dependent on the chosen encoding for the source file. See Text encodings. By default, the source character set is Raw.
The execution character set is the set of legal characters that can appear in the execution environment. These are the execution character sets for character constants and string literals, and their encoding types:
Execution character set | Encoding type |
|---|---|
| UTF-32 |
| UTF-16 |
| UTF-32 |
| UTF-8 |
| The source character set |
The DLIB runtime environment needs a multibyte character scanner to support a multibyte execution character set. See Locale.
C++14 reference: 2.2
5.2 Required availability of the source of translation units to locate template definitions (Compiler)
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
5.3 The execution character set and execution wide-character set (Compiler)
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 source file character set is determined by the chosen encoding for the source file. See Text encodings.
The wide character set consists of all the code points defined by ISO/IEC 10646.
C++14 reference: 2.3
5.8 Mapping header names to headers or external source files (Compiler)
The header name is interpreted and mapped into an external source file in the most intuitive way. In both forms of the #include preprocessing directive, the character sequences that specify header names are interpreted exactly in the same way as for other source constructs. They are then mapped to external header source file names.
C++14 reference: 2.9
5.8 The meaning of ’, \, /*, or // in a q-char-sequence or an h-char-sequence (Compiler)
Characters in a q-char-sequence and a h-char-sequence are interpreted as a string literal.
C++14 reference: 2.9
5.13.3 The value of multi-character literals (Compiler)
An integer character constant that contains more than one character will be treated as an integer constant. The value will be calculated by treating the leftmost character as the most significant character, and the rightmost character as the least significant character, in an integer constant. A diagnostic message is issued if the value cannot be represented in an integer constant.
C++14 reference: 2.14.3
5.13.3 The value of wide-character literals with single c-char that are not in the execution wide-character set (Compiler)
All possible c-chars have a representation in the execution wide-character set.
C++14 reference: 2.14.3
5.13.3 The value of wide-character literal containing multiple characters (Compiler)
A diagnostic message is issued, and all but the first c-char is ignored.
C++14 reference: 2.14.3
5.13.3 The semantics of non-standard escape sequences (Compiler)
No non-standard escape sequences are supported.
C++14 reference: 2.14.3
5.13.3 The value of character literal outside range of corresponding type (Compiler)
The value is truncated to fit the type.
C++14 reference: 2.14.3
5.13.3 The encoding of universal character name not in execution character set (Compiler)
A diagnostic message is issued.
C++14 reference: 2.14.3
5.13.3 The range defined for character literals (Compiler)
The range is the same as an int.
C++14 reference: 2.14.3
5.13.4 The choice of larger or smaller value of floating-point literal (Compiler)
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
5.13.5 Concatenation of various types of string literals (Compiler)
Differently prefixed string literal tokens cannot be concatenated, except for those specified by the ISO C++ standard.
C++14 reference: 2.14.5
6.6.1 Defining main in a freestanding environment (Compiler)
The main function must be defined.
C++14 reference: 3.6.1
6.6.1 Startup and termination in a freestanding environment (C++14/C++17 libraries)
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
6.6.1 Parameters to main (C++14/C++17 libraries)
The only two permitted definitions for main are:
int main() int main(int, char **)
C++14 reference: 3.6.1
6.6.1 Linkage of main (C++14/C++17 libraries)
The main function has external linkage.
C++14 reference: 3.6.1
6.6.3 Dynamic initialization of static variables before main (C++14/C++17 libraries)
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
6.6.3 Dynamic initialization of threaded local variables before entry (C++14/C++17 libraries)
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 of execution.
Thread-local variables are treated as static variables except when the linker option ‑‑threaded_lib is used. Then they are initialized by the RTOS.
C++14 reference: 3.6.2
6.6.3 Dynamic initialization of static inline variables before main (C++14/C++17 libraries)
Static inline 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
6.6.3 Threads and program points at which deferred dynamic initialization is performed (C++14/C++17 libraries)
Dynamic initialization is not deferred, except when the linker option ‑‑manual_dynamic_initialization is used.
C++14 reference: 3.6.2
6.7 Use of an invalid pointer (Compiler)
Any other use of an invalid pointer than indirection through it and passing it to a deallocation function works as for a valid pointer.
C++14 reference: 3.7.4.2
6.7.4.3 Relaxed or strict pointer safety for the implementation (Compiler)
The IAR implementation of Standard C++ has relaxed pointer safety.
C++14 reference: 3.7.4.3
6.9 The value of trivially copyable types (Compiler)
All bits in basic types are part of the value representation. Padding between basic types is copied verbatim.
C++14 reference: 3.9
6.9.1 Representation and signage of char (Compiler)
A plain char is treated as an unsigned char. See ‑‑char_is_signed and ‑‑char_is_unsigned.
C++14 reference: 3.9.1
6.9.1 Extended signed integer types (Compiler)
No extended signed integer types exist in the implementation.
C++14 reference: 3.9.1
6.9.1 Value representation of floating-point types (Compiler)
See Basic data types—floating-point types.
C++14 reference: 3.9.1
6.9.2 Value representation of pointer types (Compiler)
See Pointer types.
C++14 reference: 3.9.2
6.11 Alignment (Compiler)
See Alignment.
C++14 reference: 3.11
6.11 Alignment additional values (Compiler)
See Alignment.
C++14 reference: 3.11
6.11 alignof expression additional values (Compiler)
See Alignment.
C++14 reference: 3.11
7.1 lvalue-to-rvalue conversion for objects that contain an invalid pointer (Compiler)
The conversion is made, but it is undefined what happens if the pointer value is used.
C++14 reference: 4.1
7.8 The value of the result of unsigned to signed conversion (Compiler)
When an integer value is converted to a value of signed integer type, but cannot be represented by the destination type, the value is truncated to the number of bits of the destination type and then reinterpreted as a value of the destination type.
C++14 reference: 4.7
7.9 The result of inexact floating-point conversion (Compiler)
When a floating-point value is converted to a value of a different floating-point type, and the value is within the range of the destination type but cannot be represented exactly, the value is rounded to the nearest floating-point value by default.
C++14 reference: 4.8
7.10 The value of the result of an inexact integer to floating-point conversion (Compiler)
When an integer value is converted to a value of a floating-point type, and the value is within the range of the destination type but cannot be represented exactly, the value is rounded to the nearest floating-point value by default.
C++14 reference: 4.9
7.15 The rank of extended signed integer types (Compiler)
The implementation has no extended signed integer types.
C++14 reference: 4.13
8.2.2 Passing argument of class type through ellipsis (Compiler)
The result is a diagnostic and is then treated as a trivially copyable object.
C++14 reference: 5.2.2
8.2.2 Ending the lifetime of a parameter when the callee returns or at the end of the enclosing full-expression (Compiler)
The lifetime of a parameter ends when the callee returns.
C++14 reference: 5.2.2
8.2.6 The value of a bitfield that cannot represent its incremented value (Compiler)
The value is truncated to the correct number of bits.
C++14 reference: Not part of the implementation-defined behavior in C++14.
8.2.8 The derived type for typeid (C++14/C++17 libraries)
The type of a typeid expression is an expression with dynamic type std::type_info.
C++14 reference: 5.2.8
8.2.10 Conversion from a pointer to an integer (Compiler)
See Casting.
C++14 reference: 5.2.10
8.2.10 Conversion from an integer to a pointer (Compiler)
See Casting.
C++14 reference: 5.2.10
8.2.10 Converting a function pointer to an object pointer and vice versa (Compiler)
See Casting.
C++14 reference: 5.2.10
8.3.3 sizeof applied to fundamental types other than char, signed char, and unsigned char (Compiler)
See Basic data types—integer types, Basic data types—floating-point types, and Pointer types.
C++14 reference: 5.3.3
8.3.4, 21.6.3.2 The maximum size of an allocated object (C++14/C++17 library)
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++14 reference: 5.3.4
8.7, 21.2.4 The type of ptrdiff_t (Compiler)
See ptrdiff_t.
C++14 reference: 5.7, 18.2
8.8 The result of right shift of negative value (Compiler)
In a bitwise right shift operation of the form E1 >> E2, if E1 is of signed type and has a negative value, the value of the result is the integral part of the quotient E1/(2**E2), except when E1 is –1.
C++14 reference: 5.8
8.18 The value of a bitfield that cannot represent its assigned value (Compiler)
The value is truncated to the correct number of bits.
C++14 reference: Not part of the implementation-defined behavior in C++14.
10 The meaning of the attribute declaration (Compiler)
There are no other attributes supported than what is specified in the C++ standard. See Extended keywords, for supported attributes and ways to use them with objects.
C++14 reference: 7
10.1.7.1 Access to an object that has volatile-qualified type (Compiler)
See Declaring objects volatile.
C++14 reference: 7.1.6.1
10.2 The underlying type for enumeration (Compiler)
See The enum type.
C++14 reference: 7.2
10.4 The meaning of the asm declaration (Compiler)
An asm declaration enables the direct use of assembler instructions.
C++14 reference: 7.4
10.5 The semantics of linkage specifiers (Compiler)
Only the string-literals "C" and "C++" can be used in a linkage specifier.
C++14 reference: 7.5
10.5 Linkage of objects to other languages (Compiler)
They should have "C" linkage.
C++14 reference: 7.5
10.6.1 The behavior of non-standard attributes (Compiler)
There are no other attributes supported other than what is specified in the C++ standard. See Extended keywords, for a list supported attributes and ways to use them with objects.
C++14 reference: 7.6.1
11.4.1 The string resulting from __func__ (Compiler)
The value of __func__ is the C++ function name.
C++14 reference: 8.4.1
11.6 The value of a bitfield that cannot represent its initializer (Compiler)
The value is truncated to the correct number of bits.
C++14 reference: Not part of the implementation-defined behavior in C++14.
12.2.4 Allocation of bitfields within a class object (Compiler)
See Bitfields.
C++14 reference: 9.6
17 The semantics of linkage specification on templates (Compiler)
Only the string-literals "C" and "C++" can be used in a linkage specifier.
C++14 reference: 14
17.7.1 The maximum depth of recursive template instantiations (Compiler)
The default maximum depth is 64. To change it, use the compiler option ‑‑pending_instantiations.
C++14 reference: 14.7.1
18.3, 18.5.1 Stack unwinding before calling std::terminate() (C++14/C++17 libraries)
When no suitable catch handler is found, the stack is not unwound before calling std::terminate().
C++14 reference: 15.3, 15.5.1
18.5.1 Stack unwinding before calling std::terminate() when a noexcept specification is violated (C++14/C++17 libraries)
When a noexcept specification is violated, the stack is not unwound before calling std::terminate().
C++14 reference: 15.5.1
19 Additional supported forms of preprocessing directives (Compiler)
The preprocessor directives #warning and #include_next are supported. See #warning and #include_next.
C++14 reference: 16
19.1 The numeric values of character literals in #if directives (Compiler)
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
19.1 Negative value of character literal in preprocessor (Compiler)
A plain char is treated as an unsigned char. See ‑‑char_is_signed and ‑‑char_is_unsigned. If a char is treated as a signed character, then character literals in #if and #elif preprocessing directives can be negative.
C++14 reference: 16.1
19.2 Search locations for < > header (Compiler)
See Include file search procedure.
C++14 reference: 16.2
19.2 The search procedure for included source file (Compiler)
See Include file search procedure.
C++14 reference: 16.2
19.2 Search locations for "" header (Compiler)
See Include file search procedure.
C++14 reference: 16.2
19.2 The sequence of places searched for a header (Compiler)
See Include file search procedure.
C++14 reference: 16.2
19.2 Nesting limit for #include directives (Compiler)
The amount of available memory sets the limit.
C++14 reference: 16.2
19.6 #pragma (Compiler)
See Recognized pragma directives (6.10.6).
C++14 reference: 16.6
19.8, C.1.10 The definition and meaning of __STDC__ (Compiler)
__STDC__ is predefined to 1.
C++14 reference: 16.8
19.8 The text of __DATE__ when the date of translation is not available (Compiler)
The date of the translation is always available.
C++14 reference: 16.8
19.8 The text of __TIME__ when the time of translation is not available (Compiler)
The time of the translation is always available.
C++14 reference: 16.8
19.8 The definition and meaning of __STDC_VERSION__ (Compiler)
__STDC_VERSION__ is predefined to 201710L.
C++14 reference: 16.8
20.5.1.2 Declaration of functions from Annex K of the C standard library when C++ headers are included (C++17 library)
See C bounds-checking interface.
C++14 reference: Not part of the implementation-defined behavior in C++14.
20.5.1.3 Headers for a freestanding implementation (C++14/C++17 libraries)
See DLIB runtime environment—implementation details.
C++14 reference: 17.6.1.3
20.5.2.3 Linkage of names from Standard C library (C++14/C++17 libraries)
Declarations from the C library have "C" linkage.
C++14 reference: 17.6.2.3
20.5.5.8 Functions in Standard C++ library that can be recursively reentered (C++14/C++17 libraries)
Functions can be recursively reentered, unless specified otherwise by the ISO C++ standard.
C++14 reference: 17.6.5.8
20.5.5.12 Exceptions thrown by standard library functions that do not have an exception specification (C++14/C++17 libraries)
These functions do not throw any additional exceptions.
C++14 reference: 17.6.5.12
20.5.5.14 error_category for errors originating outside of the operating system (C++14/C++17 libraries)
There is no additional error category.
C++14 reference: 17.6.5.14
21.2.3, C.5.2.7 Definition of NULL (C++14/C++17 libraries)
NULL is predefined as 0.
C++14 reference: 18.2
21.2.4 The type of ptrdiff_t (Compiler)
See ptrdiff_t.
C++14 reference: 18.2
21.2.4 The type of size_t (Compiler)
See size_t.
C++14 reference: 18.2
21.2.4 The type of ptrdiff_t (Compiler)
21.5 Exit status (C++14/C++17 libraries)
Control is returned to the __exit library function. See __exit.
C++14 reference: 18.5
21.6.3.1 The return value of bad_alloc::what (C++14/C++17 libraries)
The return value is a pointer to "bad allocation".
C++14 reference: 18.6.2.1
21.6.3.2 The return value of bad_array_new_length::what (C++14/C++17 libraries)
C++17: The return value is a pointer to "bad array new length". C++14: The return value is a pointer to "bad allocation".
C++14 reference: 18.6.2.2
21.6.3.2 The maximum size of an allocated object (C++14/C++17 library)
See 8.3.4, 21.6.3.2 The maximum size of an allocated object (C++14/C++17 library).
21.7.2 The return value of type_info::name() (C++14/C++17 libraries)
The return value is a pointer to a C string containing the name of the type.
C++14 reference: 18.7.1
21.7.3 The return value of bad_cast::what (C++14/C++17 libraries)
The return value is a pointer to "bad cast".
C++14 reference: 18.7.2
21.7.4 The return value of bad_typeid::what (C++14/C++17 libraries)
The return value is a pointer to "bad typeid".
C++14 reference: 18.7.3
21.8.2 The return value of exception::what (C++14/C++17 libraries)
C++17: The return value is a pointer to "unknown". C++14: The return value is a pointer to std::exception.
C++14 reference: 18.8.1
21.8.3 The return value of bad_exception::what (C++14/C++17 libraries)
The return value is a pointer to "bad exception".
C++14 reference: 18.8.2
21.10 The use of non-POF functions as signal handlers (C++14/C++17 libraries)
Non-Plain Old Functions (POF) can be used as signal handlers if no uncaught exceptions are thrown in the handler, and if the execution of the signal handler does not trigger undefined behavior.
C++14 reference: 18.10
23.6.5 The return value of bad_optional_access::what (C++17 library)
The return value is a pointer to bad_optional_access.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.7.3 variant support of over-aligned types (C++17 library)
variant supports over-aligned types.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.7.11 The return value of bad_variant_access::what (C++17 library)
The return value is a pointer to bad_variant_access.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.8.2 The return value of bad_any_access::what (C++17 library)
The return value is a pointer to "bad any cast".
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.10.4 get_pointer_safety returning pointer_safety::relaxed or pointer_safety::preferred when the implementation has relaxed pointer safety (C++14/C++17 libraries)
The function get_pointer_safety always returns std::pointer_safety::relaxed.
C++14 reference: 20.7.4
23.11.2.1 The return value of bad_weak_ptr::what (C++17 library)
The return value is a pointer to bad_weak_ptr.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.12.5.2 The largest supported value to configure the largest allocation satisfied directly by a pool (C++17 library)
Pool resource objects are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.12.5.2 The largest supported value to configure the maximum number of blocks to replenish a pool (C++17 library)
Pool resource objects are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.12.5.4 The default configuration of a pool (C++17 library)
Pool resource objects are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.12.6.1 The default next_buffer_size for a monotonic_buffer_resource (C++17 library)
monotonic_buffer_resource is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.12.6.2 The growth factor for monotonic_buffer_resource (C++17 library)
monotonic_buffer_resource is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.14.11, 23.14.11.4 The number of placeholders for bind expressions (C++17 library)
There are ten placeholder objects.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.14.11.4 The assignability of placeholder objects (C++14/C++17 libraries)
Placeholder objects are CopyAssignable.
C++14 reference: 20.9.9.1.4
23.14.13.1.1 The return value of bad_function_call::what (C++17 library)
The return value is a pointer to std::bad_function_call.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.15.4.3 Scalar types that have unique object representations (C++17 library)
All integer types, booleans, and characters have unique object representations.
C++14 reference: Not part of the implementation-defined behavior in C++14.
23.15.7.6 Support for extended alignment (C++14/C++17 libraries)
Extended alignment is supported.
C++14 reference: 20.10.7.6
23.17.7.1 Rounding or truncating values to the required precision when converting between time_t values and time_point objects (C++14/C++17 libraries)
Values are truncated to the required precision when converting between time_t values and time_point objects.
C++14 reference: 20.12.7.1
23.19.3, 28.4.3 Additional execution policies supported by parallel algorithms (C++17 library)
Parallel algorithms are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
24.2.3.1 The type of streampos (C++14/C++17 libraries)
The type of streampos is std::fpos<mbstate_t>.
C++14 references: 21.2.3.1, D.6
24.2.3.1 The type of streamoff (C++14/C++17 libraries)
The type of streamoff is long.
C++14 references: 21.2.3.1, D.6
24.2.3.1, 24.2.3.4 Supported multibyte character encoding rules (C++14/C++17 libraries)
See Locale.
C++14 references: 21.2.3.1, 21.2.3.4
24.2.3.2 The type of u16streampos (C++14/C++17 libraries)
The type of u16streampos is streampos.
C++14 reference: 21.2.3.2
24.2.3.2 The return value of char_traits<char16_t>::eof (C++14/C++17 libraries)
The return value of char_traits<char16_t>::eof is EOF.
C++14 reference: 21.2.3.2
24.2.3.3 The type of u32streampos (C++14/C++17 libraries)
The type of u32streampos is streampos.
C++14 reference: 21.2.3.3
24.2.3.3 The return value of char_traits<char32_t>::eof (C++14/C++17 libraries)
The return value of char_traits<char32_t>::eof is EOF.
C++14 reference: 21.2.3.3
24.2.3.4 The type of wstreampos (C++14/C++17 libraries)
The type of wstreampos is streampos.
C++14 reference: 21.2.3.4
24.2.3.4 The return value of char_traits<wchar_t>::eof (C++14/C++17 libraries)
The return value of char_traits<wchar_t>::eof is EOF.
C++14 reference: 21.2.3.4
24.2.3.4 Supported multibyte character encoding rules (C++14/C++17 libraries)
See 24.2.3.1, 24.2.3.4 Supported multibyte character encoding rules (C++14/C++17 libraries).
24.3.2 The type of basic_string::const_iterator (C++17 library)
The type of basic_string::const_iterator is __wrap_iter<const_pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
24.3.2 The type of basic_string::iterator (C++17 library)
The type of basic_string::iterator is __wrap_iter<pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
24.4.2 The type of basic_string_view::const_iterator (C++17 library)
The type of basic_string_view::const_iterator is T const *.
C++14 reference: Not part of the implementation-defined behavior in C++14.
25.3.1 Locale object being global or per-thread (C++14/C++17 libraries)
There is one global locale object for the entire application.
C++14 reference: 22.3.1
25.3.1.1.1, 30.2.2 The set of character types that iostreams templates can be instantiated for (C++17 library)
iostreams templates can be instantiated for char, char16_t, char32_t, and wchar_t.
C++14 reference: Not part of the implementation-defined behavior in C++14.
25.3.1.2 Locale names (C++14/C++17 libraries)
See Locale.
C++14 reference: 22.3.1.2
25.3.1.5 The effects on the C locale of calling locale::global (C++14/C++17 libraries)
Calling this function with an unnamed locale has no effect.
C++14 reference: 22.3.1.5
25.3.1.5 The value of ctype<char>::table_size (C++14/C++17 libraries)
The value of ctype<char>::table_size is 256.
C++14 reference: 25.4.1.3
25.4.5.1.2 Additional formats for time_get::do_get_date (C++14/C++17 libraries)
No additional formats are accepted for time_get::do_get_date.
C++14 reference: 22.4.5.1.2
25.4.5.1.2 time_get::do_get_year and two-digit year numbers (C++14/C++17 libraries)
Two-digit year numbers are accepted by time_get::do_get_year. Years from 0 to 68 are parsed as meaning 2000 to 2068, and years from 69 to 99 are parsed as meaning 1969 to 1999.
C++14 reference: 22.4.5.1.2
25.4.5.3.2 Formatted character sequences generated by time_put::do_put in the C locale (C++14/C++17 libraries)
The behavior is the same as that of the library function strftime.
C++14 reference: 22.4.5.3.2
25.4.7.1.2 Mapping from name to catalog when calling messages::do_open (C++14/C++17 libraries)
No mapping occurs because this function does not open a catalog.
C++14 reference: 22.4.7.1.2
25.4.7.1.2 Mapping to message when calling messages::do_get (C++14/C++17 libraries)
No mapping occurs because this function does not open a catalog. dflt is returned.
C++14 reference: 22.4.7.1.2
25.4.7.1.2 Mapping to message when calling messages::do_close (C++14/C++17 libraries)
The function cannot be called because no catalog can be open.
C++14 reference: 22.4.7.1.2
25.4.7.1.2 Resource limits on a message catalog (C++17 library)
The message catalog is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.7.1 The type of array::const_iterator (C++14/C++17 libraries)
The type of array::const_iterator is T const *.
C++14 reference: 23.3.2.1
26.3.7.1 The type of array::iterator (C++14/C++17 libraries)
The type of array::iterator is T *.
C++14 reference: 23.3.2.1
26.3.8.1 The type of deque::const_iterator (C++17 library)
The type of deque::const_iterator is __deque_iterator<T, const_pointer, T const&, __map_const_pointer, difference_type>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.8.1 The type of deque::iterator (C++17 library)
The type of deque::iterator is __deque_iterator<T, pointer, T&, __map_pointer, difference_type>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.9.1 The type of forward_list::const_iterator (C++17 library)
The type of forward_list::const_iterator is __base::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.9.1 The type of forward_list::iterator (C++17 library)
The type of forward_list::iterator is __base::iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.10.1 The type of list::const_iterator (C++17 library)
The type of list::const_iterator is __list_const_iterator<value_type, __void_pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.10.1 The type of list::iterator (C++17 library)
The type of list::iterator is __list_iterator<value_type, __void_pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.11.1 The type of vector::const_iterator (C++17 library)
The type of vector::const_iterator is __wrap_iter<const_pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.11.1 The type of vector::iterator (C++17 library)
The type of vector::iterator is __wrap_iter<pointer>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.12 The type of vector<bool>::const_iterator (C++17 library)
The type of vector<bool>::const_iterator is const_pointer.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.3.12 The type of vector<bool>::iterator (C++17 library)
The type of vector<bool>::iterator is pointer.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.4.1 The type of map::const_iterator (C++17 library)
The type of map::const_iterator is __map_const_iterator<typename __base::const_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.4.1 The type of map::iterator (C++17 library)
The type of map::iterator is __map_iterator<typename __base::iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.5.1 The type of multimap::const_iterator (C++17 library)
The type of multimap::const_iterator is __map_const_iterator<typename __base::const_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.5.1 The type of multimap::iterator (C++17 library)
The type of multimap::iterator is __map_iterator<typename __base::iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.6.1 The type of set::const_iterator (C++17 library)
The type of set::const_iterator is __base::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.6.1 The type of set::iterator (C++17 library)
The type of set::iterator is __base::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.7.1 The type of multiset::const_iterator (C++17 library)
The type of multiset::const_iterator is __base::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.4.7.1 The type of multiset::iterator (C++17 library)
The type of multiset::iterator is __base::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.4.1 The type of unordered_map::const_iterator (C++17 library)
The type of unordered_map::const_iterator is __hash_map_const_iterator<typename __table::const_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.4.1 The type of unordered_map::const_local_iterator (C++17 library)
The type of unordered_map::const_local_iterator is __hash_map_const_iterator<typename __table::const_local_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.4.1 The type of unordered_map::iterator (C++17 library)
The type of unordered_map::iterator is __hash_map_iterator<typename __table::iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.4.1 The type of unordered_map::local_iterator (C++17 library)
The type of unordered_map::local_iterator is __hash_map_iterator<typename __table::local_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.4.2 The default number of buckets in unordered_map (C++14/C++17 libraries)
The IAR C/C++ Compiler for Arm makes a default construction of the unordered_map before inserting the elements.
C++14 reference: 23.5.4.2
26.5.5.2 The default number of buckets in unordered_multimap (C++14/C++17 libraries)
The IAR C/C++ Compiler for Arm makes a default construction of the unordered_multimap before inserting the elements.
C++14 reference: 23.5.5.2
26.5.6.1 The type of unordered_set::const_iterator (C++17 library)
The type of unordered_set::const_iterator is __table::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.6.1 The type of unordered_set::const_local_iterator (C++17 library)
The type of unordered_set::const_local_iterator is __table::const_local_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.6.1 The type of unordered_set::iterator (C++17 library)
The type of unordered_set::iterator is __table::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.6.1 The type of unordered_set::local_iterator (C++17 library)
The type of unordered_set::local_iterator is __table::const_local_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.6.2 The default number of buckets in unordered_set (C++14/C++17 libraries)
The IAR C/C++ Compiler for Arm makes a default construction of the unordered_set before inserting the elements.
C++14 reference: 23.5.6.2
26.5.7.1 The type of unordered_multiset::const_iterator (C++17 library)
The type of unordered_multiset::const_iterator is __table::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.7.1 The type of unordered_multiset::const_local_iterator (C++17 library)
The type of unordered_multiset::const_local_iterator is __table::const_local_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.7.1 The type of unordered_multiset::iterator (C++17 library)
The type of unordered_multiset::iterator is __table::const_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.7.1 The type of unordered_multiset::local_iterator (C++17 library)
The type of unordered_multiset::local_iterator is __table::const_local_iterator.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.5.7.2 The default number of buckets in unordered_multiset (C++14/C++17 libraries)
The IAR C/C++ Compiler for Arm makes a default construction of the unordered_multiset before inserting the elements.
C++14 reference: 23.5.7.2
26.6.5.1 The type of unordered_multimap::const_iterator (C++17 library)
The type of unordered_multimap::const_iterator is __hash_map_const_iterator<typename __table::const_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.6.5.1 The type of unordered_multimap::const_local_iterator (C++17 library)
The type of unordered_multimap::const_local_iterator is __hash_map_const_iterator<typename __table::const_local_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.6.5.1 The type of unordered_multimap::iterator (C++17 library)
The type of unordered_multimap::iterator is __hash_map_iterator<typename __table::iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
26.6.5.1 The type of unordered_multimap::local_iterator (C++17 library)
The type of unordered_multimap::local_iterator is __hash_map_iterator<typename __table::local_iterator>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
28.4.3 Forward progress guarantees for implicit threads of parallel algorithms (if not defined for thread) (C++17 library)
Parallel algorithms are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
28.4.3 The semantics of parallel algorithms invoked with implementation-defined execution policies (C++17 library)
Parallel algorithms are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
28.4.3 Additional execution policies supported by parallel algorithms (C++17 library)
See 23.19.3, 28.4.3 Additional execution policies supported by parallel algorithms (C++17 library).
28.6.13 The underlying source of random numbers for random_shuffle (C++14/C++17 libraries)
The underlying source is rand().
C++14 reference: 25.3.12
29.4.1 The use of <cfenv> functions for managing floating-point status (C++17 library)
See STDC FENV_ACCESS and Floating-point environment.♦
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.4.1 Support for #pragma FENV_ACCESS (C++17 library)
See STDC FENV_ACCESS.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.5.8 The value of pow(0,0) (C++17 library)
pow(0,0) produces an ERANGE and returns NaN.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.5 The type of default_random_engine (C++17 library)
The type of default_random_engine is linear_congruential_engine<uint_fast32_t, 48271, 0, 2147483647>.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.6 The semantics and default value of a token parameter to random_device constructor (C++17 library)
The token is not used.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.6 The exception type when random_device constructor fails (C++17 library)
The constructor cannot fail.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.6 The exception type when random_device::operator() fails (C++17 library)
The operator() cannot fail.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.6 The way that random_device::operator() generates values (C++17 library)
random_device::operator() generates values using std::rand().
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.8.1 The algorithm used for producing the standard random number distributions (C++17 library)
A linear congruential engine produces the standard random number distributions.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.6.9 rand() and the introduction of data races (C++17 library)
rand() does not introduce a data race.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.1 The effects of calling associated Laguerre polynomials with n>=128 or m>=128 (C++17 library)
cmath assoc_laguerre functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.2 The effects of calling associated Legendre polynomials with l>=128 (C++17 library)
cmath assoc_legendre functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.7 The effects of calling regular modified cylindrical Bessel functions with nu>=128 (C++17 library)
cyl_bessel_i functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.8 The effects of calling cylindrical Bessel functions of the first kind with nu>=128 (C++17 library)
cyl_bessel_j functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.9 The effects of calling irregular modified cylindrical Bessel functions with nu>=128 (C++17 library)
cyl_bessel_k functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.10 The effects of calling cylindrical Neumann functions with nu>=128 (C++17 library)
cyl_neumann functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.15 The effects of calling Hermite polynomials with n>=128 (C++17 library)
hermite functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.16 The effects of calling Laguerre polynomials with n>=128 (C++17 library)
laguerre functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.17 The effects of calling Legendre polynomials with l>=128 (C++17 library)
legendre functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.19 The effects of calling spherical Bessel functions with n>=128 (C++17 library)
sph_bessel functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.20 The effects of calling spherical associated Legendre functions with l>=128 (C++17 library)
sph_legendre functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
29.9.5.21 The effects of calling spherical Neumann functions with n>=128 (C++17 library)
sph_neumann functions are not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.2.2 The behavior of iostream classes when traits::pos_type is not streampos or when traits::off_type is not streamoff (C++14/C++17 libraries)
No specific behavior has been implemented for this case.
C++14 reference: 27.2.2
30.2.2 The set of character types that iostreams templates can be instantiated for (C++17 library)
30.5.3.4 The effects of calling ios_base::sync_with_stdio after any input or output operation on standard streams (C++14/C++17 libraries)
Previous input/output is not handled in any special way.
C++14 reference: 27.5.3.4
30.5.5.4 Argument values to construct basic_ios::failure (C++14/C++17 libraries)
When basic_ios::clear throws an exception, it throws an exception of type basic_ios::failure constructed with the badbit/failbit/eofbit set.
C++14 reference: 27.5.5.4
30.7.5.2.3 NTCTS in basic_ostream<charT, traits>& operator<<(nullptr_t) (C++17 library)
s is nullptr.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.8.2.1 The basic_stringbuf move constructor and the copying of sequence pointers (C++14/C++17 libraries)
The constructor copies the sequence pointers.
C++14 reference: 27.8.2.1
30.8.2.4 The effects of calling basic_streambuf::setbuf with non-zero arguments (C++14/C++17 libraries)
This function has no effect.
C++14 reference: 27.8.2.4
30.9.2.1 The basic_filebuf move constructor and the copying of sequence pointers (C++14/C++17 libraries)
The constructor copies the sequence pointers.
C++14 reference: 27.9.1.2
30.9.2.4 The effects of calling basic_filebuf::setbuf with non-zero arguments (C++14/C++17 libraries)
C++17: The supplied buffer will be used in the basic_filebuf. C++14: 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
30.9.2.4 The effects of calling basic_filebuf::sync when a get area exists (C++14/C++17 libraries)
A get area cannot exist.
C++14 reference: 27.9.1.5
30.10.2.2 The operating system on which the implementation depends (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.6 The type of the filesystem trivial clock (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.8.1 Supported root names in addition to any operating system dependent root names (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.8.2.1 The meaning of dot-dot in the root directory (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.10.1 The interpretation of the path character sequence with format path::auto_format (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.10.4 Additional file_type enumerators for file systems supporting additional types of file (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.13 The type of a directory-like file (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.15.3 The effect of filesystem::copy (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.15.14 The result of filesystem::file_size (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
30.10.15.35 The file type of the file argument of filesystem::status (C++17 library)
The system header filesystem is not supported.
C++14 reference: Not part of the implementation-defined behavior in C++14.
31.5.1 The type of syntax_option_type (C++17 library)
The type for syntax_option_type is enum. See The enum type.
C++14 reference: Not part of the implementation-defined behavior in C++14.
31.5.2 The type of regex_constants::match_flag_type (C++17 library)
The type for match_flag_type is enum. See The enum type.
C++14 reference: Not part of the implementation-defined behavior in C++14.
31.5.3 The type of regex_constants::error_type (C++14/C++17 libraries)
The type is an enum. See The enum type.
C++14 reference: 28.5.3
32.5 The values of various ATOMIC_..._LOCK_FREE macros (C++14/C++17 libraries)
In cases where atomic operations are supported, these macros will have the value 2. See Atomic operations.
C++14 reference: 29.4
32.6, 32.6.1, 32.6.2, 32.6.3 Lock free operation of atomic types (C++17 library)
See Atomic operations.
C++14 reference: Not part of the implementation-defined behavior in C++14.
33.2.3 The presence and meaning of native_handle_type and native_handle (C++14/C++17 libraries)
The thread system header is not supported.
C++14 reference: 30.2.3
C.1.10 The definition and meaning of __STDC__ (Compiler)
See 19.8, C.1.10 The definition and meaning of __STDC__ (Compiler).
C.4.1 Mapping physical source file characters to the basic source character set (Compiler)
See 5.2, C.4.1 Mapping physical source file characters to the basic source character set (Compiler).
C.5.2.7 Definition of NULL (C++14/C++17 libraries)
See 21.2.3, C.5.2.7 Definition of NULL (C++14/C++17 libraries).
D.9 Support for over-aligned types (Compiler, C++17/C++14 libraries)
Over-aligned types are supported in new expressions and by the default allocator.
C++14 references: 5.3.4, 20.7.9.1, 20.7.11