16 Library introduction [library]

16.4 Library-wide requirements [requirements]

16.4.2 Library contents and organization [organization] Freestanding implementations [compliance]

Two kinds of implementations are defined: hosted and freestanding ([intro.compliance]); the kind of the implementation is implementation-defined.
For a hosted implementation, this document describes the set of available headers.
A freestanding implementation has an implementation-defined set of headers.
This set shall include at least the headers shown in Table 28.
Table 28: C++ headers for freestanding implementations [tab:headers.cpp.fs]
Implementation properties
<cfloat>, <climits>, <limits>, <version>
Integer types
Start and termination
Dynamic memory management
Type identification
Source location
Exception handling
Initializer lists
Coroutines support
Other runtime support
Concepts library
Type traits
Bit manipulation
Utility components
Function objects
Compile-time rational arithmetic
Iterators library
Ranges library
For each of the headers listed in Table 28, a freestanding implementation provides at least the freestanding items ([freestanding.item]) declared in the header.
[Note 1:
Throwing a standard library provided exception is not observably different from terminate() if the implementation does not unwind the stack during exception handling ([except.handle]) and the user's program contains no catch blocks.
— end note]