doit_internal
требуется, потому что одна из ваших функций ссылается на него.Хотя на саму функцию не ссылаются, она все еще является частью приложения, поэтому компоновщик требует ее зависимостей.
Если вы включите оптимизацию, то Clang пропускает реализацию doit
, и ваше приложение успешно связывается: http://coliru.stacked -crooked.com / a / 8496f4e097d2f0ee
godbolt - это только компилятор, он ничего не связывает и не запускает, поэтому он не отображает ошибок ссылок.Обратите внимание, что в сборке все еще есть call Derived::doit_internal(int)
, поэтому, если вы возьмете эту сборку и попытаетесь связать ее, вы получите ту же ошибку компоновщика.