What about templates make them incompatible with modules? If they can be encoded in text, they can be encoded in some abstract binary format. People just have to agree on what that is.
From what I understand it is the preprocessor macros that make this really awkward. Personally I would like to see C++ abandon those in favor of a "real" macro system.
If there was some kind of parametric polymorphism in Fortran I would die happy.