Это работает, потому что из-за того, как работает виртуальное наследование, B должен создать Base, чего не может быть, потому что конструктор Base является частным.Только А может построить Базу.В обычном наследовании B создает A, что создает Base, что хорошо, потому что A может создавать Base, а B может создавать A.