An implementation may derive any class in the C++ standard library from a class with a name reserved to the implementation.
Certain classes defined in the C++ standard library are required to be derived from other classes in the C++ standard library. 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.
In any case:
Every base class described as non-virtual shall not be virtual;
Unless explicitly stated otherwise, types with distinct names shall be distinct types.190
There is an implicit exception to this rule for types that are described as synonyms for basic integral types, such as size_t ([support.types]) and streamoff ([stream.types]).