
I've done this before, the general pattern I've used is #ifndef FOO_NAMESPACE_NAME # define FOO_NAMESPACE_NAME foo #endif #define FOO_BEGIN namespace FOO_NAMESPACE_NAME { #define FOO_END } #define FOO_NAMESPACE_FOO(name) ::FOO_NAMESPACE_NAME::(name) Of course, it would be quite a chore to trawl through all of boost to make this sort of scheme work. However, version numbers could also be concatenated automatically as required. On Wed, Jun 24, 2009 at 12:49 PM, Lewis Hyatt <lhyatt@gmail.com> wrote:
Hi Everyone-
This has been discussed before (http://thread.gmane.org/gmane.comp.lib.boost.devel/180008), but I think my question is along a slightly different line so I thought I would ask about it. Let's say I want to compile and distribute a library (without the source), and I happen to use some boost header-only libraries as an implementation detail in some of my functions. None of the headers associated with my library include boost headers; it's purely an internal detail.
Now, it seems to me that users of my library will still have to be aware of the fact that I used boost in my implementation -- specifically, if they happen to use different versions of the same boost libraries in their code, then the ODR is violated and the behavior is undefined.
I realize this isn't a boost-specific problem (it would affect any library of template functions), but I am wondering if there is a boost-specific solution already worked out? Has anyone thought about this? It seems to me that in this case, what would be ideal would be if I could do:
#define BOOST_NAMESPACE some_unique_namespace_for_boost #include "boost/algorithm/string.hpp" BOOST_NAMESPACE::shared_ptr<void> x; //or whatever
Then I can insure there are no ODR violations and I don't need to bother users of my library with the fact that I used boost at all.
Other than the sheer annoyance of having to go through all the boost code to use this macro, is there a strong downside to this approach?
Alternatively, I could try:
namespace { #include "boost/..." }
But I don't know, could this work? Or are there boost headers that rely on fully qualified references like ::boost::algorithm::whatever?
I'd appreciate anyone's thoughts on this issue, thanks!
-Lewis
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost