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 27.
Table 27: C++ headers for freestanding implementations [tab:headers.cpp.fs]
Common definitions
C standard library
Implementation properties
<cfloat>, <climits>, <limits>,
Integer types
Dynamic memory management
Type identification
Source location
Exception handling
Initializer lists
Coroutines support
Other runtime support
Concepts library
Error numbers
System error support
Type traits
Compile-time rational arithmetic
Utility components
Optional objects
Expected objects
Function objects
Primitive numeric conversions
Bit manipulation
String view classes
String classes
Null-terminated sequence utilities
<cstring>, <cwchar>
Class template array
Contiguous access
Multidimensional access
Iterators library
Ranges library
Algorithms library
<algorithm>, <numeric>
Mathematical functions for floating-point types
For each of the headers listed in Table 27, a freestanding implementation provides at least the freestanding items ([freestanding.item]) declared in the header.
The hosted library facilities are the set of facilities described in this document that are required for hosted implementations, but not required for freestanding implementations.
A freestanding implementation provides a (possibly empty) implementation-defined subset of the hosted library facilities.
Unless otherwise specified, the requirements on each declaration, entity, typedef-name, and macro provided in this way are the same as the corresponding requirements for a hosted implementation, except that not all of the members of the namespaces are required to be present.
A freestanding implementation provides deleted definitions ([dcl.fct.def.delete]) for a (possibly empty) implementation-defined subset of the namespace-scope functions and function templates from the hosted library facilities.
[Note 1: 
An implementation can provide a deleted definition so that the result of overload resolution does not silently change when migrating a program from a freestanding implementation to a hosted implementation.
— end note]