
John Maddock wrote:
Boost.Regex avoids this by moving most of the template instances you will likely use into the library (so they don't get instantiated in your object files), and precompiled headers are certainly a big win in this case.
FWIW - this is the approach used by the serialization library. All "known" instantiations are built and added to the library. The linker just adds in the appropriate instantiation. The permits things like xml serialization (which depends upon spirit) to be used without constantly recompiling this code every time that archive is used. But still if one serializes a lot of class types, it can take a while. So the recommended approach is to divide one's code into smaller modules that don't have to be recompiled as often. The serialization library also includes a test/demo (demo_pimpl) which illustrates how to do this with one's own serialization. In fact, I find it useful to explicitly instantiate all the combinations I might use and add them to an "application library". The final application link draws from this library only the instantiations actually use. To summarize - in theory one can just include headers willy-nilly and let the compiler-linker handle everything. In practice, there is a lot of benefit to investing some effort to divide one's application into smaller modules each with fewer dependencies. That's my advice. Robert Ramey