Init
This commit is contained in:
96
cppdraft/using.md
Normal file
96
cppdraft/using.md
Normal file
@@ -0,0 +1,96 @@
|
||||
[using]
|
||||
|
||||
# 16 Library introduction [[library]](./#library)
|
||||
|
||||
## 16.4 Library-wide requirements [[requirements]](requirements#using)
|
||||
|
||||
### 16.4.3 Using the library [using]
|
||||
|
||||
#### [16.4.3.1](#overview) Overview [[using.overview]](using.overview)
|
||||
|
||||
[1](#overview-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1678)
|
||||
|
||||
Subclause [using] describes how a C++ program gains access to the facilities of the
|
||||
C++ standard library[.](#overview-1.sentence-1)
|
||||
|
||||
[[using.headers]](#headers "16.4.3.2 Headers") describes effects during translation
|
||||
phase 4, while [[using.linkage]](#linkage "16.4.3.3 Linkage") describes effects during [phase
|
||||
8](lex.phases "5.2 Phases of translation [lex.phases]")[.](#overview-1.sentence-2)
|
||||
|
||||
#### [16.4.3.2](#headers) Headers [[using.headers]](using.headers)
|
||||
|
||||
[1](#headers-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1686)
|
||||
|
||||
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]](cpp.include "15.3 Source file inclusion"))
|
||||
or the appropriateimport declaration ([[module.import]](module.import "10.3 Import declaration"))[.](#headers-1.sentence-1)
|
||||
|
||||
[2](#headers-2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1698)
|
||||
|
||||
A translation unit may include library headers in any order ([[lex.separate]](lex.separate "5.1 Separate translation"))[.](#headers-2.sentence-1)
|
||||
|
||||
Each may be included more than once, with no effect different from
|
||||
being included exactly once, except that the effect of including either[<cassert>](assertions.general#header:%3ccassert%3e "19.3.1 General [assertions.general]") or [<assert.h>](support.c.headers.general#header:%3cassert.h%3e "17.15.1 General [support.c.headers.general]") depends each time on the lexically current definition ofNDEBUG[.](#headers-2.sentence-2)[149](#footnote-149 "This is the same as the C standard library.")
|
||||
|
||||
[3](#headers-3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1712)
|
||||
|
||||
A translation unit shall include a header only outside of anydeclaration or definition and,
|
||||
in the case of a module unit,
|
||||
only in its [*global-module-fragment*](module.global.frag#nt:global-module-fragment "10.4 Global module fragment [module.global.frag]"), 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[.](#headers-3.sentence-1)
|
||||
|
||||
No diagnostic is required[.](#headers-3.sentence-2)
|
||||
|
||||
[149)](#footnote-149)[149)](#footnoteref-149)
|
||||
|
||||
This is the same as the C standard library[.](#footnote-149.sentence-1)
|
||||
|
||||
#### [16.4.3.3](#linkage) Linkage [[using.linkage]](using.linkage)
|
||||
|
||||
[1](#linkage-1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1724)
|
||||
|
||||
Entities in the C++ standard library have [external linkage](basic.link "6.7 Program and linkage [basic.link]")[.](#linkage-1.sentence-1)
|
||||
|
||||
Unless otherwise specified, objects and functions have the defaultextern "C++" linkage ([[dcl.link]](dcl.link "9.12 Linkage specifications"))[.](#linkage-1.sentence-2)
|
||||
|
||||
[2](#linkage-2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1730)
|
||||
|
||||
Whether a name from the C standard library declared with
|
||||
external linkage hasextern "C" orextern "C++" linkage is implementation-defined[.](#linkage-2.sentence-1)
|
||||
|
||||
It is recommended that an
|
||||
implementation useextern "C++" linkage for this purpose[.](#linkage-2.sentence-2)[150](#footnote-150 "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 ISO/IEC 9899:2024, 7.1.4.")
|
||||
|
||||
[3](#linkage-3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1751)
|
||||
|
||||
Objects and functions
|
||||
defined in the library and required by a C++ program are included in
|
||||
the program prior to program startup[.](#linkage-3.sentence-1)
|
||||
|
||||
[4](#linkage-4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1757)
|
||||
|
||||
See also[replacement functions](replacement.functions "16.4.5.6 Replacement functions [replacement.functions]"),[runtime changes](handler.functions "16.4.5.7 Handler functions [handler.functions]")[.](#linkage-4.sentence-1)
|
||||
|
||||
[150)](#footnote-150)[150)](#footnoteref-150)
|
||||
|
||||
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 ISO/IEC 9899:2024, 7.1.4[.](#footnote-150.sentence-1)
|
||||
Reference in New Issue
Block a user