Однако, что касается частей стандартной библиотеки, которые используют наследование, я могу только думать о
- библиотека диагностики, в которой все исключения, сгенерированные стандартной библиотекой, наследуются от std::Exception,
- и ввода/ выходная библиотека, содержащая дюжину классов, связанных между собой иерархией наследования, которая также имеет ромб.
(¹) Да, вопрос относится к STL. Но я думаю, даже принимая двусмысленность, я думаю, что диспропорция между шаблонными и виртуальными частями библиотеки все еще сохраняется.
(²) Интересно, были бы эти две библиотеки разработаны по-разному, на основе Модули C++20.
(³) Уточнение: я не ищу ответов типа (со ссылкой на диагностическую библиотеку) "О, это довольно просто! Это потому что вы хотите, чтобы std::logic_error, std::runtime_error и другие исключения реализовывали то, что, поэтому вы можете вызвать .what для исключения, фактически не зная его конкретного типа !", потому что однопроходные алгоритмы также "хотят", чтобы их входные данные итераторов реализовывали операторы++ и оператор*, но они не требуют, чтобы все итераторы имели общий базовый класс! р>
Подробнее здесь: https://stackoverflow.com/questions/791 ... nheritance