16 Library introduction [library]

16.4 Library-wide requirements [requirements]

16.4.2 Library contents and organization [organization]

16.4.2.4 Modules [std.modules]

The C++ standard library provides the following C++ library modules.
The named module std exports declarations in namespace std that are provided by the importable C++ library headers (Table 25 or the subset provided by a freestanding implementation) and the C++ headers for C library facilities (Table 26).
It additionally exports declarations in the global namespace for the storage allocation and deallocation functions that are provided by <new>.
The named module std.compat exports the same declarations as the named module std, and additionally exports declarations in the global namespace corresponding to the declarations in namespace std that are provided by the C++ headers for C library facilities (Table 26), except the explicitly excluded declarations described in [support.c.headers.other].
It is unspecified to which module a declaration in the standard library is attached.
[Note 1:
Implementations are required to ensure that mixing #include and import does not result in conflicting attachments ([basic.link]).
— end note]
Recommended practice: Implementations should ensure such attachments do not preclude further evolution or decomposition of the standard library modules.
A declaration in the standard library denotes the same entity regardless of whether it was made reachable through including a header, importing a header unit, or importing a C++ library module.
Recommended practice: Implementations should avoid exporting any other declarations from the C++ library modules.
[Note 2:
Like all named modules, the C++ library modules do not make macros visible ([module.import]), such as assert ([cassert.syn]), errno ([cerrno.syn]), offsetof ([cstddef.syn]), and va_­arg ([cstdarg.syn]).
— end note]