17 Library introduction [library]

17.6 Library-wide requirements [requirements]

17.6.2 Using the library [using]

17.6.2.1 Overview [using.overview]

This section describes how a C++ program gains access to the facilities of the C++ standard library. [using.headers] describes effects during translation phase 4, while [using.linkage] describes effects during phase 8 ([lex.phases]).

17.6.2.2 Headers [using.headers]

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 #include preprocessing directive ([cpp.include]).

A translation unit may include library headers in any order (Clause [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> or <assert.h> depends each time on the lexically current definition of NDEBUG.179

A translation unit shall include a header only outside of any external declaration or definition, and shall include the header lexically before the first reference in that translation unit to any of the entities declared in that header.

This is the same as the Standard C library.

17.6.2.3 Linkage [using.linkage]

Entities in the C++ standard library have external linkage ([basic.link]). Unless otherwise specified, objects and functions have the default extern "C++" linkage ([dcl.link]).

Whether a name from the C standard library declared with external linkage has extern "C" or extern "C++" linkage is implementation-defined. It is recommended that an implementation use extern "C++" linkage for this purpose.180

Objects and functions defined in the library and required by a C++ program are included in the program prior to program startup.

See also: replacement functions ([replacement.functions]), run-time changes ([handler.functions]).

The only reliable way to declare an object or function signature from the Standard C library is by including the header that declares it, notwithstanding the latitude granted in 7.1.7 of the C Standard.