
If X is usable without serialization, users shouldn't be forced to also
link to the serialization library, just because of this dependency. (In the particular case I have in mind this dependency was controlled by a preprocessor macro. That's not very practical, since packagers surely won't provide two sets of packages for X, one with and one without this dependency.)
Thus, I'd suggest to encapsulate the X-serialization functionality into a separate library (may be header-only), such as X_serialization.hpp etc. Then I can still use X stand-alone, and drag in the rest whenever I need it.
This has been discussed before. You don't need X_serialization.hpp, if you don't use BOOST_CLASS_EXPORT. See http://www.archivesat.com/Boost_developers/thread2900871.htm. Emil Dotchevski