, если функция не реализована, при определении одного объекта из A. возникнет ошибка связи. Так почему?
Поскольку в стандарте говорится, что функция должна быть определена вэтот случай (выделение мое):
[class.virtual]
Виртуальная функция, объявленная в классе , должна быть определена или объявлена чистой ([class.abstract]) в этом классе, или оба;Диагностика не требуется ([basic.def.odr]).
Поскольку отсутствие определения для не чистой виртуальной функции не соответствует стандарту, стандарт не требует, чтобы инструментцепочка успешно создаст исполняемый файл.
Если компоновщик смог диагностировать отсутствующее определение, то вы можете считать себя счастливчиком, поскольку диагностика не предусмотрена стандартом.Если сообщение было расплывчатым, то есть причина, по которой диагностика не обязательна.Линкеру непросто выяснить, почему источник не работает.