Поскольку ваша реализация std::vector
допускает неполный тип.Это побочный эффект правил создания функций-членов шаблонов классов: они не создаются, пока не будут использованы.Таким образом, функции, которые делают , нуждаются в полном типе, еще не созданы.Так что никаких ошибок.
Наоборот, для базового класса это должен быть полный тип, так что в этом случае вы получите ошибку.
Однако это фактически неопределенное поведениепередать неполный тип в std::vector
(или в любой другой стандартный контейнер библиотеки), и «это работает» - допустимый неопределенный результат.Ты не должен этого делать.