So what would you suggest to make the things you mentioned work? That was: 1. templated virtual functions 2. finding all derived classes (from other source files)
The problem is that D wants to support dynamic linking on the module level, more or less.
I still wonder how serialization is supposed to work. Yeah, we can get all information at compile time using __traits. But right now, we had to register all classes manually using a template function, like "void registerForSerialization(ClassType)();". What you'd actually need is to iterate over all classes in your project. So this _needs_ a solution.
My best bet would be to allow some kind of "module preprocessor": some templated piece of code is called each time a module is compiled. Something like "dmd a.d b.d c.d -preprocessor serialize.d". serialize.d would be able to iterate over the members of each module (a, b, c) at compiletime.
(We also could need some C# like attributes to mark transient class members and the like.)