Files
cppdraft_translate/cppdraft/derivation.md
2025-10-25 03:02:53 +03:00

58 lines
2.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

[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)