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