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

58 lines
2.0 KiB
Markdown
Raw Permalink 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)