Boost is great. We all love it. However there is one gotcha that you have to keep in mind about it, which is the following:
You must never, NEVER expose Boost in your public headers!
Even if you think you have a valid case, you don’t! Exposing Boost is 100% absolutely the wrong thing to do always!
Why is that?
Because Boost has no stability guarantees. It can and will change at any time. What this means is that if you compile your library against a certain version of Boost, all people who ever link to it must use the exact same version. If an application links against two libraries that use a different version of Boost, it will not work and furthermore can’t be made to work. Unless you are a masochist and have different parts of your app #include different Boost versions. Also: don’t ever do that!
The message is clear: your public headers must never include anything from Boost. This is easy to check with grep. Make a test script and run it as part of your test suite. Failure to do so may cause unexpected lead poisoning courtesy of disgruntled downstream developers.