Init
This commit is contained in:
159
cppdraft/freestanding/item.md
Normal file
159
cppdraft/freestanding/item.md
Normal file
@@ -0,0 +1,159 @@
|
||||
[freestanding.item]
|
||||
|
||||
# 16 Library introduction [[library]](./#library)
|
||||
|
||||
## 16.3 Method of description [[description]](description#freestanding.item)
|
||||
|
||||
### 16.3.3 Other conventions [[conventions]](conventions#freestanding.item)
|
||||
|
||||
#### 16.3.3.7 Freestanding items [freestanding.item]
|
||||
|
||||
[1](#1)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L968)
|
||||
|
||||
A [*freestanding item*](#def:freestanding_item "16.3.3.7 Freestanding items [freestanding.item]") is
|
||||
a declaration, entity, [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]"), or macro
|
||||
that is required to be present in
|
||||
a freestanding implementation and a hosted implementation[.](#1.sentence-1)
|
||||
|
||||
[2](#2)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L975)
|
||||
|
||||
Unless otherwise specified,
|
||||
the requirements on freestanding items for a freestanding implementation
|
||||
are the same as the corresponding requirements for a hosted implementation,
|
||||
except that not all of the members of those items are required to be present[.](#2.sentence-1)
|
||||
|
||||
[3](#3)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L981)
|
||||
|
||||
Function declarations and function template declarations
|
||||
followed by a comment that include *freestanding-deleted* are[*freestanding deleted functions*](#def:function,freestanding_deleted "16.3.3.7 Freestanding items [freestanding.item]")[.](#3.sentence-1)
|
||||
|
||||
On freestanding implementations,
|
||||
it is implementation-defined
|
||||
whether each entity introduced by a freestanding deleted function
|
||||
is a deleted function ([[dcl.fct.def.delete]](dcl.fct.def.delete "9.6.3 Deleted definitions")) or
|
||||
whether the requirements are the same as
|
||||
the corresponding requirements for a hosted implementation[.](#3.sentence-2)
|
||||
|
||||
[*Note [1](#note-1)*:
|
||||
|
||||
Deleted definitions reduce the chance of overload resolution silently changing
|
||||
when migrating from a freestanding implementation to a hosted implementation[.](#3.sentence-3)
|
||||
|
||||
â *end note*]
|
||||
|
||||
[*Example [1](#example-1)*: double abs(double j); // freestanding-deleted â *end example*]
|
||||
|
||||
[4](#4)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1001)
|
||||
|
||||
A declaration in a synopsis is a freestanding item if
|
||||
|
||||
- [(4.1)](#4.1)
|
||||
|
||||
it is followed by a comment that includes *freestanding*,
|
||||
|
||||
- [(4.2)](#4.2)
|
||||
|
||||
it is followed by a comment that includes *freestanding-deleted*, or
|
||||
|
||||
- [(4.3)](#4.3)
|
||||
|
||||
the header synopsis begins with a comment
|
||||
that includes *freestanding* and
|
||||
the declaration is not followed by a comment that includes *hosted*[.](#4.sentence-1)
|
||||
[*Note [2](#note-2)*:
|
||||
Declarations followed by *hosted* in freestanding headers are
|
||||
not freestanding items[.](#4.3.sentence-2)
|
||||
As a result, looking up the name of such functions can vary
|
||||
between hosted and freestanding implementations[.](#4.3.sentence-3)
|
||||
â *end note*]
|
||||
|
||||
[*Example [2](#example-2)*: // all freestandingnamespace std { â *end example*]
|
||||
|
||||
[5](#5)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1024)
|
||||
|
||||
An entity, deduction guide, or [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]") is a freestanding item if its introducing declaration is not followed by
|
||||
a comment that includes *hosted*, and is:
|
||||
|
||||
- [(5.1)](#5.1)
|
||||
|
||||
introduced by a declaration that is a freestanding item,
|
||||
|
||||
- [(5.2)](#5.2)
|
||||
|
||||
a member of a freestanding item other than a namespace,
|
||||
|
||||
- [(5.3)](#5.3)
|
||||
|
||||
an enumerator of a freestanding item,
|
||||
|
||||
- [(5.4)](#5.4)
|
||||
|
||||
a deduction guide of a freestanding item,
|
||||
|
||||
- [(5.5)](#5.5)
|
||||
|
||||
an enclosing namespace of a freestanding item,
|
||||
|
||||
- [(5.6)](#5.6)
|
||||
|
||||
a friend of a freestanding item,
|
||||
|
||||
- [(5.7)](#5.7)
|
||||
|
||||
denoted by a [*typedef-name*](dcl.typedef#nt:typedef-name "9.2.4 The typedef specifier [dcl.typedef]") that is a freestanding item, or
|
||||
|
||||
- [(5.8)](#5.8)
|
||||
|
||||
denoted by an alias template that is a freestanding item[.](#5.sentence-1)
|
||||
|
||||
[6](#6)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1042)
|
||||
|
||||
A macro is a freestanding item if it is defined in a header synopsis and
|
||||
|
||||
- [(6.1)](#6.1)
|
||||
|
||||
the definition is followed by a comment
|
||||
that includes *freestanding*, or
|
||||
|
||||
- [(6.2)](#6.2)
|
||||
|
||||
the header synopsis begins with a comment
|
||||
that includes *freestanding* and
|
||||
the definition is not followed by a comment that includes *hosted*[.](#6.sentence-1)
|
||||
|
||||
[*Example [3](#example-3)*: #define NULL *see below* // freestanding â *end example*]
|
||||
|
||||
[7](#7)
|
||||
|
||||
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L1058)
|
||||
|
||||
[*Note [3](#note-3)*:
|
||||
|
||||
Freestanding annotations follow some additional exposition conventions
|
||||
that do not impose any additional normative requirements[.](#7.sentence-1)
|
||||
|
||||
Header synopses that begin with a comment containing "all freestanding"
|
||||
contain no hosted items and no freestanding deleted functions[.](#7.sentence-2)
|
||||
|
||||
Header synopses that begin with a comment containing "mostly freestanding"
|
||||
contain at least one hosted item or freestanding deleted function[.](#7.sentence-3)
|
||||
|
||||
Classes and class templates followed by a comment
|
||||
containing "partially freestanding"
|
||||
contain at least one hosted item or freestanding deleted function[.](#7.sentence-4)
|
||||
|
||||
â *end note*]
|
||||
|
||||
[*Example [4](#example-4)*: template<class T, size_t N> struct array; // partially freestandingtemplate<class T, size_t N>struct array {constexpr reference operator[](size_type n); constexpr const_reference operator[](size_type n) const; constexpr reference at(size_type n); // freestanding-deletedconstexpr const_reference at(size_type n) const; // freestanding-deleted}; â *end example*]
|
||||
Reference in New Issue
Block a user