[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.4 The typedef specifier"), [[namespace.udecl]](namespace.udecl "9.10 The using declaration")), such assize_t ([[support.types]](support.types "17.2 Common definitions")) andstreamoff ([[stream.types]](stream.types "31.2.2 Types"))[.](#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)