The entities in the C++ standard library are defined in headers,
whose contents are made available to a translation unit when it contains the appropriate
preprocessing directive ([cpp.include])
or the appropriate
import declaration ([module.import]).
A translation unit may include library headers in any order ([lex]).
Each may be included more than once, with no effect different from
being included exactly once, except that the effect of including either
<cassert> ([cassert.syn]) or <assert.h> ([depr.c.headers])
depends each time on the lexically current definition of
A translation unit shall include a header only outside of any
declaration or definition and,
in the case of a module unit,
only in its global-module-fragment, and
shall include the header or import the corresponding header unit lexically
before the first reference in that translation unit to any of the entities
declared in that header.
The only reliable way to declare an object or
function signature from the C standard library is by including the header that
declares it, notwithstanding the latitude granted in 7.1.4 of the C