Здравствуйте, vdimas, Вы писали:
V>LSP затрагивает как саму иерархию, так и код, её использующий. Даже идеальная иерархия типов, разработанная для соблюдения LSP, может быть использована с его нарушением.
Всё упирается в то, что мы считаем контрактом.
С точки зрения С++, контракт исчерпывается типами и количеством аргументов и возвращаемого результата.
Именно это проверяет компилятор.
То, что метод Numeral.Increment имеет ту же семантику (в общем смысле), что и метод Integer.Increment, компилятор проверить не может.
Но это — проблемы компилятора и конкретного языка, а не принципа в целом.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.