This commit is contained in:
2025-10-25 03:02:53 +03:00
commit 043225d523
3416 changed files with 681196 additions and 0 deletions

57
cppdraft/derivation.md Normal file
View File

@@ -0,0 +1,57 @@
[derivation]
# 16 Library introduction [[library]](./#library)
## 16.4 Library-wide requirements [[requirements]](requirements#derivation)
### 16.4.6 Conforming implementations [[conforming]](conforming#derivation)
#### 16.4.6.13 Derived classes [derivation]
[1](#1)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3856)
An implementation may derive any class in the C++ standard library from a class with a
name reserved to the implementation[.](#1.sentence-1)
[2](#2)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3862)
Certain classes defined in the C++ standard library are required to be derived from
other classes
in the C++ standard library[.](#2.sentence-1)
An implementation may derive such a class directly from the required base or indirectly
through a hierarchy of base classes with names reserved to the implementation[.](#2.sentence-2)
[3](#3)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3870)
In any case:
- [(3.1)](#3.1)
Every base class described asvirtual shall be virtual;
- [(3.2)](#3.2)
Every base class not specified asvirtual shall not be virtual;
- [(3.3)](#3.3)
Unless explicitly stated otherwise, types with distinct names shall be distinct
types[.](#3.sentence-1)
[*Note [1](#note-1)*:
There is an implicit exception to this rule for types that are
described as synonyms ([[dcl.typedef]](dcl.typedef "9.2.4The typedef specifier"), [[namespace.udecl]](namespace.udecl "9.10The using declaration")), such assize_t ([[support.types]](support.types "17.2Common definitions")) andstreamoff ([[stream.types]](stream.types "31.2.2Types"))[.](#3.3.sentence-2)
— *end note*]
[4](#4)
[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/lib-intro.tex#L3892)
All types specified in the C++ standard library shall be non-final types
unless otherwise specified[.](#4.sentence-1)