Well, I once tried to make a serialization library for C based on the preprocessor. Lost a bunch of moths trying it and ended up completely frustrated cause preprocessors vary in implementations and even crash when you through complicated things at them. Never understood how the boost library can be so based on the preprocessor.