Имена производных классов должны быть жестко заданы в C ++. Нет другого способа их использовать. Следовательно, не только нет способа автоматически определить, какие классы были скомпилированы, но и нет способа использовать эту информацию, если она существует.
Если бы вы могли указывать классы во время выполнения на основе их имени, что-то вроде:
std :: string foo = "Derived1";
Base * object = new "foo"; // или какая угодно запись - не работает в C ++
тогда была бы полезна возможность узнать, был ли скомпилирован Derived1 или нет. Поскольку вы должны указать класс напрямую, например:
Base * object = new Derived1; // работает в C ++
Вся проверка выполняется во время компиляции.